私は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;
}
...そしてそれはそれ自身のフォーマットについて不平を言うのをやめました。