版本

padding-line-between-statements

要求或禁止語句之間有間隔行

🔧 可修正

此規則報告的一些問題可透過 --fix 命令列選項自動修正

此規則在 ESLint v8.53.0 中已棄用。請使用 @stylistic/eslint-plugin-js 中對應的規則

此規則要求或禁止在給定的 2 種語句之間有空白行。適當的空白行有助於開發人員理解程式碼。

例如,下列設定要求在變數宣告和 return 語句之間有空白行。

/*eslint padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "var", next: "return" }
]*/

function foo() {
    var a = 1;

    return a;
}

規則詳細資訊

如果未提供任何設定,此規則不會執行任何動作。

設定是一個具有 3 個屬性的物件:blankLineprevnext。例如,{ blankLine: "always", prev: "var", next: "return" } 表示「變數宣告和 return 語句之間需要一個或多個空白行。」您可以提供任意數量的設定。如果語句對符合多個設定,則會使用最後符合的設定。

{
    "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" 要求一個或多個空白行。請注意,它不會將存在註解的行計為空白行。
  • STATEMENT_TYPE 是下列其中一項,或下列的陣列。

    • "*" 是萬用字元。這會比對任何語句。
    • "block" 是孤立的程式碼區塊。
    • "block-like" 是類區塊語句。這會比對最後一個語彙基元是區塊結束大括號的語句;例如 { }if (a) { }while (a) { }。也比對立即呼叫的函式運算式語句。
    • "break"break 語句。
    • "case"switch 語句中的 case 子句。
    • "cjs-export" 是 CommonJS 的 export 語句;例如 module.exports = 0module.exports.foo = 1exports.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 語句。

範例

此設定會要求所有 return 語句之前有空白行,類似於 newline-before-return 規則。

[{ blankLine: "always", prev: "*", next: "return" }] 設定的不正確程式碼範例

在遊樂場開啟
/*eslint padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "*", next: "return" }
]*/

function foo() {
    bar();
    return;
}

[{ blankLine: "always", prev: "*", next: "return" }] 設定的正確程式碼範例

在遊樂場開啟
/*eslint 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 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 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 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 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 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 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();
}

何時不使用它

如果您不想收到有關換行符號的警告,則可以安全地停用此規則。

相容性

版本

此規則是在 ESLint v4.0.0-beta.0 中引入的。

資源

變更語言