Подтвердить что ты не робот

Относитесь к использованию @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';
4b9b3361

Ответ 1

Нет, jshint не может этого сделать. Просто сделайте grep через источники, которые ищут @author. Если вы хотите, вы можете поместить это в git pre-commit hook. Или вы можете взломать JSDoc на ошибку при создании документов, если он встречает @author.

Ответ 2

Извините, я хотел попробовать это, прежде чем публиковать ответ, но щедрость почти вверх.; ^)

Этот ответ утверждает, что существует способ написать собственный модуль JSHint.

  • Похоже, это было сделано в ветке, https://github.com/jshint/jshint-next/wiki/Design
  • readme говорит, Этот проект устарел. Он был объединен в основной репозиторий,, чтобы хороший знак.

Предположим, что он работает как рекламируемый и снова слит.

Отличные инструкции здесь,, хотя обратите внимание, что они находятся на сайте 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 при запуске).