• 作成:
  • 更新:

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を使う時はカレントディレクトリをプロジェクトルートにするように修正するべきなのかもしれません。

yarn必要無かった

eslint-cliやeslint_dを動かせるTypeScript向け.eslintrc.jsの書き方 - ncaq