Как документировать анонимные функции (закрытие) с помощью jsdoc-toolkit
Я пытаюсь документировать свой код с помощью JSDoc-инструментария. Мой код начинается с того, что он обернут самозаверяющей анонимной функцией. Как в мире я документирую это? Я потратил почти весь день на это. JS Docs не признает ничего внутри закрытия анонимной функции из-за того, что не знает, что с ним делать. Это ломается, и ни один из моих комментариев не приходит.
Мой код выглядит примерно так.
/**
* @fileoverview BLA BLA BLA
*/
/**
* This is where I don't know what to put.
*/
(function () {
"use strict";
/** or here */
var stlib = function (param, param, param) {
/** or here */
var share = {
/** or here */
config: {
button: DOM Element,
property: blablabla
},
init: function () { ...some init code here}
};
share.init();
};
widgets.add("share", stlib);
}());
Спасибо!
Ответы
Ответ 1
Вы можете использовать @namespace с @name и @lends, как это:
/**
* @name MyNamespace
* @namespace Hold all functionality
*/
(function () {
"use strict";
/** @lends MyNamespace*/
var stlib = function (param, param, param) { ...All of my code...};
}());
Ответ 2
Вы не можете документировать вложенные функции напрямую. Но вы можете сделать что-то вроде этого:
/**
* @module foobar
*/
/**
* @function
* @author Baa
* @name hello
* @description Output a greeting
* @param {String} name - The name of the person to say hello
*/
(function hello(name) {
/**
* @function
* @author Baz
* @inner
* @private
* @memberof module:foobar
* @description Check if the argument is a string (see: {@link module:foobar~hello})
* @param {String} string - The string
* @returns {String} Returns true if string is valid, false otherwise
*/
var isString = function checkString(string) { return typeof string === 'string'; };
if (isString(name))
console.log('Hello ' + name + '!');
}('Mr. Bubbles'));
Здесь я устанавливаю checkString
как private и inner, чтобы быть описательным (поскольку вложенные функции не могут быть описаны), а затем я передаю -p
для документирования частных функций. Наконец, я добавляю ссылку на родительскую функцию для ссылки.
Я думаю, что jsdoc
излишне тонкий и нуждается в замене чем-то лучшим. Это порт javadoc
, поэтому он имеет много вещей, которые имеют отношение к Java, но не JS, и наоборот. Есть очень распространенные JS-идиомы, такие как закрытие или вложенные функции, которые трудно или невозможно документировать.
Я всегда проверяю свои пути имени и отладки с помощью флага --explain
.