padding-line-between-statements
The --fix option on the command line can automatically fix some of the problems reported by this rule.
Requires or disallows padding lines 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 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) { }, andwhile (a) { }. Also matches immediately invoked function expression statements."break"isbreakstatements."case"iscaseclauses inswitchstatements."cjs-export"isexportstatements of CommonJS; e.g.module.exports = 0,module.exports.foo = 1, andexports.foo = 2. This is a special case of assignment."cjs-import"isimportstatements of CommonJS; e.g.const foo = require("foo"). This is a special case of variable declarations."class"isclassdeclarations."const"isconstvariable declarations, both single-line and multiline."continue"iscontinuestatements."debugger"isdebuggerstatements."default"isdefaultclauses inswitchstatements."directive"is directive prologues. This matches directives; e.g."use strict"."do"isdo-whilestatements. This matches all statements that the first token isdokeyword."empty"is empty statements."export"isexportdeclarations."expression"is expression statements."for"isforloop families. This matches all statements that the first token isforkeyword."function"is function declarations."if"isifstatements."iife"is immediately invoked function expression statements. This matches calls on a function expression, optionally prefixed with a unary operator."import"isimportdeclarations."let"isletvariable declarations, both single-line and multiline."multiline-block-like"is block like statements. This is the same asblock-liketype, but only if the block is multiline."multiline-const"is multilineconstvariable declarations."multiline-expression"is expression statements. This is the same asexpressiontype, but only if the statement is multiline."multiline-let"is multilineletvariable declarations."multiline-var"is multilinevarvariable declarations."return"isreturnstatements."singleline-const"is single-lineconstvariable declarations."singleline-let"is single-lineletvariable declarations."singleline-var"is single-linevarvariable declarations."switch"isswitchstatements."throw"isthrowstatements."try"istrystatements."var"isvarvariable declarations, both single-line and multiline."while"iswhileloop statements."with"iswithstatements.
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 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 padding-line-between-statements: [
"error",
{ blankLine: "always", prev: "*", next: "return" }
]*/
function foo() {
bar();
return;
}
function foo() {
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 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();
}
}
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 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();
}
}
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 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 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 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 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
Version
This rule was introduced in ESLint 4.0.0-beta.0.