curly
强制所有控制语句使用一致的大括号风格
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 (let 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 (let 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 (let 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 中引入的。