Spec-Zone.ru › ESLint

нет-постоянного-условия

Запрет постоянных выражений в условиях

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

Постоянное выражение (например, литерал) в качестве условия проверки может быть опечаткой или триггером для определенного поведения. Например, следующий код выглядит так, как будто он не готов к производству.

if (false) {
    doSomethingUnfinished();
}

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

Это правило запрещает постоянные выражения в условии проверки:

  • if, for, while, или do...while оператора
  • ?: тернарного выражения

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

Открыть в Playground
/*eslint no-constant-condition: "error"*/

if (false) {
    doSomethingUnfinished();
}

if (void x) {
    doSomethingUnfinished();
}

if (x &&= false) {
    doSomethingNever();
}

if (class {}) {
    doSomethingAlways();
}

if (new Boolean(x)) {
    doSomethingAlways();
}

if (Boolean(1)) {
    doSomethingAlways();
}

if (undefined) {
    doSomethingUnfinished();
}

if (x ||= true) {
    doSomethingAlways();
}

for (;-2;) {
    doSomethingForever();
}

while (typeof x) {
    doSomethingForever();
}

do {
    doSomethingForever();
} while (x = -1);

var result = 0 ? a : b;

if(input === "hello" || "bye"){
  output(input);
}

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

Открыть в Playground
/*eslint no-constant-condition: "error"*/

if (x === 0) {
    doSomething();
}

for (;;) {
    doSomethingForever();
}

while (typeof x === "undefined") {
    doSomething();
}

do {
    doSomething();
} while (x);

var result = x !== 0 ? a : b;

if(input === "hello" || input === "bye"){
  output(input);
}

Параметры

checkLoops

Это строковый параметр, имеющий следующие значения:

  • "all" - Запретить постоянные выражения во всех циклах.
  • "allExceptWhileTrue" (по умолчанию) - Запретить постоянные выражения во всех циклах, кроме while циклов с выражением true.
  • "none" - Разрешить постоянные выражения в циклах.

Или вместо этого вы можете установить значение checkLoops в булевые значения, где true совпадает с "all", а false совпадает с "none".

Примеры некорректного кода, когда checkLoops равно "all" или true:

Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": "all" }]*/

while (true) {
    doSomething();
};

for (;true;) {
    doSomething();
};
Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": true }]*/

while (true) {
    doSomething();
};

do {
    doSomething();
} while (true)

Примеры корректного кода, когда checkLoops равно "all" или true:

Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": "all" }]*/

while (a === b) {
    doSomething();
};
Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": true }]*/

for (let x = 0; x <= 10; x++) {
    doSomething();
};

Пример корректного кода, когда checkLoops равно "allExceptWhileTrue":

Открыть в Playground
/*eslint no-constant-condition: "error"*/

while (true) {
    doSomething();
};

Примеры корректного кода, когда checkLoops равно "none" или false:

Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": "none" }]*/

while (true) {
    doSomething();
    if (condition()) {
        break;
    }
};

do {
    doSomething();
    if (condition()) {
        break;
    }
} while (true)
Открыть в Playground
/*eslint no-constant-condition: ["error", { "checkLoops": false }]*/

while (true) {
    doSomething();
    if (condition()) {
        break;
    }
};

for (;true;) {
    doSomething();
    if (condition()) {
        break;
    }
};

Связанные правила

  • нет-постоянного-бинарного-выражения

Версия

Это правило было добавлено в ESLint v0.4.1.

Ресурсы

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

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

Spec-Zone.ru

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