Coc.nvimを触ってみようアドベントカレンダー 10日目 – coc-metals

とっても楽しいcoc.nvimを触ってみようというアドベントカレンダーです。6日目はcoc-metals。以前に紹介した拡張ですが、インストール手続きや依存ライブラリの見直しにてよりシンプルに開始できるようになりました。
2021.12.10

Coc.nvimを触ってみよう Advent Calendar 2021 10日目です。

今回は coc-metals です。

coc-metals について

Scalaの言語サーバ Metals のcoc.nvim拡張です。前提として、必要なライブラリの一部に執筆時点でARM64版が存在していないためAMD64版(Rosetta2)ベースとなります。

coc-metals をインストールする

今回の手続きはsbtベースで進めていきます。

:CocInstall coc-metals

Java未導入であればインストールします。当記事執筆時点でのmetalsは v0.10.9 にてscala 2.13.7 をサポートしているため、JDKは 8, 11, 17, 18 のいずれかが必要となります。

sbtbloopGraalVMをインストールします。すでに導入済みのものに関してはパスして問題ありません。

brew install sbt
brew install scalacenter/bloop/bloop
brew install --cask graalvm/tap/graalvm-ce-java17
sudo xattr -r -d com.apple.quarantine /Library/Java/JavaVirtualMachines/graalvm-ce-java17-21.3.0/

metals導入はcoc-settings.jsonにversionを指定するだけでOKです。最新バージョンについてはmetalsのドキュメントを参照してください。

{
  "metals.serverVersion": "0.10.9",
  "metals.statusBarEnabled": true
}

これはバージョンあるいはSNAPSHOTの指定のいずれでも問題ありません。保存後にscalaファイルを開くとmetalsのインストールを開始します。

インストールが完了すると以下の表示となります。

そしてvimで開く時にsbt及びscファイルを開いた時にscalaとして処理が適用されるよう、以下の設定をinit.vimに入れておきます。

au BufRead,BufNewFile *.sbt,*.sc set filetype=scala

使ってみる

プロジェクトディレクトリ内でneovimにてscalaファイルを開くとビルドを促されるため実行します。例はsbtのケース。プロジェクト構成によっては時間が掛かります。

なかなか終わらない場合は、以下のコマンドで調査してみましょう。

:CocCommand metals.doctor-run

正常な場合は以下の表示が出力されるはずです。

あとがき

動作が正常にならない場合は衝突するライブラリを導入している可能性があります。以前同じく紹介した記事にて衝突するライブラリの除去について触れているので参考にしてください。

M1環境の場合は現時点ではRosetta2が必須となります。セットアップで若干手間はかかりますが、neovim上で軽快に動くのでおすすめです。

参考