JSDOC: как документировать внутренние переменные функции

Есть ли способ заставить JSDOC отображать переменные внутри функций без использования аннотации @namespace перед функцией?

Я сделал небольшой тестовый объект, но он будет отображать только внутреннюю переменную k для последней функции, которая объявлена ​​как пространство имен. Я думал, что использование аннотации @memberof! и точной аннотации @name отобразит внутреннюю переменную во втором методе ниже, который называется diff. Я запускаю jsdoc3 по команде с параметрами --access "all" --explain.

Вот код тестового объекта:

(function(){
    "use strict";
    /**
     * @namespace
     * @type {{}}
     */
    window.myFunctions = {};
    /**
     * Return the sum
     * @param {number} i
     * @param {number} j
     * @return {number}
     */
    window.myFunctions.sum = function(i, j) {
      /**  @type {number} */
      var k = i + j;
      return k;
    };
    /**
     * Return the difference i - j
     * @param {number} i
     * @param {number} j
     * @return {number}
     */
    window.myFunctions.diff = function(i, j) {
      /**
       * @inner
       * @memberof! window.myFunctions.diff
       * @type {number}
       * @name window.myFunctions.diff~k
       */
      var k = i - j;
      return k;
    };
    /**
     * Return the product
     * @namespace
     * @param {number} i
     * @param {number} j
     * @return {number}
     */
    window.myFunctions.multiply = function(i, j) {
      /** @type {number} */
      var k = i * j;
      return k;
    }
});

person Stefan Musarra    schedule 21.02.2016    source источник


Ответы (2)


я заметил, что ваш код находится в рамках IIFE, вам следует ознакомиться с этой проблемой

person Lloyd    schedule 02.03.2016

Вам необходимо использовать @module и @exports.

Из документации:

Если вы определяете модуль AMD как функцию, возвращающую объектный литерал, используйте тег @exports для документирования имени модуля. JSDoc автоматически обнаружит, что свойства объекта являются членами модуля.

Итак, ваш пример кода может быть размечен следующим образом:

/**
 * functions module.
 * @module my/functions
 */
(function(){
    "use strict";
    /**
     * @namespace
     * @type {{}}
     * @exports my/functions
     * @name myFunctions
     */
    window.myFunctions = {};
    /**
     * Return the sum
     * @param {number} i
     * @param {number} j
     * @return {number}
     * @exports my/functions
     * @name sum
     */
    window.myFunctions.sum = function(i, j) {
      /**
       * @type {number}
       * @exports my/functions
       * @name k
       */
      var k = i + j;
      return k;
    };
    /**
     * Return the difference i - j
     * @param {number} i
     * @param {number} j
     * @return {number}
     * @exports my/functions
     * @name diff
     */
    window.myFunctions.diff = function(i, j) {
      /**
       * @inner
       * @memberof! window.myFunctions.diff
       * @type {number}
       * @name window.myFunctions.diff~k
       * @exports my/functions
       */
      var k = i - j;
      return k;
    };
    /**
     * Return the product
     * @namespace
     * @param {number} i
     * @param {number} j
     * @return {number}
     * @exports my/functions
     * @name multiply
     */
    window.myFunctions.multiply = function(i, j) {
      /**
       * @type {number}
       * @exports my/functions
       * @name k
       */
      var k = i * j;
      return k;
    }
});
person Jonathan.Brink    schedule 03.05.2016