Versions

curly

Enforce consistent brace style for all control statements

🔧 Fixable

Some problems reported by this rule are automatically fixable by the --fix command line option

当一个块只包含一个语句时,JavaScript 允许省略大括号。然而,许多人认为,最好的做法是永远不要在块周围省略大括号,即使它们是可选的,因为这可能导致错误并降低代码的清晰度。因此,下面的例子:

if (foo) foo++;

也可以写作:

if (foo) {
    foo++;
}

然而,有些人喜欢只在有一个以上的语句要执行时使用大括号。

规则细节

这条规则的目的是通过确保块语句被大括号包裹来防止错误和提高代码的清晰度。当它遇到省略大括号的块时,会发出警告。

选项

all

使用默认的 "all" 选项的错误示例:

Open in Playground
/*eslint curly: "error"*/

if (foo) foo++;

while (bar)
    baz();

if (foo) {
    baz();
} else qux();

使用默认的 "all" 选项的正确示例:

Open in Playground
/*eslint curly: "error"*/

if (foo) {
    foo++;
}

while (bar) {
    baz();
}

if (foo) {
    baz();
} else {
    qux();
}

multi

默认情况下,只要使用 ifelseforwhiledo 而没有使用块语句作为主体,该规则就会发出警告。然而,你可以指定只有在块中有多个语句时才使用块语句,而当块中只有一个语句时就会警告。

使用 "multi" 选项的错误示例:

Open in Playground
/*eslint curly: ["error", "multi"]*/

if (foo) {
    foo++;
}

if (foo) bar();
else {
    foo++;
}

while (true) {
    doSomething();
}

for (var i=0; i < items.length; i++) {
    doSomething();
}

使用 "multi" 选项的正确示例:

Open in Playground
/*eslint curly: ["error", "multi"]*/

if (foo) foo++;

else foo();

while (true) {
    doSomething();
    doSomethingElse();
}

multi-line

另外,你可以放宽规则,允许无大括号的单行 ifelse ifelseforwhiledo,而在其他情况下仍然强制使用大括号。

使用 "multi-line" 选项的错误示例:

Open in Playground
/*eslint curly: ["error", "multi-line"]*/

if (foo)
  doSomething();
else
  doSomethingElse();

if (foo) foo(
  bar,
  baz);

使用 "multi-line" 选项的正确示例:

Open in Playground
/*eslint curly: ["error", "multi-line"]*/

if (foo) foo++; else doSomething();

if (foo) foo++;
else if (bar) baz()
else doSomething();

do something();
while (foo);

while (foo
  && bar) baz();

if (foo) {
    foo++;
}

if (foo) { foo++; }

while (true) {
    doSomething();
    doSomethingElse();
}

multi-or-nest

你可以使用另一种配置,如果主体只包含一个单行语句,则强制使用无括号的 ifelse ifelseforwhiledo。而在所有其他情况下强制使用大括号。

使用 "multi-or-nest" 选项的错误示例:

Open in Playground
/*eslint curly: ["error", "multi-or-nest"]*/

if (!foo)
    foo = {
        bar: baz,
        qux: foo
    };

while (true)
  if(foo)
      doSomething();
  else
      doSomethingElse();

if (foo) {
    foo++;
}

while (true) {
    doSomething();
}

for (var i = 0; foo; i++) {
    doSomething();
}

使用 "multi-or-nest" 选项的正确示例:

Open in Playground
/*eslint curly: ["error", "multi-or-nest"]*/

if (!foo) {
    foo = {
        bar: baz,
        qux: foo
    };
}

while (true) {
  if(foo)
      doSomething();
  else
      doSomethingElse();
}

if (foo)
    foo++;

while (true)
    doSomething();

for (var i = 0; foo; i++)
    doSomething();

对于前面有注释的单行语句,允许使用大括号,但不是必须的。

使用 "multi-or-nest" 选项的又一正确示例:

Open in Playground
/*eslint curly: ["error", "multi-or-nest"]*/

if (foo)
    // 一些注释
    bar();

if (foo) {
    // 一些注释
    bar();
}

consistent

当使用任何一个 multi* 选项时,你可以添加一个选项来强制执行 if 的所有主体。else ifelse链的所有主体都要有或没有大括号。

使用 "multi", "consistent" 选项的错误示例:

Open in Playground
/*eslint curly: ["error", "multi", "consistent"]*/

if (foo) {
    bar();
    baz();
} else
    buz();

if (foo)
    bar();
else if (faa)
    bor();
else {
    other();
    things();
}

if (true)
    foo();
else {
    baz();
}

if (foo) {
    foo++;
}

使用 "multi", "consistent" 选项的正确示例:

Open in Playground
/*eslint curly: ["error", "multi", "consistent"]*/

if (foo) {
    bar();
    baz();
} else {
    buz();
}

if (foo) {
    bar();
} else if (faa) {
    bor();
} else {
    other();
    things();
}

if (true)
    foo();
else
    baz();

if (foo)
    foo++;

何时不用

如果你对什么时候使用块语句和什么时候不使用没有严格的约定,你可以安全地禁用这一规则。

Version

This rule was introduced in ESLint v0.0.2.

Resources

更改语言