eslintv9になったよ
ワイ的変更点メモ
正味あんまりeslintわからんし、必要そうなところだけメモっとく
languageOption, parser, processerとか未だにようわからん
大きな変更としてはflat configeslint.config.jsがdefaultに、eslintrcとかはdeprecatedになる。
書き方も変わるみたい。
適用させるルールをファイルごとに決めたりとかは新しいものかな?
あと配列になってる
rootとか、extendsって概念は消えた?
eslintのルールの書き方とかパラメータ系はそのままっぽい。
変わったところ
pluginの呼び出しとcustomparserの呼び出し
jsのimportができるようになった。
fileにスプレッド構文で展開して適用させたりとかもできる。
monorepo用の設定とか共通で設定して展開して、ファイルパスだけ決めるとかやり方するの良さそう。 globalやenv、parserOptionsになってたものの書き方
languageOptionsってkeyにまとめられたみたい
code:js
ecmaVersion: 2022,
sourceType: "module",
ちなみにこのlanguageOptionsのここら辺の設定はtsconfigとか読み込むならそもそも書かなくてよかったりするものなのかな?
eslintのrecommendとかの扱い
@eslint/jsパッケージにあるみたいなのでinstallする
使い方はこんな感じ
code:js
import js from "@eslint/js";
export default [
js.configs.recommended,
{
rules: {
},
// ...other config
}
];
extends自体はまだ使えるっぽい?
使う意味があんまりわかんないけど(ファイルごとに当てるやつを選べるし)
よくわからん、typescript-eslintだと使ってたりする。
typescript-eslintの拡張みたい
extendsできると、ファイルに応じて当てるconfigとかを拡張しやすそう?
pluginに書くとかでもやりたいことはできるのかな?わからん。
元々pluginとextendsの違いって何?
ルールセットとかを使うだけだとextendsでもいいけど、なんか機能を使うだとplugin使わないといけないとかなのかな?
extendsでoffにするとかonにするとかは共通でセットしておけば良いし、後のルールでファイルを指定してoffにするとか違うルールにするとかでアップデートする感じの運用になりそう?
正直中身が何かよくわかってないけど。
file指定がいらなくなった。npx eslintでよくなった。
--inspect-configオプションで適用されてるルールを確認できるインスペクターが追加された
.eslintignore使えなくなった
ignoresで指定する
ちなみにflat configだとdotfiles系はdefaultでignoreされなくなったみたいなので**/.*とかで指定してあげたほうがいいみたい
cliの変更
--ext使えない
filesで指定する
flat configに対応してないパッケージに関して
@eslint/eslintrcパッケージにあるFlatCompatで使えるようにできるみたい。
サンプルコピペ
extendsで読み込むやり方の書き方みたい。
code:js
import { FlatCompat } from "@eslint/eslintrc";
import path from "path";
import { fileURLToPath } from "url";
// mimic CommonJS variables -- not needed if using CommonJS
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname
});
export default [
// mimic ESLintRC-style extends
...compat.extends("eslint-config-my-config"),
];
typescript-eslint
@typescript-eslint/eslint-plugin, @typescript-eslint/parserがtypescript-eslintに統一
monorepoでどうすんの?
分割するのか?
rootに一つ定義しておいて、各環境用のconfigを作成する(共通で当てたいものを設定するとかかな?)
glob patternで指定したらみたいなこと書いてあるけど、そもそも共通で当てたりこの時だけ当てたいみたいなのがあるかもしれないしやっぱり環境ごとに分けたい感。
感想
移行自体はめんどくさそうだけど、めちゃくちゃ書き方が変わったって感じではないし慣れれば楽そうかなって気がする
とりあえず使ってるpluginとか全部見て対応してないならFlatCompatで気合いで移行していこうかな。
スプレッド構文とかで展開できるから、全て共通したいものはrootのeslint.config.jsで定義して、各サービス用のconfigまとめた上でpath指定して呼び出すのが良さそう感。
あとinspectorでたおかげで何があたってるのか確認しやすそうだし早めに移行したい。
inspectorの起動でずっとCannot find package 'eslint' エラー出てた
https://gyazo.com/e6540a3b8e9bbf0186e54e45d2eb0f16
~/.npm/npx内のフォルダ削除するで治ったかも
話変わるけどそもそもそんなにルールセットいらない感。
独自でルール設定を作るのも良いけど、基本的にはどっかのルールセットをextendsして使ってる
ってなると正直ルールの設定が上書きされてるだけだしあんまりextends色々しても仕方ないなーって気もする
何ならそのルールセットで他のルールセット読んでたりするからな
でも誰かが管理してくれてるってのはそれはそれでありがたかったりする。
あとコーディング規約を統一できるからおっきいパッケージとかに従ってるのが楽かもしれない。
そうなるとpluginだけ入れてあとは適当にルールセットぶち込んどくでも良いんかね。
ただルールセット呼び出してるからってまとめるのも微妙感はある
何を明示的に指定しているのか分かりづらいしそこまで見に行かないとわからないからね。
競合してるとかならアレだけど、同じ設定なら別に追加しても問題ないんじゃないかね。