eslint-cliやeslint_dを動かせるTypeScript向け.eslintrc.jsの書き方
eslint_dが爆速
ESLintの速度が我慢ならないので色々調べてみた結果、 mantoni/eslint_d.js: Makes eslint the fastest linter on the planet が爆速であることを知りました。
存在は知っていましたがこんなに速くなるとは思っていませんでした。
eslintd-fixにはカレントディレクトリの問題があります
flycheckはプロジェクトディレクトリを探索するので問題ないのですが、
aaronjensen/eslintd-fix: Emacs minor-mode to automatically fix javascript with eslint_d. はeslint-fixと同じ問題を抱えています。
TypeScript環境でもEmacsのeslint-fixを動かすための設定 - ncaq にも書きましたが、 eslintをコマンドラインなどから呼び出す時にはカレントディレクトリの状態が大事になっていました。
それは
project: "./tsconfig.json",
がカレントディレクトリに依存する設定になっているからです。
前回はyarn経由で呼び出すことで一応の解決を見たのですが、これはコマンドライン引数を設定するオプションが無いので同じ手は使えません。
そこでもう一度調べてみたところ、
Config property parserOptions.project
relative path resolving · Issue #540 · typescript-eslint/typescript-eslint
を見て、
tsconfigRootDir: __dirname,
を指定すると言うワークアラウンドを知りました。
しかし、 unlight/eslint-plugin-tsc: Wraps a TypeScript compiler checks はそんなプロパティを持っていないためこのワークアラウンドは直接使えません。
でも、
__dirname
を参照すれば良いため、
"tsc/config": [
"error",
{
configFile: `${__dirname}/tsconfig.json`,
},
],
のように設定することで解決できました。
ただ両方に言えることですが、この手法はjs形式での設定ファイルでしか使えないのが欠点ですね。
結局eslintd-fixが動かない
これでコマンドラインからeslint_d
を動かすのは不自由しなくなったのですが、結局謎の理由でEmacsからeslintd-fixが動きません。
エラーメッセージがまともに出ないしどうしましょう。
と思ったら他のプロジェクトだと動きました。謎すぎる…
とりあえず
codesuki/eslint-fix: Fix current file using ESLint --fix
を実行ファイルeslint_d
で動かしてお茶濁せば良さそうな気がしました。
と思ったら初回でもないのにeslint-fixが動くたびにそこそこのロード時間がかかりますね…
eslintd-fixを使うにしても、
eslint_d
と言えども初回起動は時間がかかるので本当はasyncでfixを実現するパッケージを書いた方が良さそうです。やはりasync-fixを実装する必要がありそうですね。