logical-assignment-operators
Требует или запрещает сокращённую форму оператора логического присваивания
Некоторые проблемы, о которых сообщает это правило, можно исправить автоматически с помощью опции --fix командной строки
Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора
В настоящее время это правило заморожено, и предложения по добавлению функций не принимаются.
В ES2021 для логических операторов ||, && и ?? введена сокращённая форма оператора присваивания. Ранее такая форма была доступна только для арифметических операций, например + или * (см. правило operator-assignment). Сокращённую форму можно использовать, если цель присваивания и левая часть логического выражения совпадают. Например, a = a || b можно сократить до a ||= b.
Подробности правила
Это правило требует или запрещает сокращённую форму оператора логического присваивания.
Параметры
У этого правила есть строковый параметр и параметр-объект. Строковый параметр:
-
"always"(по умолчанию) "never"
Параметр-объект (доступен только если строковый параметр имеет значение "always"):
-
"enforceForIfStatements": false(по умолчанию) Не проверять наличие эквивалентных инструкцийif. -
"enforceForIfStatements": trueПроверять наличие эквивалентных инструкцийif.
always
Этот параметр проверяет наличие выражений, которые можно сократить с помощью оператора логического присваивания. Например, a = a || b можно сократить до a ||= b. Для выражений с ассоциативностью, таких как a = a || b || c, сообщается, что их можно сократить до a ||= b || c, если только порядок вычисления не задан явно с помощью скобок, например a = (a || b) || c.
Примеры неправильного кода для этого правила с параметром "always" по умолчанию:
/*eslint logical-assignment-operators: ["error", "always"]*/
Примеры правильного кода для этого правила с параметром "always" по умолчанию:
/*eslint logical-assignment-operators: ["error", "always"]*/
a = b
a += b
a ||= b
a = b || c
a || (b = c)
if (a) a = b
a = (a || b) || c
never
Примеры неправильного кода для этого правила с параметром "never":
/*eslint logical-assignment-operators: ["error", "never"]*/
Примеры правильного кода для этого правила с параметром "never":
/*eslint logical-assignment-operators: ["error", "never"]*/
a = a || b
a = a && b
a = a ?? b
enforceForIfStatements
Этот параметр проверяет наличие дополнительных шаблонов с инструкциями if, которые можно выразить с помощью оператора логического присваивания.
Примеры неправильного кода для этого правила с параметром ["always", { enforceForIfStatements: true }]:
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/
// <=> a &&= b
// <=> a ||= b
// <=> a ??= b
// <=> a ??= b
Примеры правильного кода для этого правила с параметром ["always", { enforceForIfStatements: true }]:
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/
if (a) b = c
if (a === 0) a = b
Когда не следует использовать это правило
Использование сокращённой формы присваивания с логическим оператором — вопрос стиля. Если отключить это правило, разработчики смогут в каждом конкретном случае выбирать более читаемый вариант.
Версия
Это правило появилось в ESLint v8.24.0.
Материалы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/logical-assignment-operators