nonblock-statement-body-position(非ブロック文本体の位置)
if
、else
、while
、do-while
、for
文を記述する場合、本体はブロックではなく単一の文にすることができます。 これらの単一の文に対して一貫した位置を強制すると便利です。
たとえば、一部の開発者は次のようなコードの記述を避けています。
if (foo)
bar();
別の開発者が if
文に baz();
を追加しようとすると、誤ってコードを次のように変更してしまう可能性があります。
if (foo)
bar();
baz(); // this line is not in the `if` statement!
この問題を回避するために、すべての単一行 if
文は、改行なしで条件の直後に記述する必要がある場合があります。
if (foo) bar();
ルールの詳細
このルールは、単一行ステートメントの一貫した位置を強制することを目的としています。
このルールは、単一行ステートメントの一般的な使用を強制するものではないことに注意してください。単一行ステートメントを禁止したい場合は、代わりに curly
ルールを使用してください。
オプション
このルールは文字列オプションを受け入れます。
"beside"
(デフォルト) は、単一行ステートメントの前に改行を入れることを禁止します。"below"
は、単一行ステートメントの前に改行を入れることを必須とします。"any"
は、単一行ステートメントの位置を強制しません。
さらに、このルールは、"overrides"
キーを持つオプションのオブジェクトオプションを受け入れます。これは、デフォルトをオーバーライドする特定のステートメントの位置を指定するために使用できます。例えば
"beside", { "overrides": { "while": "below" } }
は、親がwhile
文でない限り、すべての単一行ステートメントを親と同じ行に記述することを必須とします。親がwhile
文の場合は、単一行ステートメントを同じ行に記述してはいけません。"below", { "overrides": { "do": "any" } }
は、親がdo-while
文でない限り、すべての単一行ステートメントを親と同じ行に記述することを禁止します。親がdo-while
文の場合は、単一行ステートメントの位置は強制されません。
デフォルトの "beside"
オプションでこのルールに違反するコードの例
/* eslint @stylistic/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"
オプションでこのルールに準拠するコードの例
/* eslint @stylistic/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"
オプションでこのルールに違反するコードの例
/* eslint @stylistic/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"
オプションでこのルールに準拠するコードの例
/* eslint @stylistic/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" } }
ルールでこのルールに違反するコードの例
/* eslint @stylistic/nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */
if (foo)
bar();
while (foo) bar();
"beside", { "overrides": { "while": "below" } }
ルールでこのルールに準拠するコードの例
/* eslint @stylistic/nonblock-statement-body-position: ["error", "beside", { "overrides": { "while": "below" } }] */
if (foo) bar();
while (foo)
bar();
使用しない場合
単一行ステートメントの一貫した位置に関心がない場合は、このルールを有効にする必要はありません。 また、curly
ルールに "all"
オプションを使用している場合も、このルールを無効にすることができます。これは、単一行ステートメントを完全に禁止するためです。