eslint/no-self-assign 正しさ
何を実行するか
両側が完全に同一である代入を禁止します。
なぜ問題なのか
自己代入は効果がないため、おそらく不完全なリファクタリングによる誤りです。これはまだ実行すべき処理が残っていることを示しています。
例
このルールに対して誤りの例:
javascript
foo = foo;
[a, b] = [a, b];
[a, ...b] = [x, ...b];
({ a, b } = { a, x });
foo &&= foo;
foo ||= foo;
foo ??= foo;javascript
obj.a = obj.a;
obj.a.b = obj.a.b;
obj["a"] = obj["a"];
obj[a] = obj[a];このルールに対して正しい例:
javascript
foo = bar;
[a, b] = [b, a];
// これは `no-use-before-define` ルールで警告されます。
let foo = foo;
// デフォルト値には効果があります。
[foo = 1] = [foo];
// 関数呼び出しを無視します。
obj.a().b = obj.a().b;
a().b = a().b;
// `&=` と `|=` は整数以外にも効果があります。
foo &= foo;
foo |= foo;設定
このルールは次のプロパティを持つ設定オブジェクトを受け入れます。
props
type: boolean
default: true
props オプションを false に設定すると、プロパティのチェックが無効になります。
props が false の場合、以下のコードは正しい例になります:
javascript
obj.a = obj.a;
obj.a.b = obj.a.b;
obj["a"] = obj["a"];
obj[a] = obj[a];使い方
設定ファイルまたは CLI でこのルールを有効化するには、次のように使用できます:
json
{
"rules": {
"no-self-assign": "error"
}
}bash
oxlint --deny no-self-assign