在 JSDoc 中,doclet 的正确定义是什么?

In JSDoc, what is the correct definition of doclet?

//Example 1
/**
 * This is a function that return a message
 * @param {String} msg The message that gonna be returned
 * @returns {String} The message 
 */
function myFunction(msg) {
  return msg
}
//Example 2
/**
 * This is a function that return a message
 * @function myFunction
 * @param {String} msg The message that gonna be returned
 * @returns {String} The message 
 */

就拿上面的例子来说,大家能告诉我JSDoc中到底哪个是doclet吗? “依赖”函数显示在文档上的注释(示例 1)或显示在文档上但不“依赖”任何东西的注释(因为我给它起了自己的名字 myFunction)?

doclet 是暴露给插件和模板的 JSDoc 实体。大多数人改为处理 JSDoc 注释,例如

so.js

/**
 * This is a JSDoc comment
 */

正在转储 doclet:

# npx jsdoc -X so.js
[
    {
        "kind": "package",
        "longname": "package:undefined",
        "files": [
            "/workspace/dev/tmp/so.js"
        ]
    }
]

另一个例子:

/**
 * @return {boolean}
 */
function foo() {
  return true;
}

文档:

# npx jsdoc -X so.js 
[
    {
        "comment": "/**\n * @return {boolean}\n */",
        "meta": {
            "range": [
                29,
                62
            ],
            "filename": "so.js",
            "lineno": 4,
            "columnno": 0,
            "path": "/workspace/dev/tmp",
            "code": {
                "id": "astnode100000002",
                "name": "foo",
                "type": "FunctionDeclaration",
                "paramnames": []
            }
        },
        "returns": [
            {
                "type": {
                    "names": [
                        "boolean"
                    ]
                }
            }
        ],
        "name": "foo",
        "longname": "foo",
        "kind": "function",
        "scope": "global",
        "params": []
    },
    {
        "kind": "package",
        "longname": "package:undefined",
        "files": [
            "/workspace/dev/tmp/so.js"
        ]
    }
]

如您所见,JSDoc 不需要您说 foo 是一个函数。可以从源代码中推断出很多信息,这些信息在 doclet 中捕获。

JSDoc 文档中有几个地方提到了“虚拟 JSDoc 注释”。这些是独立的 JSDoc 块,即没有紧接着 JS 代码。事实上,您可以生成一个完整的 API 文档,其中只有虚拟 JSDoc 注释,根本没有实际代码。