eslint/logical-assignment-operators Style
What it does
This rule requires or disallows logical assignment operator shorthand.
Why is this bad?
ES2021 introduces the assignment operator shorthand for the logical operators ||, && and ??. Before, this was only allowed for mathematical operations such as + or * (see the rule operator-assignment). The shorthand can be used if the assignment target and the left expression of a logical expression are the same. For example a = a || b can be shortened to a ||= b.
Examples
Examples of incorrect code for this rule with the default always option:
a = a || b;
a = a && b;
a = a ?? b;
a || (a = b);
a && (a = b);
a ?? (a = b);
a = a || b || c;
a = a && b && c;
a = a ?? b ?? c;Examples of correct code for this rule with the default always option:
a = b;
a += b;
a ||= b;
a = b || c;
a || (b = c);
if (a) a = b;
a = a || b || c;Examples of incorrect code for this rule with the never option:
a ||= b;
a &&= b;
a ??= b;Examples of correct code for this rule with the never option:
a = a || b;
a = a && b;
a = a ?? b;Configuration
The 1st option
type: "always" | "never"
The 2nd option
This option is an object with the following properties:
enforceForIfStatements
type: boolean
default: false
This option checks for additional patterns with if statements which could be expressed with the logical assignment operator. Only available if string option is set to always.
Examples of incorrect code for this rule with the ["always", { enforceForIfStatements: true }] option:
if (a) a = b; // <=> a &&= b
if (!a) a = b; // <=> a ||= b
if (a == null) a = b; // <=> a ??= b
if (a === null || a === undefined) a = b; // <=> a ??= bExamples of correct code for this rule with the ["always", { enforceForIfStatements: true }] option:
if (a) b = c;
if (a === 0) a = b;How to use
To enable this rule using the config file or in the CLI, you can use:
{
"rules": {
"logical-assignment-operators": "error"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"logical-assignment-operators": "error",
},
});oxlint --deny logical-assignment-operatorsVersion
This rule was added in v1.63.0.
