TypeScript環境でもEmacsのeslint-fixを動かすための設定
eslint周り再調査して気がついたこと。
気がついてなかったけどeslint-fixが最近動いていなかった
codesuki/eslint-fix: Fix current file using ESLint --fix
と言うeslint --fix
を動かすパッケージがあるのですが、最近動いていませんでした。
何故か調べた所
/home/ncaq/Desktop/goodbye-rfc-2822-date-time/src/GitHub.ts
0:0 error Parsing error: Cannot read file '/home/ncaq/Desktop/goodbye-rfc-2822-date-time/src/tsconfig.json'
✖ 1 problem (1 error, 0 warnings)
のようなエラーが出ていて、要するにeslintrc
で
"parserOptions": {
"project": "./tsconfig.json"
},
を指定しているのですが、 eslint-cliで動かすとカレントディレクトリが異なるので読み込めなくなるわけですね。
じゃあnpxでプロジェクトのeslintを実行させれば良いと思ったのですが、 yarnでの実行だとカレントディレクトリはサブディレクトリに居てもプロジェクトルートで実行されるのですが、 npxだとサブディレクトリのままなのですね。
npxはnpmパッケージのインストール透過実行なので冷静になってみれば当然ですね。
yarnで実行してもらう
npxで問題ないなら本家にコントリビュート出来たのですが、 yarnを使うしかないならば設定でどうにかするしか無いですね。
(leaf eslint-fix
:ensure t
:advice (:after eslint-fix flycheck-buffer) ; fixされたらエラーバッファを更新する
:custom
(eslint-fix-executable . "yarn")
(eslint-fix-options . '("eslint")))
これで良し。
しかしこれめっちゃ遅いので保存するたびに実行するのはつらいですね…
そういうものだと割り切るのも手ですが。普段はprettierだけにしてeslint-fix
は手動で呼び出すのも手かもしれません。
eslint-cliを修正するべきでは?
もしかしたら eslint/eslint-cli: The local eslint executor. をローカルのeslintを使う時はカレントディレクトリをプロジェクトルートにするように修正するべきなのかもしれません。