14

ゴール:

プロジェクト内のファイル@author内の任意の場所でタグが使用されている場合に警告を発行します。.js

質問:

それは、jshintまたは他の静的コード チェック ツールが役立つものですか? そうでない場合、どのようなオプションがありますか?

説明:

Javadoc @author タグのグッド プラクティススレッドでの Paul の回答に完全に同意し、@authorタグを不要なノイズとして扱います。

また、Python の世界では、タグの使用法をチェックしている人を見てきました。たとえば、タグOpenstack Style Guidelinesを使用しないことを明示します。@author彼らは、flake8以下を含む一連のカスタム チェックを開発しました。

[H105] Don’t use author tags.

今、私は JavaScript で同じ問題を解決しようとしています。

例 (これはコード品質チェックに合格しないはずです):

/**
 * @author John Smith <john@smith.com>
 */

'use strict';
4

3 に答える 3

6

申し訳ありませんが、回答を投稿する前にこれを試すつもりでしたが、賞金はもうすぐです。;^)

この回答は、独自の 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.");
  });
}

以下は、リンターのセットアップ方法に関する最初のセクションからのものです。

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 がそれを評価するかどうかはわかりません。;^)

于 2014-12-18T15:54:02.363 に答える
6

JavaScript 用のプラグ可能なリンティング ユーティリティであるESLintpackageで解決しました。

カスタム ルールを作成し(非常に単純であることに注意してください)、次の場所に保存しました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 <john@smith.com>
 */

そして、ルールがどのように適用されるかを見てください:

$ eslint test.js --rulesdir=rules/ --rule='no-author: 2'

test.js
  1:0  error  A comment unexpectedly contains @author  no-author

✖ 1 problem

参考までに、no-author: 2ここではルールをエラーとしてオンにすることを意味します (トリガーされたときの終了コードは 1 です)。

于 2014-12-26T23:49:54.837 に答える