1

私はJSLINTの背後にある考え方が好きですが、私の意見では、それが少し厳しすぎることもあります。

最近、JSHINTを見つけました。それはもう少し柔軟性があり、より多くのオプションをオンまたはオフにすることができます。

しかし、JSHINTは、私が正しいと思うコードでエラーをスローしています。たとえば、JSHINTは独自のコードでbarfsします。JSHINT.jsでJSHINTを実行すると、次のようになります。

ここに画像の説明を入力してください

わかりません。その画像の下部にあるエラーメッセージが表示されますか?JSHINTは、インデントを実際とは異なるものにしたいと考えているようです。巻き毛の欠如について不平を言っているのではありません。私はcurly:false、ワンライナーのifステートメントの周りにカーリーを必要としないと言っています。

奇妙なことに、JSHINT.jsのソースコードはどこでも4スペースのインデントを使用しますが、インデントに関するエラーはこれらの数行に対してのみスローされます。なんで?

私はこれを間違っていますか?他に設定する必要があるものはありますか?


編集済み-もともと私はJSHINT で遊んでいましたがcombine()、ifステートメントと同じ行に呼び出しを配置し​​ました。エラーが残っていることを示すために、JSHINTコードを元の状態に戻しました。

ここに画像の説明を入力してください

これは、次のオプションを使用してJSHINTで実行されます。

options = {
    curly      : false, // no curly fascism
    wsh        : true,  // WScript is allowed
    white      : true,  // true: 'sloppy' whitespace is ok
    plusplus   : false, // false == ok to use ++
    passfail   : false  // do not stop after first error
    //radix      : true   // do not puke on parseInt() with no radix
};

EDIT2

これは、JSHINTが元の形式で本当に望んでいるものを示すgifです。赤いハイライトが消えたら、JSHINTはその特定の行に満足していることを意味します。(これはemacsでflymake-for-jslintを使用しています)。

ここに画像の説明を入力してください

ご覧のとおり、奇妙な方法で行をインデントすると、JSHINTはリラックスします。

答え

答えはこのgithubの問題にあると思います。JSHINTの2264行目を次のように変更しました。

***************
*** 2256,2262 ****
--- 2261,2270 ----
                          nexttoken, '{', nexttoken.value);

              noreach = true;
+             // cheeso - fix for https://github.com/jshint/jshint/issues/87
+             indent += option.indent;
              a = [statement()];
+             indent = old_indent;
              noreach = false;
          }

...そしてそれはそれ自身のフォーマットについて不平を言うのをやめました。

4

2 に答える 2

2

JSHintのメンテナはこちら。スクリーンショットに基づくと、はオプションのルールに違反する句とcombine同じ行にあるため、エラーが発生します。ifwhite

JSHintのコピーが誰によっても変更されていないことを確認しますか?JSHintの単体テストがあり、テストの1つはJSHint自身のソースコードをそれ自体でチェックします。そして、添付の例からわかるように、すべてが正常に通過します。

jshint通過jshintスクリーンショット

于 2011-09-15T21:59:28.013 に答える
0

I think the answer is in [this github issue][4]. I modified JSHINT, line 2264, like this:

***************
*** 2256,2262 ****
--- 2261,2270 ----
                          nexttoken, '{', nexttoken.value);

              noreach = true;
+             // cheeso - fix for https://github.com/jshint/jshint/issues/87
+             indent += option.indent;
              a = [statement()];
+             indent = old_indent;
              noreach = false;
          }

...and it stopped complaining about its own formatting.

于 2011-09-16T11:29:42.023 に答える