Spec-Zone.ru › ESLint

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 свойства; blankLine, prev и next. Например, { 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" соответствует case в операторах switch.
    • "cjs-export" соответствует операторам export CommonJS; например, module.exports = 0, module.exports.foo = 1, и exports.foo = 2. Это специальный случай присваивания.
    • "cjs-import" соответствует операторам import CommonJS; например, const foo = require("foo"). Это специальный случай объявления переменных.
    • "class" соответствует объявлениям class.
    • "const" соответствует объявлениям const переменных, как однострочным, так и многострочным.
    • "continue" соответствует операторам continue.
    • "debugger" соответствует операторам debugger.
    • "default" соответствует default в операторах switch.
    • "directive" соответствует директивам-прологам. Это соответствует директивам; например, "use strict".
    • "do" соответствует операторам do-while. Это соответствует всем операторам, первый токен которых — ключевое слово do.
    • "empty" соответствует операторам-пустышкам.
    • "export" соответствует объявлениям export.
    • "expression" соответствует операторам выражений.
    • "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" }].

Открыть в Playground
/*eslint padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "*", next: "return" }
]*/

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

Примеры правильного кода для конфигурации [{ blankLine: "always", prev: "*", next: "return" }].

Открыть в Playground
/*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"]}].

Открыть в Playground
/*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"]}].

Открыть в Playground
/*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" }].

Открыть в Playground
/*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" }].

Открыть в Playground
/*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: "*" }].

Открыть в Playground
/*eslint padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: ["case", "default"], next: "*" }
]*/

switch (foo) {
    case 1:
        bar();
        break;
    case 2:
    case3:baz();break;
    default:quux();
}

Примеры правильного кода для конфигурации [{ blankLine: "always", prev: ["case", "default"], next: "*" }].

Открыть в Playground
/*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

Версия

Эта опция была добавлена в ESLint v4.0.0-beta.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/padding-line-between-statements

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API