「+」エラーの前のJSHintの不正な改行の説明


125

JSHintが以下について文句を言う理由を誰かが私に説明できますか、

window.location.href = String1
    + '#'
    + Sting2
    + '='
    + String3;

エラーで、 Bad line breaking before '+' error

このエラーはlaxbreak オプションで構成できることを理解しています

このオプションは、コード内の安全でない可能性がある改行に関する警告のほとんどを抑制します。カンマファーストコーディングスタイルに関する警告は抑制されません。それらを抑制するには、laxcommaを使用する必要があります(以下を参照)。

この説明はかなり簡潔であり、なぜこのように改行することが最初から悪いまたは緩いと見なされるのかについて興味があります。

ここで聖戦を開始しようとしているのではないことに注意してください。私はJSHintの人々がなぜこれが悪いと思うのかについての客観的な答えを探しています。意欲的なリンター)、またはこの方法で改行するときに特定のインタープリターで問題が発生する可能性がある場合。


6
JSHintによると、それは単に「悪いスタイル」だと思います。先行コンマを使用しても同じ効果が得られます。読みやすくするために、少なくとも行の最後に+を付けて書き直します。
イワン

28
残念。特に狭いウィンドウでコードを表示する場合、このスタイルは複数行の文字列で使用するのに最も読みやすいスタイルだと思います。
ランバート、2014

12
ステートメントを続けるトークンで先行することは、物事を整列させ、コードブロックの左側で継続を視覚的に表現するのに役立ちます。これは、特にすばやくスキャンする場合に、構造要素を見つけることが期待される場所です。それは確かに実行可能で合理的であり、客観的に悪いスタイルではありません。ただし、このルールを適用するためのコード整合性の問題があり、残念です。
Adam Tolley、2014年

1
@AdamTolley私は完全に同意し、私がこれについて尋ねたとき、これがFUDであることを確認しているように見えました。それは「メタ効果」の後で精査されました。そしてその精査はこれが実行可能で合理的であることを確認するように見えました。
HostileForkは、SEを信頼してはならないを2015

2
最近(JSHint 2.9.4)、エラーメッセージは'+'の前に誤解を招く改行です。読者はこれを式の境界として解釈するかもしれません。
RhinoDevel 2017年

回答:


107

これは、文避けるためのスタイルガイドです可能性についての仮定に責任を負うべきで自動セミコロン挿入を

アイデアは、式がそこで終了するのか、次の行に継続できるのかを、行の終わりまでに明確にすることです。


6
回答に感謝します。エラーの背後に根拠があるため、JSHintを緩和するための変更を正当化することがはるかに簡単になります。
James McMahon

36
セミコロンの自動挿入は、このスタイルを適用するための合理的な合理的です。ただし、式が括弧内にある場合、警告が引き続き表示されます。そして、それは私を悲しくさせます。
Ben Hyde 14年

23
2番目の@BenHyde。一般に、コードをスキミングして+。目には、各行の遠端にジャンプして次の行によって追加されるかどうかを確認するよりも、左側の単一の列をたどる方が簡単です(エラーが起こりにくい)。文法もそれほど簡潔ではありません。「118行目は117行目を追加する」と「117行目は118行目によって追加される」のです。
14

9
個人的には、演算子(およびコンマ)を行の最後に追加するのが嫌いです。複数行のブール文(&&または||の最後ではなく、行の先頭)でロジックを読む方が簡単です。また、コンマ区切りのリストを、コンマ。laxbreakについて神に感謝します
aaaaaa

2
@Barneyセミコロンの自動挿入に関する懸念と、よく似た質問への回答をどのように調整しますか?この形式の正当なリスクは何ですか?私にとっては、スキャンしやすさの点で優れています。
HostileForkはいけない信頼SE言う

8

新しい行ではなく改行の前に+を使用すると、Jshintはこれを不良な改行としてフラグを立てません。そのようです:

window.location.href = String1 +
'#' +
Sting2 +
'=' +
String3;

10
これは1つのイオタでさえ質問に答えません。なぜそれほど多くの賛成票があるのですか?
ランバート

4
おそらくこれは、jshint設定を変更せずにこの問題を回避する1つの方法です。
asulaiman '10 / 09/15

4
これは実際には質問に答えるものではありませんが、貴重な情報を提供するので、コメントにする必要があります。
tomtomssi

3

質問への直接の回答ではありませんが、ルールを維持したいが警告を修正したい(私がしたように)グーグルからこれに出くわす人にとって、以下は有用かもしれません...

Notepad ++を使用する場合(たとえばJSLintプラグインを使用)、これは次の検索と置換を使用して修正できます。

  • 何を見つける: (\r\n|\n|\r)( *)\+
  • 置換:(最初と最後のスペースを含む) +$1$2 
  • 検索モード:正規表現

(Windowsでのみテストされていますが、正規表現はUnixまたはMac OSの行末でも動作します。)

同じようなことのために行うには||&&==!=<=または>=の代わりに+、これを使用します:

  • 何を見つける: (\r\n|\n|\r)( *)(\|\||&&|==|!=|<=|>=)
  • 置換:(最初と最後のスペースを含む) $3$1 $2 

5
おそらく、フォーマットを変更したい人のために便利です。しかし、それは(暗黙の)質問に完全に答えることはできません。
ランバート、2015

フェアポイント、私がこれを投稿した理由を説明するメモを上部に追加しました。
スティーブチェンバーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.