あなたの知らないMetalsの便利な100の機能
こんにちは
所属(?)
東京工業大学増原研 コード理解の研究・algebraic effectの型システムの研究を眺める Metals
Scala の LSP 実装、IntelliJ に次いで2番目のシェア(データがぱっと出てこない)
https://scalameta.org/metals/img/scalameta-logo.png
使ってますか?
僕はMetalsもIntelliJも使う (sbtみたいなjavaがたくさん出てくるときはIntelliJの方が便利)
VSCode と Vim がメイン
https://i.imgur.com/w67gMGW.png
多機能
completion や navigation や symbol 検索などは使ってるかも
IntelliJ にあるこの機能ないのかな〜みたいなの、実はあったりなかったり
デモ形式で紹介していくよ
その前に
metals-feature-requests の紹介
vote が多いほど優先度が高くなったり難しくてなかなかやらなかったり...
みんな気軽にissue立てたりvoteしたりしてね
Doctor
何か動かなくておかしいな?ってときはこれを実行してみて! (そして結局 .bloop と .metals を削除して import build を再実行することが多い...)(安定性もっとなんとかしたい)
https://user-images.githubusercontent.com/3807253/147948980-401e3f5a-5130-4f19-b59c-d737d9092208.png
Code formatting
Scalafmt を使ってコードフォーマットします。.scalafmt.conf の設定を読むよ
format on save とかも同じ
https://user-images.githubusercontent.com/1408093/50635748-b0894880-0f53-11e9-913b-acfd5f505351.gif
Go to Implementation
これはみんな使ってるかも? LSP 標準だし
https://i.imgur.com/rke6iny.gif
Scaladoc Completions
IntelliJ にもあるよね。
https://user-images.githubusercontent.com/9353584/72444047-ae0e2f80-37f2-11ea-97b0-c5afac035340.gif
私が作りました。
Insert Missing Abstract Members
https://user-images.githubusercontent.com/9353584/75405616-81047f00-5951-11ea-9972-a12e25b1746a.gif
Worksheet mode
https://i.imgur.com/8c1NkIx.gif
hr.icon
ライブラリも使える
https://i.imgur.com/qXgdNWM.gif
hr.icon
https://i.imgur.com/PQmT2i3.gif
結果をclipboardにコピー
Basic Java Support
(LSIF により)定義ジャンプとかのみ提供、completionなどは動かない https://i.imgur.com/SJvLTRL.gif
Type annotations on code selection
選択した箇所の型をチェックできる、最高の機能
https://user-images.githubusercontent.com/39772805/130333128-dc357170-116e-4a10-b58d-b55c536a2e15.gif
Test explorer (VSCode only?)
ビーカーみたいなアイコンから
https://i.imgur.com/Z3VtS0O.gif
Show inferred type
Scala3 でも動くはず。Settings から show inferred type にチェックを入れてね。
https://i.imgur.com/K3QrUd2.png
生成しておいた SemanticDB を pretty print してるだけなので爆速
Show Implicits
https://i.imgur.com/vAvM7YV.png
decoration から定義ジャンプ
https://i.imgur.com/YyHVmLX.gif
Insert inferred type refactoring
推論した型をコードに追加してくれる CodeAction
https://i.imgur.com/ZT36mH7.gif
Add auto-fill option to case classes
一致する型のシンボルをスコープから探して勝手に入れてくれる。かっこいいけど正直あんまり使ってない
https://i.imgur.com/8pCiMqE.gif
Organize Import
https://i.imgur.com/8YBdjjC.gif
scalafix のアレ。本当は任意のルールをscalafix介して実行できるようにしたいんだけど大変で...
Source file analyzer
シュッとjavap実行したり japap や semanticdb や tasty を眺められる機能
scalafix の semanticrule作成に便利かも?
https://i.imgur.com/6tGSvuI.gif
Display build target info
https://i.imgur.com/XGyJEsl.gif
Search symbol references from dependency source in the workspace
例えば scala 標準ライブラリにジャンプしたあとで、そこからプロジェクト内での参照に飛べる
https://i.imgur.com/myHPDjP.gif
IntelliJ簡単にやってるけどこれ大変なんやで
Find text in dependency JAR files
> Metals: Find text in Jar files で
依存ライブラリが謎の設定ファイル持ってて困るときとかに便利
https://i.imgur.com/o1Drd12.gif
Scala3 対応
頑張ってます....
sbt BSP