• 作成:

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に戻って来るという選択肢はありますね.