版本

curly

强制对所有控制语句使用一致的大括号风格

🔧 可修复

此规则报告的一些问题可以通过 --fix 命令行 选项自动修复。

JavaScript 允许在块仅包含一个语句时省略大括号。但是,许多人认为永远不要省略块周围的大括号,即使它们是可选的,因为这会导致错误并降低代码清晰度。所以以下

if (foo) foo++;

可以改写为

if (foo) {
    foo++;
}

但是,有些人更喜欢仅在要执行多个语句时才使用大括号。

规则详细信息

此规则旨在通过确保块语句用大括号括起来来防止错误并提高代码清晰度。它会在遇到省略大括号的块时发出警告。

选项

all

默认 "all" 选项的错误代码示例

在游乐场中打开
/*eslint curly: "error"*/

if (foo) foo++;

while (bar)
    baz();

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

默认 "all" 选项的正确代码示例

在游乐场中打开
/*eslint curly: "error"*/

if (foo) {
    foo++;
}

while (bar) {
    baz();
}

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

multi

默认情况下,此规则会在 ifelseforwhiledo 不带块语句作为其主体时发出警告。但是,您可以指定仅在块中有多个语句时才使用块语句,并在块中只有一个语句时发出警告。

"multi" 选项的错误代码示例

在游乐场中打开
/*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" 选项的正确代码示例

在游乐场中打开
/*eslint curly: ["error", "multi"]*/

if (foo) foo++;

else foo();

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

multi-line

或者,您可以放宽规则,允许无括号的单行 ifelse ifelseforwhiledo,同时仍然强制在其他情况下使用大括号。

"multi-line" 选项的错误代码示例

在游乐场中打开
/*eslint curly: ["error", "multi-line"]*/

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

if (foo) foo(
  bar,
  baz);

"multi-line" 选项的正确代码示例

在游乐场中打开
/*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" 选项的错误代码示例

在游乐场中打开
/*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" 选项的正确代码示例

在游乐场中打开
/*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" 选项的其他正确代码示例

在游乐场中打开
/*eslint curly: ["error", "multi-or-nest"]*/

if (foo)
    // some comment
    bar();

if (foo) {
    // some comment
    bar();
}

consistent

使用任何 multi* 选项时,您可以添加一个选项来强制 ifelse ifelse 链的所有主体都带或不带大括号。

"multi""consistent" 选项的错误代码示例

在游乐场中打开
/*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" 选项的正确代码示例

在游乐场中打开
/*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++;

何时不使用它

如果您对何时使用块语句和何时不使用块语句没有严格的约定,您可以安全地禁用此规则。

版本

此规则是在 ESLint v0.0.2 中引入的。

资源

更改语言