no-dupe-else-if
Запрещает дублирующиеся условия в цепочках if-else-if
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
Цепочки if-else-if часто используются, когда требуется выполнить только одну ветвь (или не более одной) из нескольких возможных ветвей в зависимости от определённых условий.
if (a) {
foo();
} else if (b) {
bar();
} else if (c) {
baz();
}
Два идентичных условия проверки в одной цепочке почти всегда указывают на ошибку в коде. Если только выражения не имеют побочных эффектов, дубликат вернёт то же значение true или false, что и идентичное выражение выше по цепочке, а значит, его ветвь никогда не выполнится.
if (a) {
foo();
} else if (b) {
bar();
} else if (b) {
baz();
}
В приведённом выше примере baz() никогда не выполнится. Очевидно, что baz() может выполниться только в том случае, если b принимает значение true, однако тогда вместо него выполнится bar(), поскольку оно расположено выше по цепочке.
Подробное описание правила
Это правило запрещает дублирующиеся условия в одной цепочке if-else-if.
Примеры неправильного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (isSomething(x)) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if (c && d) {
baz();
} else if () {
quux();
} else {
quuux();
}
if (n === 1) {
foo();
} else if (n === 2) {
bar();
} else if (n === 3) {
baz();
} else if () {
quux();
} else if (n === 5) {
quuux();
}
Примеры правильного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (isSomething(x)) {
foo();
} else if (isSomethingElse(x)) {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if (c && d) {
baz();
} else if (c && e) {
quux();
} else {
quuux();
}
if (n === 1) {
foo();
} else if (n === 2) {
bar();
} else if (n === 3) {
baz();
} else if (n === 4) {
quux();
} else if (n === 5) {
quuux();
}
Это правило также может обнаруживать некоторые случаи, когда условия не идентичны, но ветвь никогда не выполнится из-за логики операторов || и &&.
Примеры дополнительного неправильного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (a || b) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if () {
baz();
}
if (a) {
foo();
} else if () {
bar();
}
if (a && b) {
foo();
} else if () {
bar();
}
if (a || b) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b && c) {
bar();
} else if () {
baz();
}
Обратите внимание: это правило не сравнивает условия в цепочке с условиями внутри операторов и не выдаёт предупреждений в таких случаях, как показано ниже:
if (a) {
if (a) {
foo();
}
}
if (a) {
foo();
} else {
if (a) {
bar();
}
}
Параметры
У этого правила нет параметров.
Когда не следует использовать это правило
В редких случаях, когда в одной цепочке действительно нужны идентичные условия проверки, что неизбежно означает, что выражения в цепочке вызывают побочные эффекты и зависят от них, это правило придётся отключить.
Связанные правила
Версия
Это правило появилось в ESLint v6.7.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-dupe-else-if