padding-line-between-statements
このルールは、指定された2種類のステートメント間に空行を必須または禁止します。適切な空行は、開発者がコードを理解するのに役立ちます。
例えば、次の設定では、変数宣言とreturn
ステートメントの間に空行が必要です。
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "var", next: "return" }
]*/
function foo() {
var a = 1;
return a;
}
ルールの詳細
設定が提供されていない場合、このルールは何もしません。
設定は、blankLine
、prev
、およびnext
の3つのプロパティを持つオブジェクトです。例えば、{ blankLine: "always", prev: "var", next: "return" }
は、「変数宣言とreturn
ステートメントの間に1つ以上の空行が必要」という意味です。任意の数の設定を指定できます。ステートメントのペアが複数の設定に一致する場合、最後に一致した設定が使用されます。
{
"padding-line-between-statements": [
"error",
{ "blankLine": LINEBREAK_TYPE, "prev": STATEMENT_TYPE, "next": STATEMENT_TYPE },
{ "blankLine": LINEBREAK_TYPE, "prev": STATEMENT_TYPE, "next": STATEMENT_TYPE },
{ "blankLine": LINEBREAK_TYPE, "prev": STATEMENT_TYPE, "next": STATEMENT_TYPE },
{ "blankLine": LINEBREAK_TYPE, "prev": STATEMENT_TYPE, "next": STATEMENT_TYPE },
...
]
}
LINEBREAK_TYPE
は、次のいずれかです。"any"
は、ステートメントのペアを無視します。"never"
は、空行を禁止します。"always"
は、1つ以上の空行を必須とします。コメントが存在する行は空行としてカウントしないことに注意してください。
STATEMENT_TYPE
は、次のいずれか、または次の配列です。"*"
はワイルドカードです。これはすべてのステートメントに一致します。"block"
は、単独のブロックです。"block-like"
は、ブロックのようなステートメントです。これは、最後のトークンがブロックの閉じ中括弧であるステートメントに一致します。例:{ }
、if (a) { }
、およびwhile (a) { }
。即時実行関数式ステートメントにも一致します。"break"
は、break
ステートメントです。"case"
は、switch
ステートメント内のcase
句です。"cjs-export"
は、CommonJSのexport
ステートメントです。例:module.exports = 0
、module.exports.foo = 1
、およびexports.foo = 2
。これは代入の特殊なケースです。"cjs-import"
は、CommonJSのimport
ステートメントです。例:const foo = require("foo")
。これは変数宣言の特殊なケースです。"class"
は、class
宣言です。"const"
は、単一行と複数行の両方のconst
変数宣言です。"continue"
は、continue
ステートメントです。"debugger"
は、debugger
ステートメントです。"default"
は、switch
ステートメント内のdefault
句です。"directive"
は、ディレクティブプロローグです。これは、ディレクティブに一致します。例:"use strict"
。"do"
は、do-while
ステートメントです。これは、最初のトークンがdo
キーワードであるすべてのステートメントに一致します。"empty"
は、空のステートメントです。"export"
は、export
宣言です。"expression"
は、式ステートメントです。"for"
は、for
ループファミリーです。これは、最初のトークンがfor
キーワードであるすべてのステートメントに一致します。"function"
は、関数宣言です。"if"
は、if
ステートメントです。"iife"
は、即時実行関数式ステートメントです。これは、関数式への呼び出しに一致します(オプションで単項演算子が前に付いています)。"import"
は、import
宣言です。"let"
は、単一行と複数行の両方のlet
変数宣言です。"multiline-block-like"
は、ブロックのようなステートメントです。これは、block-like
タイプと同じですが、ブロックが複数行の場合のみです。"multiline-const"
は、複数行のconst
変数宣言です。"multiline-expression"
は、式ステートメントです。これは、expression
タイプと同じですが、ステートメントが複数行の場合のみです。"multiline-let"
は、複数行のlet
変数宣言です。"multiline-var"
は、複数行のvar
変数宣言です。"return"
は、return
ステートメントです。"singleline-const"
は、単一行のconst
変数宣言です。"singleline-let"
は、単一行のlet
変数宣言です。"singleline-var"
は、単一行のvar
変数宣言です。"switch"
は、switch
ステートメントです。"throw"
は、throw
ステートメントです。"try"
は、try
ステートメントです。"var"
は、単一行と複数行の両方のvar
変数宣言です。"while"
は、while
ループステートメントです。"with"
は、with
ステートメントです。
例
この設定では、newline-before-returnルールのように、すべてのreturn
ステートメントの前に空行が必要です。
[{ blankLine: "always", prev: "*", next: "return" }]
設定の不正なコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "*", next: "return" }
]*/
function foo() {
bar();
return;
}
[{ blankLine: "always", prev: "*", next: "return" }]
設定の正しいコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "*", next: "return" }
]*/
function foo1() {
bar();
return;
}
function foo2() {
return;
}
この設定では、newline-after-varルールのように、変数宣言のすべてのシーケンスの後に空行が必要です。
[{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}]
設定の不正なコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: ["const", "let", "var"], next: "*"},
{ blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}
]*/
function foo1() {
var a = 0;
bar();
}
function foo2() {
let a = 0;
bar();
}
function foo3() {
const a = 0;
bar();
}
class C {
static {
let a = 0;
bar();
}
}
[{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}]
設定の正しいコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: ["const", "let", "var"], next: "*"},
{ blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}
]*/
function foo1() {
var a = 0;
var b = 0;
bar();
}
function foo2() {
let a = 0;
const b = 0;
bar();
}
function foo3() {
const a = 0;
const b = 0;
bar();
}
class C {
static {
let a = 0;
let b = 0;
bar();
}
}
この設定では、lines-around-directiveルールのように、すべてのディレクティブプロローグの後に空行が必要です。
[{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }]
設定の不正なコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "directive", next: "*" },
{ blankLine: "any", prev: "directive", next: "directive" }
]*/
"use strict";
foo();
[{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }]
設定の正しいコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "directive", next: "*" },
{ blankLine: "any", prev: "directive", next: "directive" }
]*/
"use strict";
"use asm";
foo();
この設定では、switch
ステートメント内の句の間に空行が必要です。
[{ blankLine: "always", prev: ["case", "default"], next: "*" }]
設定の不正なコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: ["case", "default"], next: "*" }
]*/
switch (foo) {
case 1:
bar();
break;
case 2:
case 3:
baz();
break;
default:
quux();
}
[{ blankLine: "always", prev: ["case", "default"], next: "*" }]
設定の正しいコードの例
/*eslint @stylistic/js/padding-line-between-statements: [
"error",
{ blankLine: "always", prev: ["case", "default"], next: "*" }
]*/
switch (foo) {
case 1:
bar();
break;
case 2:
case 3:
baz();
break;
default:
quux();
}
使用しない場合
改行に関する警告を通知したくない場合は、このルールを無効にしても安全です。
互換性
- JSCS: requirePaddingNewLineAfterVariableDeclaration
- JSCS: requirePaddingNewLinesAfterBlocks
- JSCS: disallowPaddingNewLinesAfterBlocks
- JSCS: requirePaddingNewLinesAfterUseStrict
- JSCS: disallowPaddingNewLinesAfterUseStrict
- JSCS: requirePaddingNewLinesBeforeExport
- JSCS: disallowPaddingNewLinesBeforeExport
- JSCS: requirePaddingNewlinesBeforeKeywords
- JSCS: disallowPaddingNewlinesBeforeKeywords