ESLint 10.7.0 がリリースされた。max-nested-callbacks と preserve-caught-error に新オプションが入り、no-compare-neg-zero が suggestion を返すようになった。あわせて、シャドウされたグローバルや eqeqeq 周りの誤検知修正が多数含まれる。

max-nested-callbacks は checkConstructorCallCallbacks を有効にすると、new Promise((resolve) => {}) のように new 付きコンストラクタに渡すコールバックもネスト深度に数える。

js
run(() => {
    new Promise(resolve => resolve());
});

{ "max": 1, "checkConstructorCallCallbacks": true } では上記が許容深度を超えると報告される。

preserve-caught-error は errorClassNames で、組み込みエラー型と同様に cause で元のエラーを保持すべきカスタムクラス名を追加できる。

js
try {
    doSomething();
} catch (error) {
    throw new MyError("something went wrong");
}

{ "errorClassNames": ["MyError"] } では、元の error を cause に渡さない MyError の再スローが違反になる。

no-compare-neg-zero は -0 との比較に suggestion を出す。x === -0 では、従来の比較挙動を保つ x === 0 と、-0 と +0 を区別する Object.is(x, -0) を提案する。

その他の修正は次のとおり。

  • preserve-caught-error が括弧で包んだ throw の外側に cause を挿入するよう修正
  • eqeqeq が静的テンプレートリテラルを扱い、null オプションが === 以外の演算子を誤って報告しない
  • no-invalid-regexp、no-control-regex、prefer-numeric-literals、use-isnan などがシャドウされた RegExp や NaN / Number で誤検知しにくくなった

#参考文献