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:
/*eslint no-lone-blocks: "error"*/
if (foo) {
    bar();
    
}
function bar() {
    
}
class C {
    static {
        
    }
}
Examples of correct code for this rule:
/*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:
/*eslint no-lone-blocks: "error"*/
"use strict";
{
    function foo() {}
}
Version
This rule was introduced in ESLint v0.4.0.