版本

curly

为所有控制语句强制执行一致的大括号风格

🔧 可修复

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

❄️ 已冻结

此规则目前处于冻结状态,不接受功能请求。

当代码块仅包含一个语句时,JavaScript 允许省略花括号。然而,许多人认为最佳实践是永远不要省略代码块周围的花括号,即使它们是可选的,因为它可能导致错误并降低代码清晰度。所以以下代码

if (foo) foo++;

可以重写为

if (foo) {
    foo++;
}

然而,有些人更喜欢仅在有多条语句要执行时才使用花括号。

规则详情

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

选项

all

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

在 Playground 中打开
/*eslint curly: "error"*/

if (foo) foo++;

while (bar)
    baz();

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

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

在 Playground 中打开
/*eslint curly: "error"*/

if (foo) {
    foo++;
}

while (bar) {
    baz();
}

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

multi

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

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

在 Playground 中打开
/*eslint curly: ["error", "multi"]*/

if (foo) {
    foo++;
}

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

while (true) {
    doSomething();
}

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

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

在 Playground 中打开
/*eslint curly: ["error", "multi"]*/

if (foo) foo++;

else foo();

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

multi-line

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

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

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

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

if (foo) foo(
  bar,
  baz);

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

在 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" 选项的 错误 代码示例

在 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 (let i = 0; foo; i++) {
    doSomething();
}

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

在 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 (let i = 0; foo; i++)
    doSomething();

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

"multi-or-nest" 选项的额外 正确 代码示例

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

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

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

consistent

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

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

在 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" 选项的 正确 代码示例

在 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++;

何时不使用

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

版本

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

资源

更改语言