0

我们正在重写我们的 API 文档,我们希望将自定义内容添加到我们生成的 JSDocs 中。例如,此自定义内容可以是可运行的代码片段,这是我们目前在手动编写的文档中拥有的功能(基于 Jekyll 注入动态内容)。有没有办法直接实现这一点,使用 JSDoc 的模板系统和今天的一些自定义代码,或者间接地通过后处理生成的 html 来寻找某种符号?其他可以处理这个问题的 JSDoc 生成器也很有趣。

说,我们可以有这样的东西

/**
 * @param {String} foo
 * @runnableExample foo-example
 */

将为该代码生成某种自定义代码,该@runnableExample代码将插入一个名为./examples/foo-example.js. 这只是对良好用户体验的建议,而不是它需要的方式。

4

1 回答 1

1

JSDoc CLI 有一个有用的-X标志,您可以使用它来检查(和处理)注释中的元数据:

/**
 * @return {number}
 */
function answer() {
  return 42;
}
$ jsdoc -X tmp/example.js
[
    {
        "comment": "/**\n * @return {number}\n */",
        "meta": {
            "range": [
                28,
                62
            ],
            "filename": "example.js",
            "lineno": 4,
            "columnno": 0,
            "path": "/workspace/dev/tmp",
            "code": {
                "id": "astnode100000002",
                "name": "answer",
                "type": "FunctionDeclaration",
                "paramnames": []
            }
        },
        "returns": [
            {
                "type": {
                    "names": [
                        "number"
                    ]
                }
            }
        ],
        "name": "answer",
        "longname": "answer",
        "kind": "function",
        "scope": "global",
        "params": []
    },
    {
        "kind": "package",
        "longname": "package:undefined",
        "files": [
            "/workspace/dev/tmp/example.js"
        ]
    }
]

但是自定义标签呢?该-X标志也将处理它们:

/**
 * @answer 42
 */
function answer() {
  return 42;
}
[
    {
        "comment": "/**\n * @answer 42\n */",
        "meta": {
            "range": [
                22,
                56
            ],
            "filename": "example.js",
            "lineno": 4,
            "columnno": 0,
            "path": "/workspace/dev/tmp",
            "code": {
                "id": "astnode100000002",
                "name": "answer",
                "type": "FunctionDeclaration",
                "paramnames": []
            }
        },
        "tags": [
            {
                "originalTitle": "answer",
                "title": "answer",
                "text": "42",
                "value": "42"
            }
        ],
        "name": "answer",
        "longname": "answer",
        "kind": "function",
        "scope": "global",
        "params": []
    },
    {
        "kind": "package",
        "longname": "package:undefined",
        "files": [
            "/workspace/dev/tmp/example.js"
        ]
    }
]

如您所见,输出是纯 JSON,这使得通过 JavaScript 或任何体面的模板系统进行处理变得非常容易。我已经放弃 JSDoc 模板很久了。我自己使用jsdoc -X和处理注释。

最近我一直在玩 JQ 和 EJS,并将结果提供给 Slate 以生成文档网站:https ://customcommander.github.io/project-blueprint/#project-blueprint-fake-api - 这是文档网站一个虚假的 API。

你想要达到的目标肯定是可行的。希望这足以让您入门。如果您想了解更多:https ://github.com/customcommander/project-blueprint

于 2021-03-02T20:53:53.470 回答