# padding-line-between-statements

要求或禁止语句之间的填充行

一些该规则报告的问题可以通过 --fix 命令行选项 自动修复

此规则要求或不允许在给定的 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" } 表示 "one or more blank lines are required between a variable declaration and a return statement." 您可以提供任意数量的配置。如果一个语句对匹配多个配置,将使用最后一个匹配的配置。

{
    "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 = 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 语句。

# 示例

此配置将要求所有 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 foo() {
    bar();

    return;
}

function foo() {
    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 foo() {
    var a = 0;
    bar();
}

function foo() {
    let a = 0;
    bar();
}

function foo() {
    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 foo() {
    var a = 0;
    var b = 0;

    bar();
}

function foo() {
    let a = 0;
    const b = 0;

    bar();
}

function foo() {
    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();
}

# 何时不使用

如果您不想通知有关换行符的警告,那么禁用此规则是安全的。

# 兼容性

  • JSCS:``requirePaddingNewLineAfterVariableDeclaration
  • JSCS:``requirePaddingNewLinesAfterBlocks
  • JSCS:``disallowPaddingNewLinesAfterBlocks
  • JSCS:``requirePaddingNewLinesAfterUseStrict
  • JSCS:``disallowPaddingNewLinesAfterUseStrict
  • JSCS:``requirePaddingNewLinesBeforeExport
  • JSCS:``disallowPaddingNewLinesBeforeExport
  • JSCS:``requirePaddingNewlinesBeforeKeywords
  • JSCS:``disallowPaddingNewlinesBeforeKeywords
Last Updated: 5/13/2023, 8:55:38 PM