for-direction
Требует, чтобы в выражении обновления цикла for счётчик изменялся в правильном направлении
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
Цикл for с условием остановки, которое никогда не может быть выполнено, например цикл со счётчиком, изменяющимся в неправильном направлении, будет выполняться бесконечно. Хотя иногда бесконечный цикл необходим, принято создавать такие циклы как циклы while. Чаще всего бесконечный цикл for — это ошибка.
Подробное описание правила
Это правило запрещает циклы for, в которых переменная-счётчик изменяется так, что условие остановки никогда не будет выполнено. Например, если значение переменной-счётчика увеличивается (то есть i++), а условие остановки проверяет, что значение счётчика больше нуля (i >= 0), цикл никогда не завершится.
Примечание: Это правило проверяет только направление изменения счётчика относительно условия остановки. Оно не проверяет фактические значения, чтобы определить, выполнится ли цикл хотя бы один раз. Например, цикл вроде
for (let i = 0; i < 0; i++) {}считается допустимым этим правилом, поскольку направление изменения счётчика (i++) соответствует условию (i <), хотя условие ложно с самого начала (мёртвый код).
Примеры неправильного кода для этого правила:
/*eslint for-direction: "error"*/
{
}
{
}
{
// counter i is on the left with >, so i++ (increasing) is the wrong direction
}
{
// counter i is on the left with >, so i++ (increasing) is the wrong direction
}
{
// counter i is on the right with <, so i++ (increasing) is the wrong direction
}
{
}
const n = -2;
{
}
Примеры правильного кода для этого правила:
/*eslint for-direction: "error"*/
for (let i = 0; i < 10; i++) {
}
for (let i = 0; 10 > i; i++) { // with counter "i" on the right
}
for (let i = 10; i >= 0; i += this.step) { // direction unknown
}
for (let i = MIN; i <= MAX; i -= 0) { // not increasing or decreasing
}
for (let i = 0; i < 0; i++) {
// counter i is on the left with <, so i++ (increasing) is the correct direction
// (loop never executes, but direction is consistent)
}
for (let i = 0; 0 > i; i++) {
// counter i is on the right with >, so i++ (increasing) is the correct direction
// (loop never executes, but direction is consistent)
}
Параметры
У этого правила нет параметров.
Версия
Это правило добавлено в ESLint v4.0.0-beta.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/for-direction