pve-eslint/eslint/docs/rules/no-unmodified-loop-condition.md
Dominik Csapak eb39fafa4f first commit
includes a (minimal) working wrapper

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2020-04-06 15:06:03 +02:00

85 lines
1.7 KiB
Markdown

# Disallow unmodified conditions of loops (no-unmodified-loop-condition)
Variables in a loop condition often are modified in the loop.
If not, it's possibly a mistake.
```js
while (node) {
doSomething(node);
}
```
```js
while (node) {
doSomething(node);
node = node.parent;
}
```
## Rule Details
This rule finds references which are inside of loop conditions, then checks the
variables of those references are modified in the loop.
If a reference is inside of a binary expression or a ternary expression, this rule checks the result of
the expression instead.
If a reference is inside of a dynamic expression (e.g. `CallExpression`,
`YieldExpression`, ...), this rule ignores it.
Examples of **incorrect** code for this rule:
```js
while (node) {
doSomething(node);
}
node = other;
for (var j = 0; j < items.length; ++i) {
doSomething(items[j]);
}
while (node !== root) {
doSomething(node);
}
```
Examples of **correct** code for this rule:
```js
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);
}
```
## When Not To Use It
If you don't want to notified about references inside of loop conditions, then it's safe to disable this rule.