ESLint の Plugin と Extend の違いの記事
ESLint の Plugin と Extend の違い | blog.ojisan.io
読んだ。
正直、ESLint 関連のライブラリを設定するときにドキュメント通りにインストールして設定を書いて、という感じで進めていたので、全然知らなかった。
この記事はとても細かく詳しく書いてくれていて助かった。
たとえばeslint-plugin-prettier
はよく使われてるやつで、これは Plugin だからルールの追加をする。
plugin は rules, environments, processors の実装や設定を提供できる
こういう感じ。
Extend はルールを追加で定める。
たとえば手元の.eslintrc.js
を覗いたりしてみると、
// ...
extends: ['prettier', 'plugin:prettier/recommended'],
plugins: ['prettier', 'unused-imports'],
// ...
こんな感じだった。
eslint-config-prettier
の設定が 1 つめ、eslint-plugin-prettier
の設定が 2 つめのplugin:prettier/recommended
だろう。
recommended の他に all もあったりする、とのことで、つまりはここで本来手動で 1 行ずつ書いていくルールをライブラリのほうで設定されているものに任したり、独自のルールを追加できるということなんだと思う。
shareable config という概念も出てきて、これが上の例でいうeslint-config-prettier
に当たるとのこと。
これは rules 以外にも plugins や env の設定などもできるらしく、shareable config 自体に plugin の設定を含めることができるっぽい。
そして、Plugin が shareable config の提供もできる。
若干ややこしいが、shareable config を作るために Plugin を含めることができ、Plugin は shareable config を提供できるという、どちらにも干渉できるような感じっぽい。
なので、extends: ['prettier', 'plugin:prettier/recommended']
は、
- 1 つめの'prettier'は単なる shareable config
- 2 つめの'plugin:prettier/recommended'は Plugin が提供している shareable config
ということになる(はず)
全然知らなかった。勉強になった。