Jshint: 2.9.3で機能しないW100の警告を無効にする

作成日 2016年08月19日  ·  4コメント  ·  ソース: jshint/jshint

https://github.com/IgniteUI/ignite-ui/pull/243を参照してください:

最初のビルドは2.9.2で合格し、2.9.3アップデートでの連続ビルドは失敗し、行は/ * jshint -W100 * /でラップされます

アップデートブログに関連するものは何もありませんが、それらの処理方法に何か変更がありますか?

Regression

最も参考になるコメント

報告ありがとうございます! これは確かに回帰です。

それはあなたに大いに役立つわけではありませんが、新しいリリースは以前に存在していたバグを表面化したようです-あなたが共有した入力を減らす過程で、私はバージョン2.9.2でもこの問題を経験することができました。

少し離れる必要がありますが、今夜(EST)にパッチを用意したいと思っています。

全てのコメント4件

報告ありがとうございます! これは確かに回帰です。

それはあなたに大いに役立つわけではありませんが、新しいリリースは以前に存在していたバグを表面化したようです-あなたが共有した入力を減らす過程で、私はバージョン2.9.2でもこの問題を経験することができました。

少し離れる必要がありますが、今夜(EST)にパッチを用意したいと思っています。

ストーリーは次のとおりです。

式で開き括弧文字( ( )に遭遇したとき
位置、JSHintのようなES2015対応のJavaScriptパーサーが決定する必要があります
グループ化演算子または矢印関数の開始をマークするかどうか。

JSHintは、次のすべての入力をトークン化して、
「一致する」閉じ括弧文字( ) )。 その時点で、それは作ることができます
問題の作品の性質についての決定-それが続いている場合
=>トークンによると、これは矢印関数です。 それ以外の場合は、グループ化演算子です。

先を見据えている間は、遭遇したインラインディレクティブは適用されません。
-W100など。 ただし、レクサーは特定のリンティングを放出する責任があります
エラー_include _ W100 。 したがって、JSHintが「先を見据える」ことを開始するとすぐに、
これらの潜在的に危険なキャラクターに対応する行動は「閉じ込められた」ものです。
(これは、このリグレッションに苦しんでいる人のための短期的な修正を示唆しています:無効にする
IIFEの前にW100 。 理想的ではありませんが、その関連性に注意してください警告は争われています。)

このリグレッションは、一見無関係なパッチgh-3003が原因で発生しました。
以前は、セミコロントークンがあった場合、先読みはキャンセルされていました
次のように遭遇しました:

(function() {
;//<-- lookahead ends at this semicolon token
}());

...ただし、矢印関数のため、これは無効なヒューリスティックであることが判明しました
パラメータ自体にそのトークンが含まれている場合があります。

(x = function() {
;//<-- lookahead should *not* end at this semicolon token
}) => x;

そこで、そのような場合に矢印関数を正しく認識するために削除しました。

それを念頭に置いて、完全に縮小されたテストケースはもう少し明確になるかもしれません(
文字列リテラル内の印刷できない\u200f文字です):

(function() {
    ;

    /*jshint -W100 */
    "‏";
})();

gh-3003(たとえば、バージョン2.9.2のJSHint)より前では、セミコロンは
先読みし、印刷できない文字は_後_まで字句を付けられません
JSHintディレクティブが適用されました。 修正を適用すると、JSHintは文字を字句変換します
ディレクティブを適用する前に、警告に進みます。

これは、JSHint2.9.2でも根本的な問題がどのように存在するかを示しています。
次の入力は、そのバージョンのバージョンでも誤って警告をトリガーします
JSHint:

(function() {
    /*jshint -W100 */
    "‏";
})();

ここでは、括弧でトリガーされた先読みがどちらでも中断されないためです
バージョン。

理想的な修正は、先読み中にディレクティブを適用することです。 残念ながら、
JSHintのインラインディレクティブの非常に柔軟な性質に対して、これはそうではありません
可能。 ユーザーは、ディレクティブに「関数スコープ」、つまりレクサーがあることを期待しています。
生成するトークンの周囲のセマンティクスに注意する必要があります。

ここに修正を送信しました:gh-3016。 長期的には、検討すべきだと思います
先読みヒューリスティックに対するその他の改善-(無効な)セミコロンなし
チェックしてください、IIFEでプログラム全体をラップする一般的な方法は
JSHintは、最初にすべての入力をlexします。

詳細な説明ありがとうございます!
スコープに膨大な量の余分な作業を追加しなければ、これがいかに難しいかがわかります。
2.9.2はファイルで機能するため、しばらくは固執し、問題のある部分を将来管理できるブロックに分割することを検討します:)

このバグの修正は、新しく公開されたJSHintバージョン2.9.4で利用できるようになりました。

http://jshint.com/blog/2016-10-20/release-2-9-4/

それでもそのバージョンで問題が発生する場合は、お知らせください。

このページは役に立ちましたか?
0 / 5 - 0 評価