no-unmodified-loop-condition
Запретить неизменённые условия цикла
Переменные в условии цикла часто изменяются в самом цикле. Если этого не происходит, это, вероятно, ошибка.
while (node) {
doSomething(node);
}
while (node) {
doSomething(node);
node = node.parent;
}
Подробное описание правила
Это правило находит ссылки, находящиеся внутри условий циклов, а затем проверяет, изменяются ли переменные этих ссылок в цикле.
Если ссылка находится внутри бинарного или тернарного выражения, это правило проверяет результат выражения вместо этого. Если ссылка находится внутри динамического выражения (например, CallExpression, YieldExpression, …), это правило его игнорирует.
Примеры неправильного кода для этого правила:
/*eslint no-unmodified-loop-condition: "error"*/
var node = something;
while () {
doSomething(node);
}
node = other;
for (var j = 0; < 5;) {
doSomething(j);
}
while ( !== root) {
doSomething(node);
}
Примеры правильного кода для этого правила:
/*eslint no-unmodified-loop-condition: "error"*/
while (node) {
doSomething(node);
node = node.parent;
}
for (var j = 0; j < items.length; ++j) {
doSomething(items[j]);
}
// OK, the result of this binary expression is changed in this loop.
while (node !== root) {
doSomething(node);
node = node.parent;
}
// OK, the result of this ternary expression is changed in this loop.
while (node ? A : B) {
doSomething(node);
node = node.parent;
}
// A property might be a getter which has side effect...
// Or "doSomething" can modify "obj.foo".
while (obj.foo) {
doSomething(obj);
}
// A function call can return various values.
while (check(obj)) {
doSomething(obj);
}
Когда не стоит использовать
Если вы не хотите получать уведомления о ссылках внутри условий циклов, то можно отключить это правило.
Версия
Это правило было введено в ESLint v2.0.0-alpha-2.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-unmodified-loop-condition