Spec-Zone.ru › ESLint

Фигурные скобки

Навязывание согласованного стиля использования фигурных скобок для всех операторов управления

🔧 Исправимо

Некоторые проблемы, обнаруженные этим правилом, автоматически исправляются с помощью параметра --fix командной строки

JavaScript позволяет опускать фигурные скобки, когда блок содержит только одну инструкцию. Однако многие считают лучшей практикой никогда не опускать фигурные скобки вокруг блоков, даже когда они необязательны, потому что это может привести к ошибкам и снижает ясность кода. Поэтому следующее:

if (foo) foo++;

Можно переписать как:

if (foo) {
    foo++;
}

Тем не менее, некоторые предпочитают использовать скобки только тогда, когда выполняется более одной инструкции.

Подробное описание правила

Это правило направлено на предотвращение ошибок и повышение ясности кода путем обеспечения того, что операторы блоков заключены в фигурные скобки. Оно будет предупреждать при обнаружении блоков, которые опускают фигурные скобки.

Параметры

all

Примеры неправильного кода для параметра по умолчанию "all":

Открыть в Playground
/*eslint curly: "error"*/

if (foo) foo++;

while (bar)
    baz();

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

Примеры правильного кода для параметра по умолчанию "all":

Открыть в Playground
/*eslint curly: "error"*/

if (foo) {
    foo++;
}

while (bar) {
    baz();
}

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

multi

По умолчанию, это правило предупреждает всякий раз, когда if, else, for, while, или do используются без операторов блоков в качестве своего тела. Однако вы можете указать, что операторы блоков должны использоваться только тогда, когда в блоке есть несколько операторов, и предупреждать, когда в блоке есть только один оператор.

Примеры неправильного кода для параметра "multi":

Открыть в Playground
/*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":

Открыть в Playground
/*eslint curly: ["error", "multi"]*/

if (foo) foo++;

else foo();

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

многострочный

В качестве альтернативы, вы можете смягчить правило, разрешая использование фигурных скобок для одиночных if, else if, else, for, while, или do, сохраняя при этом требование использовать фигурные скобки для других случаев.

Примеры неправильного кода для параметра "multi-line":

Открыть в Playground
/*eslint curly: ["error", "multi-line"]*/

if (foo)
  doSomething();
else
  doSomethingElse();

if (foo) foo(  bar,  baz);

Примеры правильного кода для параметра "multi-line":

Открыть в Playground
/*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":

Открыть в Playground
/*eslint curly: ["error", "multi-or-nest"]*/

if (!foo)
    foo ={bar: baz,qux: foo};

while (true)
  if(foo)doSomething();elsedoSomethingElse();

if (foo) {    foo++;}

while (true) {doSomething();}

for (var i = 0; foo; i++) {doSomething();}

Примеры правильного кода для параметра "multi-or-nest":

Открыть в Playground
/*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":

Открыть в Playground
/*eslint curly: ["error", "multi-or-nest"]*/

if (foo)
    // some comment
    bar();

if (foo) {
    // some comment
    bar();
}

Согласованный

При использовании любого из multi* параметров, вы можете добавить параметр, чтобы обеспечить использование фигурных скобок для всех операторов в if, else if и else цепочке.

Примеры неправильного кода для параметров "multi", "consistent":

Открыть в Playground
/*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":

Открыть в Playground
/*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.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/curly

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API