Skip to content
← Back to rules

eslint/curly 风格

An auto-fix is available for this rule.

它的作用

此规则强制所有控制语句(ifelseforwhiledowith)都使用大括号 {}。 它确保所有代码块都用大括号包围,以提高代码的清晰度和可维护性。

为什么这是个问题?

省略大括号会降低代码的可读性,并增加出错的可能性,尤其是在嵌套较深或缩进复杂的代码中。 如果后续添加新语句时未正确用大括号包裹,也可能导致潜在的错误。 始终一致地使用大括号可以使代码更安全且更容易修改。

示例

"all"(默认)

此规则下的错误代码示例:

js
/* curly: ["error", "all"] */

if (foo) foo++;
while (bar) bar--;
do foo();
while (bar);

此规则下的正确代码示例:

js
/* curly: ["error", "all"] */

if (foo) {
  foo++;
}
while (bar) {
  bar--;
}
do {
  foo();
} while (bar);

"multi"

启用 "multi" 选项时,此规则下的错误代码示例:

js
/* curly: ["error", "multi"] */

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

启用 "multi" 选项时,此规则下的正确代码示例:

js
/* curly: ["error", "multi"] */

if (foo) foo();
else bar();

"multi-line"

启用 "multi-line" 选项时,此规则下的错误代码示例:

js
/* curly: ["error", "multi-line"] */

if (foo) foo();
else bar();

while (foo) foo();

启用 "multi-line" 选项时,此规则下的正确代码示例:

js
/* curly: ["error", "multi-line"] */

if (foo) foo();
else bar();

while (foo) foo();

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

"multi-or-nest"

启用 "multi-or-nest" 选项时,此规则下的错误代码示例:

js
/* curly: ["error", "multi-or-nest"] */

if (foo) if (bar) bar();

while (foo) while (bar) bar();

启用 "multi-or-nest" 选项时,此规则下的正确代码示例:

js
/* curly: ["error", "multi-or-nest"] */

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

while (foo) {
  while (bar) bar();
}

"consistent"

当启用 "consistent" 时,该规则会强制在 if-else 链中保持大括号使用的一致性。 如果链中的某一分支使用了大括号,则所有分支都必须使用大括号,即使根据第一个选项并非严格必要。

使用 "multi""consistent" 时的错误代码示例:

js
/* curly: ["error", "multi", "consistent"] */

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

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

使用 "multi""consistent" 时的正确代码示例:

js
/* curly: ["error", "multi", "consistent"] */

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

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

使用 "multi-line""consistent" 时的错误代码示例:

js
/* curly: ["error", "multi-line", "consistent"] */

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

使用 "multi-line""consistent" 时的正确代码示例:

js
/* curly: ["error", "multi-line", "consistent"] */

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

使用 "multi-or-nest""consistent" 时的错误代码示例:

js
/* curly: ["error", "multi-or-nest", "consistent"] */

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

使用 "multi-or-nest""consistent" 时的正确代码示例:

js
/* curly: ["error", "multi-or-nest", "consistent"] */

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

配置

curly 规则的配置,指定为一个包含一到两个元素的数组。

示例:

  • ["all"] - 所有情况下都要求使用大括号(默认)
  • ["multi"] - 仅对多语句代码块要求使用大括号
  • ["multi-line"] - 对多行代码块要求使用大括号
  • ["multi-or-nest"] - 对嵌套或跨多行的代码块要求使用大括号
  • ["multi", "consistent"] - 多语句模式下,在 if-else 链中保持大括号一致

第一个选项

type: "all" | "multi" | "multi-line" | "multi-or-nest"

curly 规则的强制执行类型。

"all"

在所有情况下都要求使用大括号(默认)

"multi"

仅当代码块中包含多个语句时才要求使用大括号

"multi-line"

当代码块跨越多行时要求使用大括号

"multi-or-nest"

当代码块是嵌套的或跨越多行时要求使用大括号

第二个选项

如何使用

要通过配置文件或命令行启用此规则,可以使用:

json
{
  "rules": {
    "curly": "error"
  }
}
bash
oxlint --deny curly

参考资料