• 作成:
  • 更新:

tscのエラーをeslintのエラーに変換してくれるeslint-plugin-tscが超便利なので最近導入してます

typescript-eslintはtscの出すエラーを出してくれない

またfathyb/parcel-plugin-typescript: 🚨 Enhanced TypeScript support for Parcelを導入してparcelがビルド時に型エラーを報告するように…出来れば良かったんですがどうもこれうまく動かないようですね.

Emacsでtslintが使われているプロジェクトではtslint, eslintに移行したらしきプロジェクトではeslintが使われるようにする - ncaq

とかでも書いたのですけれど, typescript-eslint はtscが出すようなエラーを表示してくれません.

ということのようです.

よって npm scriptを使ってtypescript-eslint環境で複数のlintをターミナルで常に動かして成功をわかりやすくする - ncaq のようにeslintとtscの両方をチェックするscriptを用意するという手段を使っていました.

しかしこの手段ではEmacsの単一のflycheckから両方を閲覧できないので, ターミナルを見る必要が出てきたりする問題がありました. それを解決するためにflycheckを弄ったりすることも考えましたが, もっと便利な方法がありました.

eslint-plugin-tscが超便利

というわけで最近は unlight/eslint-plugin-tsc: Wraps a TypeScript compiler checks がメチャクチャ便利だと気がついて使っています.

このプラグインはeslintのエラーとしてtscが出すエラーを出してくれます. 公式のREADME通り導入するだけで自然に動いてくれます. 超便利.

最近のscriptはこれによって以下のようになっています.

  "scripts": {
    "start": "web-ext run --firefox-profile goodbye-rfc-2822-date-time",
    "build": "parcel build src/main.ts",
    "package": "yarn build --no-source-maps && web-ext build --config web-ext-config.js && yarn archive",
    "archive": "git archive HEAD --output=goodbye-rfc-2822-date-time.tar.gz",
    "watch": "FORCE_COLOR=1 run-p --print-label watch:*",
    "watch:build": "parcel watch src/main.ts",
    "watch:lint": "esw --watch --color --cache --ext ts src",
    "clean": "git clean -d --interactive -x",
    "lint": "FORCE_COLOR=1 run-p --print-label lint:*",
    "lint:eslint": "eslint --ignore-path .gitignore --ext .ts .",
    "lint:web-ext": "web-ext lint",
    "fix": "yarn lint:eslint --fix"
  },

多分tscも個別にしてCIではチェックしたほうが良さそう.

問題点

完全にtscに対応していないのか, 報告してくれないエラーが設定次第で少しだけあったりします. また最近更新が無いです.

まあ致命的なエラーは恐らくCircleCIでビルドする時に分かるので問題は無いですね.

最近更新が無いようなのでこの先報告してくれないエラーが増えてきたら不安ですが… その時はtscをlintに再度追加してCIでは直接確かめるようにすれば問題は無さそうです.

まあそのうち typescript-language-server が完璧な型エラーも出してくれるようになるでしょう. なるのかなあ… VSCodeユーザがTypeScriptユーザに多いので型エラーは別口で出すことが多いと聞きますが… 本来LSPで全部出すのが正しい設計な気がしますよね.

どうしようもなくなったら ananthakumaran/tide: Tide - TypeScript Interactive Development Environment for Emacs に戻って来るという選択肢はありますね.

追記(2022-03-18) 最近は使っていません

最近はEmacsのlsp-modeでもtscとeslintを同時に動かせるようになったので、このプラグインは使っていません。

使えるようになった→Emacsのlsp-modeのlsp-eslintはまだ使うべきではなかった - ncaq