Scalaのimplicitをもう少し楽に追いかけたい

Implicitな値の由来が分からん

Scalaのコードを読んでいるときに、どこから来ているか分からないimplicitな引数があって困っていた。

このことをツイートしたらアドバイスをもらえて、解決できたので備忘録的にブログに上げる。

試験環境はVSCodeとMetals v1.22.0とScala2.13.10。

3行要約

  • Metalsの設定をいじるとVSCode上に表示できる
  • その設定はmetals.showImplicitArguments, metals.showImplicitConversionsAndClassesで変更できる
  • 実はMetalsのブログにやりかたが書いてある

詳細

scalameta.org

scalameta.org

ここに書いてあることが全てなので、公式ブログを見てください。

implicit args

metals.showImplicitArgumentsをtrueにするとimplicitな引数が見えるようになる。

Metals v0.9.5から設定が出来る。

こんな感じでimplicitで本来は見えない引数が見える

implicit conversions and classes

metals.showImplicitConversionsAndClassesをtrueにするとimplicitな型変換が見えるようになる。

Metals v0.9.6から設定が出来る。

implicitな変換が表示されるようになった

inferred type

これはimplicitな変換ではないが、型推論された結果をエディタに表示するようにできる。 metals.showInferredTypeをtrueにすれば有効になる。

Metals v0.9.5から設定が出来る。

型推論された結果が表示されている様子

この機能だけは切っている。複雑な型パズルした結果の変数が入ると、どれが変数名でどれが実際の処理なのか分かりにくくなるから。

まとめ

implicitを追いかけるための道具をそろえた。まだ設定したばかりなので使い勝手は分からないけど今のところ満足している。 またリプライしてくれた id:Windymelt さんありがとうございました。