web-dev-qa-db-ja.com

新しいJSLintエラー「タブではなくスペースを使用」および「安全でない文字」が導入されたのはなぜですか?

私は約2年前からJSLintを使用してJavaScriptを検証してきましたが、時々規則が変わることがあります。一般に、JSLintが新しいルールを導入する場合、解析時にこのルールを無視するチェックボックスがあります。または、ルールを無視しないことを選択すると、コードをルールに準拠させることができます。

しかし、今日JSLint検証を実行していたときに、次の2つの新しいエラーに遭遇しました。

タブではなくスペースを使用します。

これは「タブとスペースの混在」エラーではありません。タブのみを使用しています。これは「タブとスペースの混合」の最近修正されたバージョンであり、現在は一般にタブを許可していません。

そして:

安全でないキャラクター。

* /

安全でないキャラクター。

_const:{

無視する新しいオプションはありません。ブロックコメントを閉じることで何が安全ではないのか、なぜ_constを考慮するのか理解できない:{nomen: true、(識別子にぶら下がっている_)、またはタブである4つのスペースのインデントに関する設定がまだあるのに、突然スペースからタブに切り替える必要があるのはなぜですか。

少なくともJSLintにこれらの新しいルールを無視させる方法が紹介された理由は誰にもわかりませんか?

更新: TheMessy White Spaceオプションは問題を回避しますが、他の予期しない動作を引き起こす可能性があります。

if (condition) { 
  //            ^-- there is a space but it won't indicate an error
56

ダグラス・クロックフォードがJSHintに切り替える人をもっとたくさん作ったようです。 this commit をご覧ください。

「スペースとタブの混合」エラーは削除され、新しい「タブではなくスペースを使用」エラーが代わりに追加されました。それとは別に、この差分には、この原因を示す小さな変更が1つあります。次の行(コメントを追加):

at = source_row.search(/ \t/);
//                      ^ Space

これに置き換えられました:

at = source_row.search(/\t/);
//                      ^ No space!

その検索に続いて、ifステートメントがあります。条件がtrueと評価された場合、「タブではなくスペースを使用」警告が発行されます。そのステートメントは次のとおりです。

if (at >= 0) {
    warn_at('use_spaces', line, at + 1);
}

IhopeこれはCrockfordによるちょっとした見落としだと思います。ご覧のとおり、タブ文字anywhereを使用すると、JSLintはこの警告を発生させます。残念ながら、彼のコミットメッセージはまったく役に立たず、ドキュメントは更新されていないようです。そのため、この変更の理由について推測する以外には何もできません。

JSLintを放棄し、今すぐ JSHint に切り替えることをお勧めします。

72
James Allardice

「乱雑な空白」オプションをクリックして、エラーを抑制することができます。

12
mathius1

答えるwhyJSLintはタブに関するエラーを表示するようになりました http://www.jslint.com/help.html はこの正当化:

タブとスペースを混在させないでください。両方を持つことから生じる問題を避けるために、1つだけを選択する必要があります。個人的な好みは非常に信頼できない基準です。どちらも、他に比べて強力な利点はありません。 50年前、タブにはメモリの消費量が少ないという利点がありましたが、ムーアの法則はその利点を排除しました。スペースにはタブよりも明確な利点が1つあります。タブが表すスペースの数には信頼できる基準はありませんが、スペースがスペースを占めることは広く受け入れられています。そのため、スペースを使用します。必要に応じてタブを使用して編集できますが、コミットする前にタブがスペースであることを確認してください。いつか最終的にタブの普遍的な標準を取得するかもしれませんが、その日が来るまで、より良い選択はスペースです。

基本的に彼は、タブやスペースを使用してそれらが混ざり合わないようにするかどうかについて、全員に合意してもらいたいと考えています。彼は、スペースの幅の一貫性がそれを優れた選択にすることを決定したので、私たち全員がそれを使うべきです。明らかに、この考え方に反対する人もいます(私も含めて)が、それがJSLintがそのエラーをスローする理由です。

7
Kat

エディター/ IDEに応じて、TABの動作を調整できます。

たとえば、私はSublime Textを使用しています。右下にタブサイズがあります:4。

クリックして、「スペースを使用してインデント」を設定しました。

これにより、すべてのタブが更新され、スペースが使用され、JSLintエラーが表示されなくなりました。コードを適切に構造化するために、JSLintではできるだけ少ないオプションを使用するようにしています。

また、エディターの設定に基づいてタブ化するJSFormatも使用するため、終了したら必ずJSFormat、次にJSLintを実行します。エラーなし=幸せな少年!

それが役に立てば幸い。

6
TyMayn