版本

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

何時不使用

如果您對於何時使用程式碼區塊,何時不使用沒有嚴格的慣例,您可以安全地停用此規則。

版本

此規則在 ESLint v0.0.2 中引入。

資源

變更語言