У меня есть функция $.publish
опубликовать список функций связывания первого аргумента this
, и я намерен использовать его для написания X.prototype
, например:intellisense.annotate функции с динамически созданной аннотацией
X.prototype = (function() {
function privateFunction(me) {
/// <summary>privateFunction</summary>
/// <param name="me" type="X"></param>
}
return $.publish({
publicFunction: function (me, a) {
/// <summary>publicFunction</summary>
/// <param name="me" type="X"></param>
/// <param name="a" type="Number"></param>
}
})
})();
Так что я могу использовать X
как
var x = new X;
x.publicFunction(0);
реализация $.publish
в файле lib.js
является
publish: function (fs) {
return $.map(fs, function() {
var f = this;
return function() {
f.apply(/* irrelevant */);
}
})
}
.
Проблема
Когда я печатаю x.publicFunction(
, помощь подписи только скажите мне, что publicFunction()
, не зная параметров a
.
MSDN doc - Adding IntelliSense Annotations говорит, что мы можем аннотирование функции, как:
intellisense.annotate(someFunc, function (a) {
/// <signature>
/// <summary>Description of someFunc</summary>
/// <param name="a">Param a</param>
/// </signature>
});
Так что я написал следующий код в lib.intellisense.js
:
$.publish = function (fs) {
/// <summary>Publish a list of functions</summary>
/// <param name="fs" type="Object">List of functions to publish</param>
return $.map(fs, function() {
var f = this;
var published = function() { };
//intellisense.redirectDefinition(published, f);
var funcSrc = f.toString();
var vsdocPattern = /^([ \t]+)(\/{3} .*)/mg;
var indent = -1;
var vsdoc = "";
for (var doc; (doc = vsdocPattern.exec(funcSrc)) != null;) {
if (indent < 0) {
indent = doc[1].length;
} else if (indent != doc[1].length) {
break;
}
if (doc[2].indexOf("<param name=\"me\"") > 0) {
continue;
}
vsdoc += doc[0] + "\n";
}
if (vsdoc != "") {
vsdocPattern.lastIndex = 0;
var funcHeader = funcSrc.substr(0, funcSrc.search(vsdocPattern));
funcHeader = funcHeader.replace(/(\(\s*)me(,)?/, "$1");
var annotation = "(" + funcHeader + vsdoc + "})";
//intellisense.annotate(published, eval(annotation));
return eval(annotation);
}
return published;
})
}
В результате я получаю здесь показываем параметры a
при вводе x.publicFunction(
, но документы в vsdoc отсутствуют. Мне нужна помощь подписи, чтобы показать документы, а также информацию о типе параметров, не повторяя меня копировать и корректировать документы от x.js
до x.intellisense.js
, как?