Require or disallow padding lines between statements (padding-line-between-statements)
The --fix
option on the command line can automatically fix some of the problems reported by this rule.
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_TYPE
is 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_TYPE
is 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"
isbreak
statements."case"
iscase
labels."cjs-export"
isexport
statements of CommonJS; e.g.module.exports = 0
,module.exports.foo = 1
, andexports.foo = 2
. This is a special case of assignment."cjs-import"
isimport
statements of CommonJS; e.g.const foo = require("foo")
. This is a special case of variable declarations."class"
isclass
declarations."const"
isconst
variable declarations, both single-line and multiline."continue"
iscontinue
statements."debugger"
isdebugger
statements."default"
isdefault
labels."directive"
is directive prologues. This matches directives; e.g."use strict"
."do"
isdo-while
statements. This matches all statements that the first token isdo
keyword."empty"
is empty statements."export"
isexport
declarations."expression"
is expression statements."for"
isfor
loop families. This matches all statements that the first token isfor
keyword."function"
is function declarations."if"
isif
statements."iife"
is immediately invoked function expression statements. This matches calls on a function expression, optionally prefixed with a unary operator."import"
isimport
declarations."let"
islet
variable declarations, both single-line and multiline."multiline-block-like"
is block like statements. This is the same asblock-like
type, but only if the block is multiline."multiline-const"
is multilineconst
variable declarations."multiline-expression"
is expression statements. This is the same asexpression
type, but only if the statement is multiline."multiline-let"
is multilinelet
variable declarations."multiline-var"
is multilinevar
variable declarations."return"
isreturn
statements."singleline-const"
is single-lineconst
variable declarations."singleline-let"
is single-linelet
variable declarations."singleline-var"
is single-linevar
variable declarations."switch"
isswitch
statements."throw"
isthrow
statements."try"
istry
statements."var"
isvar
variable declarations, both single-line and multiline."while"
iswhile
loop statements."with"
iswith
statements.
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();
}
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();
}
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();
Compatibility
- JSCS: requirePaddingNewLineAfterVariableDeclaration
- JSCS: requirePaddingNewLinesAfterBlocks
- JSCS: disallowPaddingNewLinesAfterBlocks
- JSCS: requirePaddingNewLinesAfterUseStrict
- JSCS: disallowPaddingNewLinesAfterUseStrict
- JSCS: requirePaddingNewLinesBeforeExport
- JSCS: disallowPaddingNewLinesBeforeExport
- JSCS: requirePaddingNewlinesBeforeKeywords
- JSCS: disallowPaddingNewlinesBeforeKeywords
When Not To Use It
If you don't want to notify warnings about linebreaks, then it's safe to disable this rule.
Version
This rule was introduced in ESLint 4.0.0-beta.0.