no-mixed-operators
複雑な式を括弧で囲むことで、開発者の意図が明確になり、コードの可読性が向上します。このルールは、式中で括弧なしで異なる演算子が連続して使用されている場合に警告します。
var foo = a && b || c || d; /*BAD: Unexpected mix of '&&' and '||'.*/
var foo = (a && b) || c || d; /*GOOD*/
var foo = a && (b || c || d); /*GOOD*/注: このルールは、ペアになっている混合演算子ごとに1つのエラーを出すことが期待されます。結果として、連続して使用される2つの混合演算子ごとに、ルールに違反する特定の演算子が使用されている場所を指摘する個別のエラーが表示されます。
var foo = a && b || c || d;は以下を生成します
1:13 Unexpected mix of '&&' and '||'. (no-mixed-operators)
1:18 Unexpected mix of '&&' and '||'. (no-mixed-operators)ルールの詳細
このルールは、BinaryExpression、LogicalExpression、およびConditionalExpressionをチェックします。
このルールは、no-extra-parensルールと競合する可能性があります。このルールとno-extra-parensルールの両方を一緒に使用する場合は、no-extra-parensルールのnestedBinaryExpressionsオプションを使用する必要があります。
このルールの不正なコードの例
/*eslint @stylistic/no-mixed-operators: "error"*/
var foo = a && b < 0 || c > 0 || d + 1 === 0;
var foo = a + b * c;このルールの正しいコードの例
/*eslint @stylistic/no-mixed-operators: "error"*/
var foo = a || b || c;
var foo = a && b && c;
var foo = (a && b < 0) || c > 0 || d + 1 === 0;
var foo = a && (b < 0 || c > 0 || d + 1 === 0);
var foo = a + (b * c);
var foo = (a + b) * c;オプション
{
"no-mixed-operators": [
"error",
{
"groups": [
["+", "-", "*", "/", "%", "**"],
["&", "|", "^", "~", "<<", ">>", ">>>"],
["==", "!=", "===", "!==", ">", ">=", "<", "<="],
["&&", "||"],
["in", "instanceof"]
],
"allowSamePrecedence": true
}
]
}このルールには2つのオプションがあります。
groups(string[][]) - チェックする演算子グループを指定します。groupsオプションはグループのリストであり、グループは二項演算子のリストです。デフォルトの演算子グループは、算術、ビット演算、比較、論理、および関係演算子として定義されています。
注: Null合体演算子 ("??") と三項演算子 ("?:") はデフォルト設定ではどのグループにも属していないため、他のすべての演算子と混合することが許可されています。allowSamePrecedence(boolean) - 同じ優先順位の演算子が混在する場合に許可するかどうかを指定します。デフォルトはtrueです。
groups
次の演算子をgroupsオプションで使用できます
- 算術演算子:
"+","-","*","/","%","**" - ビット演算子:
"&","|","^","~","<<",">>",">>>" - 比較演算子:
"==","!=","===","!==",">",">=","<","<=" - 論理演算子:
"&&","||" - 関係演算子:
"in","instanceof" - Null合体演算子:
"??" - 三項演算子:
"?:"
このルールは、設定された各グループを個別にチェックします。警告またはエラーは、同じグループ内の演算子が(括弧を使用せずに)混在している場合にのみトリガーされます。グループ間での使用はチェックされません。次に、次のグループ構成を検討してください: {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}。この設定には、ビット演算子と論理演算子の2つのグループが指定されています。この場合、このルールは、ビット演算子がビット演算子と混在している場合、および論理演算子が論理演算子と混在している場合をチェックしますが、他のすべての演算子は無視します。
{"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}オプションを使用した、このルールの不正なコードの例
/*eslint @stylistic/no-mixed-operators: ["error", {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}]*/
var foo = a && b < 0 || c > 0 || d + 1 === 0;
var foo = a & b | c;/*eslint @stylistic/no-mixed-operators: ["error", {"groups": [["&&", "||", "?:"]]}]*/
var foo = a || b ? c : d;
var bar = a ? b || c : d;
var baz = a ? b : c || d;{"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}オプションを使用した、このルールの正しいコードの例
/*eslint @stylistic/no-mixed-operators: ["error", {"groups": [["&", "|", "^", "~", "<<", ">>", ">>>"], ["&&", "||"]]}]*/
var foo = a || b > 0 || c + 1 === 0;
var foo = a && b > 0 && c + 1 === 0;
var foo = (a && b < 0) || c > 0 || d + 1 === 0;
var foo = a && (b < 0 || c > 0 || d + 1 === 0);
var foo = (a & b) | c;
var foo = a & (b | c);
var foo = a + b * c;
var foo = a + (b * c);
var foo = (a + b) * c;/*eslint @stylistic/no-mixed-operators: ["error", {"groups": [["&&", "||", "?:"]]}]*/
var foo = (a || b) ? c : d;
var foo = a || (b ? c : d);
var bar = a ? (b || c) : d;
var baz = a ? b : (c || d);
var baz = (a ? b : c) || d;allowSamePrecedence
{"allowSamePrecedence": true}オプションを使用した、このルールの正しいコードの例
/*eslint @stylistic/no-mixed-operators: ["error", {"allowSamePrecedence": true}]*/
// + and - belong to the same default group; they have the same precedence.
var foo = a + b - c;{"allowSamePrecedence": false}オプションを使用した、このルールの不正なコードの例
/*eslint @stylistic/no-mixed-operators: ["error", {"allowSamePrecedence": false}]*/
// + and - belong to the same default group; they have the same precedence.
var foo = a + b - c;{"allowSamePrecedence": false}オプションを使用した、このルールの正しいコードの例
/*eslint @stylistic/no-mixed-operators: ["error", {"allowSamePrecedence": false}]*/
// + and - belong to the same default group; they have the same precedence.
var foo = (a + b) - c;使用しない場合
混合演算子について通知を受けたくない場合は、このルールを無効にしても安全です。