padding-line-between-statements 
This rule requires or disallows blank lines between the given 2 kinds of statements. Properly blank lines help developers to understand the code.
For example, the following configuration requires a blank line between a variable declaration and a return statement.
/*eslint @stylistic/padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "var", next: "return" }
]*/
function foo() {
    var a = 1;
    return a;
}Rule Details 
This rule does nothing if no configurations are provided.
A configuration is an object which has 3 properties; blankLine, prev and next. For example, { blankLine: "always", prev: "var", next: "return" } means "one or more blank lines are required between a variable declaration and a return statement." You can supply any number of configurations. If a statement pair matches multiple configurations, the last matched configuration will be used.
{
    "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_TYPEis one of the following.- "any"just ignores the statement pair.
- "never"disallows blank lines.
- "always"requires one or more blank lines. Note it does not count lines that comments exist as blank lines.
 
- STATEMENT_TYPEis one of the following, or an array of the following.- "*"is wildcard. This matches any statements.
- "block"is lonely blocks.
- "block-like"is block like statements. This matches statements that the last token is the closing brace of blocks; e.g.- { },- if (a) { }, and- while (a) { }. Also matches immediately invoked function expression statements.
- "break"is- breakstatements.
- "case"is- caseclauses in- switchstatements.
- "cjs-export"is- exportstatements of CommonJS; e.g.- module.exports = 0,- module.exports.foo = 1, and- exports.foo = 2. This is a special case of assignment.
- "cjs-import"is- importstatements of CommonJS; e.g.- const foo = require("foo"). This is a special case of variable declarations.
- "class"is- classdeclarations.
- "const"is- constvariable declarations, both single-line and multiline.
- "continue"is- continuestatements.
- "debugger"is- debuggerstatements.
- "default"is- defaultclauses in- switchstatements.
- "directive"is directive prologues. This matches directives; e.g.- "use strict".
- "do"is- do-whilestatements. This matches all statements that the first token is- dokeyword.
- "empty"is empty statements.
- "export"is- exportdeclarations.
- "expression"is expression statements.
- "for"is- forloop families. This matches all statements that the first token is- forkeyword.
- "function"is function declarations.
- "if"is- ifstatements.
- "iife"is immediately invoked function expression statements. This matches calls on a function expression, optionally prefixed with a unary operator.
- "import"is- importdeclarations.
- "let"is- letvariable declarations, both single-line and multiline.
- "multiline-block-like"is block like statements. This is the same as- block-liketype, but only if the block is multiline.
- "multiline-const"is multiline- constvariable declarations.
- "multiline-export"is multiline- exportdeclarations.
- "multiline-expression"is expression statements. This is the same as- expressiontype, but only if the statement is multiline.
- "multiline-let"is multiline- letvariable declarations.
- "multiline-var"is multiline- varvariable declarations.
- "return"is- returnstatements.
- "singleline-const"is single-line- constvariable declarations.
- "singleline-export"is single-line- exportdeclarations.
- "singleline-let"is single-line- letvariable declarations.
- "singleline-var"is single-line- varvariable declarations.
- "switch"is- switchstatements.
- "throw"is- throwstatements.
- "try"is- trystatements.
- "var"is- varvariable declarations, both single-line and multiline.
- "while"is- whileloop statements.
- "with"is- withstatements.
 
Examples 
This configuration would require blank lines before all return statements, like the newline-before-return rule.
Examples of incorrect code for the [{ blankLine: "always", prev: "*", next: "return" }] configuration:
/*eslint @stylistic/padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "*", next: "return" }
]*/
function foo() {
    bar();
        return;
}Examples of correct code for the [{ blankLine: "always", prev: "*", next: "return" }] configuration:
/*eslint @stylistic/padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "*", next: "return" }
]*/
function foo1() {
    bar();
    return;
}
function foo2() {
    return;
}This configuration would require blank lines after every sequence of variable declarations, like the newline-after-var rule.
Examples of incorrect code for the [{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}] configuration:
/*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();
    }
}Examples of correct code for the [{ blankLine: "always", prev: ["const", "let", "var"], next: "*"}, { blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]}] configuration:
/*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();
    }
}This configuration would require blank lines after all directive prologues, like the lines-around-directive rule.
Examples of incorrect code for the [{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }] configuration:
/*eslint @stylistic/padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "directive", next: "*" },
    { blankLine: "any",    prev: "directive", next: "directive" }
]*/
"use strict";
foo();Examples of correct code for the [{ blankLine: "always", prev: "directive", next: "*" }, { blankLine: "any", prev: "directive", next: "directive" }] configuration:
/*eslint @stylistic/padding-line-between-statements: [
    "error",
    { blankLine: "always", prev: "directive", next: "*" },
    { blankLine: "any",    prev: "directive", next: "directive" }
]*/
"use strict";
"use asm";
foo();This configuration would require blank lines between clauses in switch statements.
Examples of incorrect code for the [{ blankLine: "always", prev: ["case", "default"], next: "*" }] configuration:
/*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();
}Examples of correct code for the [{ blankLine: "always", prev: ["case", "default"], next: "*" }] configuration:
/*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();
}When Not To Use It 
If you don't want to notify warnings about linebreaks, then it's safe to disable this rule.
Compatibility 
- JSCS: requirePaddingNewLineAfterVariableDeclaration
- JSCS: requirePaddingNewLinesAfterBlocks
- JSCS: disallowPaddingNewLinesAfterBlocks
- JSCS: requirePaddingNewLinesAfterUseStrict
- JSCS: disallowPaddingNewLinesAfterUseStrict
- JSCS: requirePaddingNewLinesBeforeExport
- JSCS: disallowPaddingNewLinesBeforeExport
- JSCS: requirePaddingNewlinesBeforeKeywords
- JSCS: disallowPaddingNewlinesBeforeKeywords
TypeScript Specific 
ts/padding-line-between-statements 
Options 
In addition to options provided by ESLint, the following options can be used as statement types:
- enum
- interface
- type
- function-overload
For example, to add blank lines before enums, interfaces and type definitions:
{
  "@stylistic/padding-line-between-statements": [
    "error",
    {
      "blankLine": "always",
      "prev": "*",
      "next": ["enum", "interface", "type"]
    }
  ]
}To avoid blank lines between function overloads and the function body:
{
  "@stylistic/padding-line-between-statements": [
    "error",
    {
      "blankLine": "never",
      "prev": "function-overload",
      "next": "function"
    }
  ]
}