web-dev-qa-db-ja.com

JSLint-コードのセクションを無視する

JSLintを渡す巨大なスクリプトがあります(すべての悪い部分の回避を含む)。より大きなコンテキスト内に埋め込まれている非常に複雑な難読化されたコードである1つのストレッチを除いて。 JSLintは、このセクションに対してかなりの苦情を生成します。そのコード範囲に対して、JSLintを選択的に無効にしたいと思います。私はすでに選択的に使用しています

  /*jlsint xxx:true/false*/

構造体の解釈に反することを行う特定の小さなコード範囲に対して特定の警告を無効にするディレクティブ。

私が持っている難読化されたコードは、無効にできるかどうかわからない構造を使用しています。

例えば:

for(L=(117.>

このメッセージの原因:

Problem at line 1 character 57: A trailing decimal point can be confused with a dot '117.

確かに、コードをクリーンアップできることはわかっていますが、難読化されたコードから出力されるため、難読化されたコードをクリーンアップする必要はありません。

それで、ストレッチオフコードを完全に無視するようにJSLintに指示する方法はありますか?

私はこのクエリを知っています JSLint:コメントの制御(選択的無視) しかし、応答されませんでした。

33
Zhami

これはすでにJSHintで修正されていると思います。コードをコメントでラップするだけです。

/* jshint ignore:start */
// Code here will be linted with ignored by JSHint.
/* jshint ignore:end */

ドキュメントは ここ にあり、「ディレクティブ」セクションまでスクロールダウンします。

12
Carlos Atencio

必要に応じて、これをJSLintに自分で追加できますが、これは境界線の悪です。

これが現在のバージョンでの1つの迅速で汚い方法です:

私が取るルートは、_/*_スタイルのコメントのためにtoken関数のswitchブロックをハイジャックすることです。それは 現在1276行目

_case '/*':
    for (;;) {
        i = source_row.search(lx);
...
_

これを変更して、行自体で_/*ignore:true */_のように見えるコメントを探しましょう(ただし、技術的には、この場合、trueの半分は行のどこにあってもかまいませんが、_/*ignore:false */_行 has はそれ自体で一列に並んでいるので、両方に当てはまるふりをしましょう)。

悪い、糸くずに失敗するコードの例:

_function spam()
{
    var sand = "sand";
/*ignore:true */
    var spud = "spud";
/*ignore:false */
    window.console.log(sand);
}
_

_/*ignore:true */_が見つかったら、行の最初の文字が_/*ignore:false */_である_/*ignore:..._が見つかるまで行をスキップしましょう。 1行にその誤った記述があるまで、すべてを無視します。

_case '/*':
    // Opening /* has already been sliced.
    if (source_row.startsWith("ignore:true"))    {
        do  {
            if (console.log) { console.log(source_row) };
        } while (next_line() && !source_row.trim().startsWith("/*ignore:false"));
    }   else    {
        // Put in the code that was originally there
    }
    break;
_

それは醜いですが、機能しているようです。

これで問題が発生する可能性があります。たとえば、無視して後で使用するセクションにvar宣言がある場合、JSLint_Hackedは_myVar was used before it was defined._と文句を言います。例:

_/*jslint white:true, sloppy:true, browser:true */
function spam()
{
    var sand = "spam";
/*ignore:true */
    var spud = "spud";
/*ignore:false */
    window.console.log(sand + spud);
}
_

そのようなものは厄介になる可能性があります。

そして、私はあなたがめちゃくちゃすべてを糸くずにすることを余儀なくされている場合にのみこれを使用しますが、奇妙なことに、あなたはそれを編集する能力を持っていますが、何らかの理由であなたはすべてのファイルにあるものを修正する力を持っていませんこの場合、難読化されたコードを使用します。このignore全体は、やっかいです。

JSLintが実際にどのように機能するかを知るには、JSLintの内部でもっと時間を費やす必要がありますが、next_line()関数は非破壊的であるようです。つまり、do_jslint()関数で「実際の」_/*jslint ignore:true */_スタイルのディレクティブを使用してこれを処理できます(そしてすべきです)が、処理する必要がありますadvance()関数を呼び出すときの副作用。ここで使用しているハックははるかに簡単でしたが、はるかに醜いです。

1
ruffin