Edited at

ESLint 7.0.0 の開発が始まる

現在、実施される Breaking Changes について議論中です。Node.js 8.x が EOL になる頃にアルファ版が出始めると予想しています。

実施される可能性が高い Breaking Changes をちょっとだけ覗いてみましょう。



  • RFC20『設定ファイルによる追加の対象ファイル』 ディレクトリを指定してリントした場合、現在は*.jsファイルだけが対象になります。7.0.0 からは、overridesセクションのファイル指定にマッチするファイルも自動的に対象になります。TypeScript や Vue.js など、.js 以外のファイルを利用している場合に便利になります。


  • RFC32『個人設定ファイルを非推奨にする』 ESLint は、CWD 配下に ESLint の設定ファイルが存在しなかった場合、自動的にホームディレクトリの設定ファイルを探して利用します。 7.0.0 ではこの動作が非推奨になります。8.0.0 で削除されると思います。


  • RFC33『ディレクティブ コメントのコメント』 /* eslint-disable no-undef -- typeofで調べたから */ のように、各ディレクティブ コメントに説明を付与できるようになります。反面、-- が設定の中にあるとうまく動かなくなるかもしれません。


  • RFC34『単一行ディレクティブ コメント』 /* eslint-disable */ のようなブロックコメントのみサポートしているディレクティブ コメントが、// eslint-disable のように行コメントでも利用可能になります。ディレクティブ コメントと同じ単語で始まる行コメントが誤動作するかもしれません。


  • RFC37overrides/ignorePatternsの基準パスを変更』 --config/--ignore-path オプションで指定した設定ファイルの overrides/ignorePatterns プロパティの基準パスが CWD に変更されます。検証スクリプト自体をパッケージ化して再利用している場合などは、新しい振る舞いで便利になります。


  • RFC39『プラグインの読込元を変更』 ESLint 5.x までは ESLint がインストールされている場所を基準にプラグインを読み込んでいました。6.x では CWD を基準にプラグインを読み込んでいます。7.0.0 からはリント対象ファイルに最も近い設定ファイルを基準にプラグインを読み込むようになります。モノリポのように、node_modules が複数存在するようなリポジトリを利用している場合に便利になります。


  • RFC40『非同期 API に移行する』 ESLint を Node.js から利用する場合は CLIEngine 等のクラスを利用します。これらがすべて同期 API を使っているため、できないことがたくさんありました。例えば進捗表示、並列化、そして ES Modules の利用等です。7.0.0 では新たに非同期 API を提供し、今の同期 API は非推奨になります。


  • RFC42『並列化』 リント対象のファイル数に応じて、ファイルが多ければスレッドを作って並列処理するようになります。スレッドを使えない古い Node.js で実行されている場合は、代わりに子プロセスで並列化します。PoC では、20 秒程度かかっていた ESLint 自身のソースコードのリントが、7.5 秒程度で終わるようになりました。


  • RFC44『Node.js 8.x/11.x のサポート終了』 タイトル通り。新しいサポート範囲は ^10.12.0 || >=12.0.0 になりそう?


※ これらが本当に実施される保証はありません。