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

# 何时不使用

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

Last Updated: 5/13/2023, 8:55:38 PM