RubyMineユーザーなら誰しもが見たことがあるであろう、警告を表す赤い波線。
これを放置しておくと大抵プログラマにとって嬉しくないことが起きるので、なるべく早い段階で消しておきたいですよね。
今回は「問題のないコードなのに出る。しかも消しづらい。」という厄介な警告に悩まされたので、その対策をまとめておきます。
茶番が多いので解決方法だけ知りたいかたはまとめへGo!
TypeScriptのany型に関する警告が消えない
以下の画像は今回遭遇した問題の警告の一例です。
TypeScriptの関数呼び出しのコードにno-unsafe-callの警告が出ていますね。
「ちゃんとお型づけしなさいよ・・・」と思うかもしれませんが、createCheckinの型はきちんと別ファイルに定義されています。
その証拠に、ターミナル上でESLintを走らせても問題なくパスします。
つまり、RubyMineが問題のないコードに対して警告を表示してしまっているという状態になっています。
上で述べたように、この警告が出ていると良くない事が起きる前兆なのでどうやったって気になります。無視できません。
それなのに、実際には問題のないコードなので、警告の内容に対応して消すこともできません。
この言わば「詐欺警告」は生産性をゴリゴリ下げてくるので、対策が必要でした。
なぜ詐欺警告が表示されてしまうのか
上で述べた警告が出現する状況は以下のようなケースが多かったように感じます。
- 型を別ファイルに定義している
- ブランチを切り替えた直後
- ブランチを切り替える前と後で型を定義しているファイルに差分がある
どうやらESLintには結果をキャッシュするような機能があるらしく、これらのことから、ブランチを切り替えた際にRubyMine側のESLintが最新の型情報を取得できていないことが原因なのではないか? と睨みました。
詐欺警告を消すたった一つの方法...?
となれば、ESLintに最新の型情報を読み込んでもらう方法を見つけられれば、にっくき詐欺警告ともおさらばできます。
ただ、RubyMine側のESLintの問題なので、ファイルを開き直そうがRubyMineのTypeScriptを再起動しようがヤツらはのさばってきます。
そんなしつこいヤツらを撃退するたった一つの方法。
それは
「プロジェクトを開き直す」
です。
左上の❌ボタンもしくは「Close Project」でプロジェクトを閉じて、もう一度開き直します。
するとあら不思議、ヤツらは跡形もなく消え去っています。
これはプロジェクトを開き直した際にESLintが再起動され、最新の型情報を取得するからだと思われます。
☺️ < 「これにて一件落着!!!」
とはなりませんよね。
プロジェクトを開き直すとか面倒臭すぎてあり得ないです。
解決策:ESLintを再起動するプラグインを使う
どうやらVSCodeにはTypeScript: Restart TS server
という便利なコマンドがあるらしく、VSCodeへの乗り換えを考えていた時期が自分にもありました。
ただ長年連れ添ったRubyMineに簡単に別れを告げられるほど薄情な人間ではなかった自分は解決方法を探しました。
そこで見つけたのが以下のissueでした。
そこには自分と同じように詐欺警告にいきりたっている同志達がいました。
そのうちの一人の投稿に救われました。
神はここにいた・・・!
怒りを力に変えてESLintを再起動させる以下のプラグインを作成してくれた御方がいらっしゃいました。
レビュー評価が4.9なのにも頷けます。
上記のプラグインをRubyMineにinstallして、ショートカットなどを設定してあげる(自分は⌘⌥Sに設定しています)ことで、無事、詐欺警告達との戦いに終止符を打つことができました
まとめ
消せないTypeScriptの警告を消すにはESLintを再起動するプラグインを使ってください。
同じ問題を抱えている人が多そうなのにRubyMineにESLintを再起動する機能がデフォルトで組み込まれてないことに驚きました。(自分が知らないだけで既にあるかも...?)
もし、もっと簡単に解決する方法があればコメントなど頂けると喜びます。
ただ、1ヶ月前に「この機能がWebStorm(RubyMineのJS版みたいなやつ)に組み込まれていないなんて信じられるか...?」というコメントがあるので対応していないっぽい。
がんばれJetBrains!!💪