跳至内容

@stylistic/

padding-line-between-statements

此规则要求或禁止在给定的两种语句之间使用空行。适当的空行有助于开发人员理解代码。

例如,以下配置要求在变量声明和return语句之间使用空行。

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

function foo() {
    var a = 1;

    return a;
}

规则详情

如果未提供任何配置,此规则将不执行任何操作。

配置是一个包含三个属性的对象:blankLineprevnext。例如,{ blankLine: "always", prev: "var", next: "return" }表示“在变量声明和return语句之间需要一个或多个空行”。您可以提供任意数量的配置。如果一对语句匹配多个配置,则将使用最后匹配的配置。

json
{
    "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" }] 配置的不正确代码示例

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

function foo() {
    bar();
        
return;
}
不正确

[{ blankLine: "always", prev: "*", next: "return" }] 配置的正确代码示例

js
/*eslint @stylistic/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"]}] 配置的错误代码示例

js
/*eslint @stylistic/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"]}] 配置的正确代码示例

js
/*eslint @stylistic/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" }] 配置的错误代码示例

js
/*eslint @stylistic/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" }] 配置的正确代码示例

js
/*eslint @stylistic/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: "*" }] 配置的错误代码示例

js
/*eslint @stylistic/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: "*" }] 配置的正确代码示例

js
/*eslint @stylistic/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();
}
正确

何时不使用它

如果您不想收到有关换行符的警告,则可以安全地禁用此规则。

兼容性

TypeScript 特定

ts/padding-line-between-statements

选项

除了 ESLint 提供的选项外,还可以使用以下选项作为语句类型

  • interface
  • type
  • function-overload

例如,要在接口和类型定义之前添加空行

jsonc
{
  "@stylistic/padding-line-between-statements": [
    "error",
    {
      "blankLine": "always",
      "prev": "*",
      "next": ["interface", "type"]
    }
  ]
}

要避免在函数重载和函数体之间添加空行

jsonc
{
  "@stylistic/padding-line-between-statements": [
    "error",
    {
      "blankLine": "never",
      "prev": "function-overload",
      "next": "function"
    }
  ]
}