web-dev-qa-db-ja.com

JSLint:コメントの制御(選択的無視)

JSLint JavaScript Lintのようなものがあります コントロールコメント (例:/*jsl:fallthru*/)特定の文章を無視するようにしますか?

44
AnC

はい。ドキュメントから[これは古いバージョンのドキュメントからのものですが、それでも適用されることに注意してください]:

JSLintの実装は、受け入れ可能なJavaScriptのサブセットを決定できるオプションオブジェクトを受け入れます。スクリプトのソース内でこれらのオプションを設定することもできます。

オプションの仕様は次のようになります。

/*jslint nomen: true, debug: true,
  evil: false, vars: true */

オプションの指定は、/ * jslintで始まります。 jの前にスペースがないことに注意してください。仕様には、名前と値のペアのシーケンスが含まれます。名前はJSLintオプションで、値はtrueまたはfalseです。オプションの指定は、オプションオブジェクトよりも優先されます。

ドキュメントでは特に言及していませんが、複数のjslintコメントを使用して、コード全体で異なるチェックを有効または無効にすることができます(Dominic Mitchellに感謝します)。

ドキュメントのオプションの完全なリスト があります。

19
Matthew Crumley

以下は、Matthew Crumleyの優れた答えを補足するコード例です。

(function ($) {
  $.isValidEmail = function(email){
    /*jslint maxlen: 1000*/
    var EMAIL_REGEXP = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i;
    /*jslint maxlen: 200*/
    return EMAIL_REGEXP.test(email);
  };
}(jQuery));
5

私の知る限り、この質問に答えているものはありません。次のコードでは検証エラーが発生しますが、実際の優先順位が与えられているため、現在動作している正規表現を修正する時間がないことをJSLintに受け入れられません。

受け取ったエラーは、エスケープされていない「{」に関するものであり、新しい専門チームがJSLintを実行可能なツールとして拒否する可能性があります。問題を抱えているように思えますが、より効率的に開発するための努力に関して、それを黙らせる方法はないようです。

/*jslint browser: true, devel: true, todo: true, regexp: true */
/*global $ */
/*
    Abstract:
        + This module constitutes a layer of abstraction surrounding our bootstrap dependencies.
        + This module also contains some utility functions (so find a better place for them already!).
    Validation:
        + This module has been validated using JSLint (www.jslint.com).
*/
var shoelaceModule = (function () {
    'use strict';
    return {
        showModal: function ($target) {
            $target.modal('show');
        },

        hideModal: function ($target) {
            $target.modal('hide');
        },

        /*jsl:ignore */
        /*ignore jslint start */
        stringFormat: function (format) {
            var args = Array.prototype.slice.call(arguments, 1);
            return format.replace(/{([^{}]*)}/g, function (match, number) {
                return args[number] !== 'undefined' ? args[number] : match;
            });
        },
        /*ignore jslint end */
        /*jsl:end */

        init: function () {
            return this;
        }
    };
}());
4
Mike Manard

そうではないようです。一部のグーグルは、他の人によるいくつかの投稿を見つけ、「意図的に欠陥があるとラベル付けするのではなくコードを修正する」という行に沿ってJSLintの人々からの応答を見つけます。完全に友好的ではないようです。もちろん、この場合、コードを修正するだけでよいのかもしれませんが、答えはあなたにお任せします。

3
ironfroggy

あなたもすることができます: ......

ignoreThis(); // jslint ignore:line

特定の1行のJSHint警告を抑制する方法はありますか?

1
Michael Cole

JSLintには、「このコードブロックを無視する」と言う単純な方法はないようです。さまざまなオプションを個別に無効にしてから、マットのようにオンに戻すことは機能するはずですが、JSHintの/* jshint ignore:start *//* jshint ignore:end */

これを検討していた理由は、 ブラケット を使用しているためです。これはデフォルトのリンターであるJSLintに付属しています。私は、一時的に.jsにコピーしたいくつかの縮小されたサードパーティコードを持っていますが、そこにある限り、JSLintは文句を言います。悪臭を放つのは、しばしば縮小されたチャンクを早い段階で貼り付けたいことです。これは、リンターがmyコードを見て、あいまいなエラーを排除するのにも役立ちます。後で、Gruntですべてを縮小して連結しますが、早い段階でブロックを無効にできないと、本当にうんざりします。

0
Brian Chandler

これは私にとってはうまくいくようです。 (zedappに埋め込まれたjslintを使用-zedapp.org)

/*jslint ignore:start*/
require([],function(require, exports, module) {
  /*jslint ignore:end*/
  
  var api = {
    life: {
      universe: {
        everything: function() {
          this.everything = {answer : 42};
        }
      }
    }
  };
 api.life.universe.everything.bind(api.life.universe)();
 console.log(JSON.stringify(api));

  /*jslint ignore:start*/
  return api;
});
/*jslint ignore:end*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.5/require.js"></script>
0
cestmoi