Основы веб-сайтов Visual Studio JSDoc intellisense для методов, назначенных в конструкторе, не работает?

Я немного новичок в комментариях jsdoc (пытаюсь преобразовать некоторые комментарии vsdoc в jsdoc, чтобы я мог использовать генераторы документов, поддерживающие jsdoc), поэтому остановите меня, если я делаю что-то явно неправильное, но я заметил, что если вы назначите методы прототипа конструктора, для этого члена работает intellisense:

/** 
 * @constructor 
 * @this {Foo} 
 */ 
function Foo() {}

/** 
 * A bar of Foo for you.
 * @param {string} baz A foo bar baz. 
 * @return {string} You get back what you give. 
 */ 
Foo.prototype.bar = function(baz) { return baz; }

Но если вы назначаете bar в конструкторе, intellisense на методе bar ломается — он просто показывает весь комментарий, теги jsdoc и все в виде единого блока. Он не отображает типы аргументов и не передает возвращаемое значение через:

/** 
 * @constructor 
 * @this {Foo} 
 * @param {string} baz A foo bar baz. 
 */ 
function Foo(baz) { 
  /** 
   * A bar of Foo and something else too.
   * @param {string} barzipan A little something extra. 
   * @return {string} You get back what you gave, and then some. 
   */ 
  this.bar = function(barzipan) { return baz + barzipan; }; 
}

Парсер vsdoc intellisense может обрабатывать либо методы прототипа, либо методы, назначенные this, но парсер jsdoc, похоже, сбит с толку методами, назначенными this в конструкторе.


person Jeremy Bell    schedule 09.09.2013    source источник


Ответы (1)


Чтобы справиться с этим, вам нужно добавить еще несколько бит синтаксического сахара к значениям jsdoc. Это потому, что синтаксический анализатор не знает, как преобразовать this.bar() в Foo.bar(). Чтобы решить эту проблему, добавьте что-то вроде следующего:

/** 
 * @constructor 
 * @this {Foo} 
 * @param {string} baz A foo bar baz. 
 */ 
function Foo(baz) { 
  /** 
   * A bar of Foo and something else too.
   * @param {string} barzipan A little something extra. 
   * @return {string} You get back what you gave, and then some. 
   * @function bar
   * @memberof {@link Foo}
   */ 
  this.bar = function(barzipan) { return baz + barzipan; }; 
}

См. JSDoc @memberof и JSDOC @функция. Это также может помочь вам, когда вы хотите создать приватную функцию (для документирования приватных, используйте команду -p при запуске JSDOC).

function Foo(baz) {
    /**
     * Returns what Bob did...
     * @param {string} doStuff Stuff to pass in.
     * @function bob
     * @memberof Foo
     * @private
     */
    var bob = function(doStuff) {
         return "Bob did " + doStuff;
    }
}
person Peter Street    schedule 05.10.2016