2014-12-03 12 views
12

Цель:Рассматривать использование @author как нарушение кода стиля

Выдать предупреждение в случае, если @author тег используется в любом месте внутри .js файлов в проекте.

Вопрос:

Это то, что jshint или другие инструменты статического проверка кода может помочь? Если нет, какие у меня варианты?

Описание:

Я полностью согласен с ответом Павла на Javadoc @author tag good practices нить и лечить @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'. –

+0

@torazaburo благодарим вас за полезный комментарий, он действительно может быть законным ответом. – alecxe

ответ

7

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

5

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

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

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

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

Great instructions here,, хотя отмечают, что те находятся на сайте «jshint-некст».

Пример код с этой страницы:

// 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."); 
    }); 
} 

Вот от первоначального раздела о том, как настроить линт:

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, например), но это выглядит довольно многообещающе.Опять же, вы можете увидеть, как интегрировать, используя инструкции above. И похоже, что это формат used in style.js.

У меня есть нет еще не пробовал. Просто не успел дома; Извинения.

Есть ли какая-то конкретная причина торазабуро «Просто grep это ответ не работает? Вам нужно, чтобы это было частью рабочего процесса с качеством кода? Если это так, это «написать свой собственный модуль», похоже, будет способом.

Есть также довольно очевидные способы взломать JSLint, если вы за это заняты, но я не уверен, что Crockford по достоинству оценит это. ; ^)

+0

Ха, конечно же, награда отмечена * как * Я пишу этот ответ. Это то, что я получаю. – ruffin

+0

:) Не беспокойтесь об этом - я попробую это и вернусь к вам. Большое спасибо. (из опросов на сегодняшний день, но это определенно заслуживает одного) – alecxe

+0

FYI, я опубликовал, как я решил его с помощью «ESLint» (обратите внимание на простоту). Баунти идет к вам в любом случае. Спасибо, что посмотрели на это. – alecxe

4

Решено с помощью ESLint package - подключаемая утилита для переливания для JavaScript.

Создано custom rule (примечание как это просто) и спас его 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 здесь means, чтобы включить правило как ошибку (код выхода 1 при срабатывании).