コンテンツにスキップ

@stylistic/js/

nonblock-statement-body-position

ifelsewhiledo-whilefor 文を記述する場合、本体はブロックの代わりに単一の文にすることができます。 これらの単一の文に対して一貫した場所を強制すると便利です。

たとえば、一部の開発者は次のようなコードの記述を避けます

js
if (foo)
  bar();

別の開発者が if 文に baz(); を追加しようとすると、誤ってコードを次のように変更してしまう可能性があります

js
if (foo)
  bar();
  baz(); // this line is not in the `if` statement!

この問題を回避するために、単一行の if 文はすべて、改行なしで条件の直後に配置する必要がある場合があります

js
if (foo) bar();

ルールの詳細

このルールは、単一行の文に対して一貫した場所を強制することを目的としています。

このルールは、単一行の文の使用全般を強制するものではないことに注意してください。 単一行の文を許可しない場合は、代わりに curly ルールを使用してください。

オプション

このルールは文字列オプションを受け入れます

  • "beside" (デフォルト) は、単一行の文の前に改行を入れることを許可しません。
  • "below" は、単一行の文の前に改行を入れることを要求します。
  • "any" は、単一行の文の位置を強制しません。

さらに、このルールは "overrides" キーを持つオプションのオブジェクトオプションを受け入れます。 これは、デフォルトをオーバーライドする特定の文の場所を指定するために使用できます。 例えば

  • "beside", { "overrides": { "while": "below" } } は、親が while 文でない限り、すべての単一行の文を親と同じ行に配置する必要があります。 親が while 文の場合は、単一行の文を同じ行に配置することはできません。
  • "below", { "overrides": { "do": "any" } } は、親が do-while 文でない限り、すべての単一行の文を親と同じ行に配置することを許可しません。 親が do-while 文の場合は、単一行の文の位置は強制されません。

デフォルトの "beside" オプションを使用した場合のこのルールの**誤った** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "beside"] */

if (foo)
    
bar();
else
baz();
while (foo)
bar();
for (let i = 1; i < foo; i++)
bar();
do
bar();
while (foo)
誤り

デフォルトの "beside" オプションを使用した場合のこのルールの**正しい** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "beside"] */

if (foo) bar();
else baz();

while (foo) bar();

for (let i = 1; i < foo; i++) bar();

do bar(); while (foo)

if (foo) { // block statements are always allowed with this rule
  bar();
} else {
  baz();
}
正しい

"below" オプションを使用した場合のこのルールの**誤った** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "below"] */

if (foo) 
bar();
else
baz();
while (foo)
bar();
for (let i = 1; i < foo; i++)
bar();
do
bar();
while (foo)
誤り

"below" オプションを使用した場合のこのルールの**正しい** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "below"] */

if (foo)
  bar();
else
  baz();

while (foo)
  bar();

for (let i = 1; i < foo; i++)
  bar();

do
  bar();
while (foo)

if (foo) {
  // Although the second `if` statement is on the same line as the `else`, this is a very common
  // pattern, so it's not checked by this rule.
} else if (bar) {
}
正しい

"beside", { "overrides": { "while": "below" } } ルールを使用した場合のこのルールの**誤った** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */

if (foo)
    
bar();
while (foo)
bar();
誤り

"beside", { "overrides": { "while": "below" } } ルールを使用した場合のこのルールの**正しい** コードの例

js
/* eslint @stylistic/js/nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */

if (foo) bar();

while (foo)
  bar();
正しい

使用しない場合

単一行の文の一貫した場所に関心がない場合は、このルールを有効にするべきではありません。 また、curly ルールに "all" オプションを使用している場合も、このルールを無効にすることができます。これは、単一行の文を完全に禁止するためです。

MITライセンスの下でリリースされています。