Scala用のLanguage Server「Metals」をAtomで使ってみる

MetalsはScalametaのサブプロジェクトとして開発されているScala用のLanguage Serverで、Visual Studio CodeAtomVimEmacsなどのテキストエディタScalaプログラミングを行う際にIDEのような機能を利用できるようにするものです。

scalameta.org

コード補完などの機能が実装されたMetals 0.5.0がリリースされたとのことなので早速試してみました。エディタとしては、フル機能は使用できないようですが普段使っているAtomを使ってみました。

セットアップは簡単で、Atomのパッケージマネージャで「ide-scala」パッケージをインストールするだけです(環境変数JAVA_HOMEが設定されている必要があります)。他にもいくつか必要なパッケージがありますが自動的にインストールされます。Visual Studio Codeでも同様に簡単にインストールできるようです。

パッケージの設定画面で使用するMetalsのバージョンを指定できます。

f:id:takezoe:20190414003701p:plain

パッケージをインストール後、build.sbtがあるディレクトリを開くとプロジェクトをインポートするかどうかを確認するダイアログが表示されます。Metalsは直接sbtを実行するのではなくBloopを使っているようです。Bloopについては以前ブログを書きました。

takezoe.hatenablog.com

インポートされない場合はコマンドパレットから「Metals: Import Build」というコマンドを実行すると強制的に再インポートを行うことができます。そこそこ時間がかかりますが、インポートが終わるとMetalsが提供する機能を利用できるようになります。

コンパイルエラーはエディタ上に表示されますし、CTRL + クリックでコードジャンプも可能です。

f:id:takezoe:20190414003719p:plain

ScaladocやJavadoc、メソッド定義などの情報をホバー表示することもできます。

f:id:takezoe:20190414003736p:plain

コード補完もちゃんと効きます。Visual Studio Codeだとパラメータヒントも表示されるようです。ただ、IntelliJのように同時にimport文を付け足してくれたりするような便利補完機能はないです。import文を再編成する機能もまだありません。

f:id:takezoe:20190414003809p:plain

なお、プロジェクトには.metals.bloopというディレクトリが作成されるので、.gitignoreに追加しておくとよいでしょう。

Bloopを使っているのでsbtプラグインに依存するプロジェクトだと問題があったり、機能面でもIntelliJの代わりに使うにはまだまだ厳しい感じがありますが、Ensimeの開発が止まってしまったのでテキストエディタを使ってScalaを書きたいという方には期待のプロジェクトでしょう。個人的にはEmacsでも試してみたいところです。