Versions

no-lone-blocks

Disallow unnecessary nested blocks

In JavaScript, prior to ES6, standalone code blocks delimited by curly braces do not create a new scope and have no use. For example, these curly braces do nothing to foo:

{
 var foo = bar();
}

In ES6, code blocks may create a new scope if a block-level binding (let and const), a class declaration or a function declaration (in strict mode) are present. A block is not considered redundant in these cases.

Rule Details

This rule aims to eliminate unnecessary and potentially confusing blocks at the top level of a script or within other blocks.

Examples of incorrect code for this rule:

Open in Playground
/*eslint no-lone-blocks: "error"*/
{}
if (foo) {
 bar();
 {
 baz();
 }
}
function bar() {
 {
 baz();
 }
}
{
 function foo() {}
}
{
 aLabel: {
 }
}
class C {
 static {
 {
 foo();
 }
 }
}

Examples of correct code for this rule:

Open in Playground
/*eslint no-lone-blocks: "error"*/
while (foo) {
 bar();
}
if (foo) {
 if (bar) {
 baz();
 }
}
function bar() {
 baz();
}
{
 let x = 1;
}
{
 const y = 1;
}
{
 class Foo {}
}
aLabel: {
}
class C {
 static {
 lbl: {
 if (something) {
 break lbl;
 }
 foo();
 }
 }
}

Examples of correct code for this rule with ES6 environment and strict mode via "parserOptions": { "sourceType": "module" } in the ESLint configuration or "use strict" directive in the code:

Open in Playground
/*eslint no-lone-blocks: "error"*/
"use strict";
{
 function foo() {}
}

Version

This rule was introduced in ESLint v0.4.0.

Resources

Edit this page
© OpenJS Foundation and ESLint contributors, www.openjsf.org. Content licensed under MIT License.
Change Language

AltStyle によって変換されたページ (->オリジナル) /