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が出すようなエラーを表示してくれません.
tsc がやってることは ESLint ではやらないことになっています。(no-unused-varは何故かありますが、off 推奨です)
— Toru Nagashima (@mysticatea) May 2, 2019
ということのようです.
よって 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を同時に動かせるようになったので、このプラグインは使っていません。