使用jsdoc创建自定义标记

时间:2016-10-26 13:39:04

标签: javascript jsdoc3

我正在尝试在jsdoc 3.4.2中创建自定义标记。 2016-10-26 00:00:00.000 文件是

config.json

{ "tags": { "allowUnknownTags": true, "dictionaries": ["jsdoc","closure"] }, "source": { "include": [ "app/" ], "exclude": [], "includePattern": ".+\\.js(doc|x)?$", "excludePattern": "(^|\\/|\\\\)_" }, "plugins": [ "plugins/custom-tags.js" ], "templates": { "cleverLinks": false, "monospaceLinks": false }, "opts": { "destination": "./docs", "recurse": true, "encoding": "utf8" } } 我添加了这些行

custom-tags.js

但是当我在代码中使用@service时,它没有显示。我看了一些与此相关的链接,发现我们需要创建模板的自定义标签,但没有找到创建模板的方法。我在我的Windows机器上全局安装了jsdoc。

1 个答案:

答案 0 :(得分:6)

你是对的,有两个步骤。

  • 首先,您要为代码中的jsdoc定义一个标记并更新其doclet对象(就像您所做的那样)
  • 其次,您需要模板,即将doclet对象转换为HTML的内容,以了解新属性并对其执行某些操作。

和你一样,我很难找到制作模板的说明。我能建议的最好的是检查jsdoc源代码。您需要创建一个公开publish函数的JavaScript文件。然后,publish函数将遍历doclet对象以生成HTML。

我有与你相同的需求,但我想要做的就是在现有的jsdoc模板中添加一个新的部分(标题和文本可能是一个参数表)。我并不是真的想要为此创建一个全新的模板,所以我最终定义了我的标签,他们最终会将HTML附加或添加到doclet.description属性。为我工作。

exports.defineTags = function(dictionary) {
    dictionary.defineTag('routeparam', {
        mustHaveValue: true,
        mustNotHaveDescription: false,
        canHaveType: true,
        canHaveName: true,
        onTagged: function(doclet, tag) {
            if (!doclet.routeparams) {
              doclet.routeparams = [];
            }

            doclet.routeparams.push({
              'name': tag.value.name,
              'type': tag.value.type ? (tag.value.type.names.length === 1 ? tag.value.type.names[0] : tag.value.type.names) : '',
              'description': tag.value.description || '',
            });
        }
    });
};

exports.handlers = {
  newDoclet: function(e) {
    const parameters = e.doclet.routeparams;
    if (parameters) {
      const table = tableBuilder.build('Route Parameters', parameters);

      e.doclet.description = `${e.doclet.description}
                              ${table}`;
    }
  }
}

请随时查看我的回购,看看我是如何做到的https://github.com/bvanderlaan/jsdoc-route-plugin