• 作成:

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を実装する必要がありそうですね。