Относитесь к использованию @author как к нарушению стиля кода
Цель:
Выдать предупреждение, если тэг @author
используется где-нибудь внутри файлов .js
в проекте.
Вопрос:
Может ли это помочь jshint
или другим инструментам проверки статического кода? Если нет, какие у меня варианты?
Описание:
Я полностью согласен с Полом ответить на поток Javadoc @author tag и лечить тэг @author
как ненужный шум.
И, в мире Python, я видел людей, проверяющих использование тегов. Например, Openstack Style Guidelines
явно не использует тег @author
. Они разработали набор пользовательских flake8
проверок, которые включают:
[H105] Don’t use author tags.
Теперь я пытаюсь решить ту же проблему в JavaScript.
Пример (это не должно проходить проверку качества кода):
/**
* @author John Smith <[email protected]>
*/
'use strict';
Ответы
Ответ 1
Нет, jshint не может этого сделать. Просто сделайте grep через источники, которые ищут @author. Если вы хотите, вы можете поместить это в git pre-commit hook. Или вы можете взломать JSDoc на ошибку при создании документов, если он встречает @author.
Ответ 2
Извините, я хотел попробовать это, прежде чем публиковать ответ, но щедрость почти вверх.; ^)
Этот ответ утверждает, что существует способ написать собственный модуль JSHint.
Предположим, что он работает как рекламируемый и снова слит.
Отличные инструкции здесь,, хотя обратите внимание, что они находятся на сайте jshint-next.
Пример кода с этой страницы:
// This module errs on any identifier that doesn't starts with 'kitty'.
function myModule(linter) {
linter.on("Identifier", function (ident) {
if (ident.name && ident.name.slice(0, 5) !== "kitty")
linter.report.addError("C001", "More cats please.");
});
}
Здесь из начального раздела о том, как настроить linter:
var Linter = require("jshint").Linter;
var code = "<your beautiful JavaScript code here>";
// Create a new instance of Linter.
var linter = new Linter(code);
// Now you can teach JSHint about your predefined variables.
// Note that default JavaScript identifiers are already there.
linter.addGlobals({
jQuery: false,
MyPlugin: true
});
// If you have any JSHint extensions, you can attach them
// to the current instance.
linter.addModule(myModule);
// Finally, parse your code.
linter.parse();
Я понимаю, что довольно общий (вам все равно нужно исследовать опции linter.on
за пределами Identifier
, там тоже String
), но это выглядит довольно многообещающе. Опять же, вы можете увидеть, как интегрировать с помощью инструкций выше. И похоже, что это формат, который используется в style.js
.
У меня не еще ничего не пробовал. Просто не успел дома; Извинения.
Есть ли какая-то конкретная причина торазабуро "Просто grep
он" ответ не работает? Вам нужно, чтобы это было частью рабочего процесса с качеством кода? Если это так, это "написать свой собственный модуль", похоже, будет способом.
Есть также довольно очевидные способы взломать JSLint, если вы за это заняты, но я не уверен, что Crockford это оценит.; ^)
Ответ 3
Решено использовать ESLint
package - подключаемую утилиту linting для JavaScript.
Создано настраиваемое правило (обратите внимание, насколько это просто) и сохранили его в rules/no-author.js
:
/**
* @fileoverview A rule to disallow @author tag in code
*/
module.exports = function (context) {
"use strict";
function checkComment(node) {
var commentToCheck = node.value.toLowerCase().trim();
if (commentToCheck.indexOf("@author") !== -1) {
context.report(node, "A comment unexpectedly contains @author.");
}
}
return {
"BlockComment": checkComment,
"LineComment": checkComment
};
};
Теперь представьте, что у меня есть файл test.js
, который нарушает использование тега @author
:
/**
* @author John Smith <[email protected]>
*/
И посмотрите, как применяется правило:
$ eslint test.js --rulesdir=rules/ --rule='no-author: 2'
test.js
1:0 error A comment unexpectedly contains @author no-author
✖ 1 problem
FYI, no-author: 2
здесь означает, чтобы включить правило как ошибку (код выхода 1 при запуске).