curly
强制对所有控制语句使用一致的大括号风格
此规则报告的一些问题可以通过 --fix
命令行 选项自动修复。
JavaScript 允许在块仅包含一个语句时省略大括号。但是,许多人认为永远不要省略块周围的大括号,即使它们是可选的,因为这会导致错误并降低代码清晰度。所以以下
if (foo) foo++;
可以改写为
if (foo) {
foo++;
}
但是,有些人更喜欢仅在要执行多个语句时才使用大括号。
规则详细信息
此规则旨在通过确保块语句用大括号括起来来防止错误并提高代码清晰度。它会在遇到省略大括号的块时发出警告。
选项
all
默认 "all"
选项的错误代码示例
/*eslint curly: "error"*/
if (foo)
while (bar)
if (foo) {
baz();
} else
默认 "all"
选项的正确代码示例
/*eslint curly: "error"*/
if (foo) {
foo++;
}
while (bar) {
baz();
}
if (foo) {
baz();
} else {
qux();
}
multi
默认情况下,此规则会在 if
、else
、for
、while
或 do
不带块语句作为其主体时发出警告。但是,您可以指定仅在块中有多个语句时才使用块语句,并在块中只有一个语句时发出警告。
"multi"
选项的错误代码示例
/*eslint curly: ["error", "multi"]*/
if (foo)
if (foo) bar();
else
while (true)
for (var i=0; i < items.length; i++)
"multi"
选项的正确代码示例
/*eslint curly: ["error", "multi"]*/
if (foo) foo++;
else foo();
while (true) {
doSomething();
doSomethingElse();
}
multi-line
或者,您可以放宽规则,允许无括号的单行 if
、else if
、else
、for
、while
或 do
,同时仍然强制在其他情况下使用大括号。
"multi-line"
选项的错误代码示例
/*eslint curly: ["error", "multi-line"]*/
if (foo)
else
if (foo)
"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
您可以使用另一种配置,如果 if
、else if
、else
、for
、while
或 do
的主体仅包含一个单行语句,则强制使用无括号。而在所有其他情况下强制使用大括号。
"multi-or-nest"
选项的错误代码示例
/*eslint curly: ["error", "multi-or-nest"]*/
if (!foo)
while (true)
if (foo)
while (true)
for (var i = 0; foo; i++)
"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*
选项时,您可以添加一个选项来强制 if
、else if
和 else
链的所有主体都带或不带大括号。
"multi"
、"consistent"
选项的错误代码示例
/*eslint curly: ["error", "multi", "consistent"]*/
if (foo) {
bar();
baz();
} else
if (foo)
else if (faa)
else {
other();
things();
}
if (true)
foo();
else
if (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 中引入的。