Почему у участника не должно быть @private JsDoc?

Я очищаю свой код с помощью инструмента gjslint из Google Closure Tools. Он сообщает о следующей ошибке:

Line 15, E:0222: Member "this._dictionary" must not have @private JsDoc

И это код:

/**
 * Stacker class.
 * @constructor
 * @param {frankenstein.app.Dictionary} dictionary input dictionary for stacking.
 */
frankenstein.app.Stacker = function(dictionary) {
  /** @private */ this._dictionary = dictionary;
};

Может кто-нибудь объяснить, почему this._dictionary не должен иметь @private JsDoc? Спасибо!


person J. Frankenstein    schedule 25.07.2012    source источник
comment
Я подозреваю, что это потому, что он является частным только по соглашению (например, не закрытым по закрытию).   -  person    schedule 25.07.2012
comment
В чем разница? Я не думал, что какие-либо из аннотаций подлежат исполнению.   -  person J. Frankenstein    schedule 25.07.2012
comment
Но похоже, что gslint пытается ;-) Возможно, эту ошибку можно понизить до предупреждения? Или @private изменяет вывод/эвристику Closure Compiler?   -  person    schedule 25.07.2012


Ответы (1)


Closure Linter предназначен для обеспечения соблюдения Руководства по стилю Google JavaScript. Тег JSDoc @private задокументирован следующим образом:

Используется в сочетании с знаком подчеркивания в конце имени метода или свойства, чтобы указать, что член является закрытым. Завершающие подчеркивания могут в конечном итоге устареть, поскольку инструменты обновляются для принудительного применения @private.

Начиная с версии 2.3.6 Closure Linter, ошибка «У члена ‹name› не должна быть @private JsDoc» будет выдаваться всякий раз, когда член аннотируется @private без нижнего подчеркивания в конце.

Этот код не будет выдавать никаких ошибок или предупреждений.

/**
 * Stacker class.
 * @constructor
 * @param {frankenstein.app.Dictionary} dictionary Input dictionary for 
 *     stacking.
 */
frankenstein.app.Stacker = function(dictionary) {
  /** @private */ this.dictionary_ = dictionary;
};
person Christopher Peisert    schedule 25.07.2012
comment
Разве это не противоречит?! Если вы поставите '_', вы не получите предупреждение, но если вы его не поместите, то он скажет вам, что вы должны добавить его, даже если позже он может стать устаревшим... - person Alexis Wilke; 08.04.2014