ESLint v8.56.0 の `reportUnusedDisableDirectives` とは何か?
この記事は Cybozu Frontend Advent Calendar 2023 の 24 日目の記事です。
先日リリースされた ESLint v8.56.0 でオプション reportUnusedDisableDirectives
が改善された話です。
元々どういうオプションだった?
// eslint-disable-line
みたいなルール無効化ディレクティブを書いたけど、しばらくして何かしらのコード修正の影響でもうそのルール違反は発生しなくなって、でも無効化ディレクティブは消し忘れて無駄に残っている、みたいな状態は起こりがちです。
例えば以下のように non null assertion (!
) が一時的に必要になって disable したけど、
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
foo(bar!);
のちにコードを修正して !
は不要になったので消したけど、disable は消し忘れてるという状態。
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
foo(bar);
そういうケースに対して、従来から reportUnusedDisableDirectives
オプション を true
にすることで警告を表示することができました。
ただし、警告にはできるけど、エラーにはできないため、こういうケースを CI で落とそうとすると面倒でした。
これをエラーにできるプラグインルール eslint-comments/no-unused-disable もよく使われていたんだけど、これはハッキーな実装で実現されているものだったので、新しい Flat Config では使えないなど困った状況でした。
どう改善された?
警告だけじゃなく、エラーなどの severity を指定できるような RFC が提案されて、v8.56.0 でリリースされました。
つまり flat config なら以下のように書けばエラーにできます。
{
"linterOptions": {
// 従来 true/false のみしか指定できなかった
"reportUnusedDisableDirectives": "error"
}
}
他に CLI オプションにも --report-unused-disable-directives-severity
が追加されて指定可能になっているので必要ならどうぞ。
まとめ
とりあえず設定ファイルで error
に設定するで良いかと。eslint-plugin-seslint-comments の方は無効化しときましょう。
また一歩、Flat Config の世界が近づきましたね。
Discussion