Zenn
🛠️

Metalsを使うときだけ`scalacOptions`の設定を変えたい

2024/12/27に公開

この記事はScala Advent Calendar 2024 5日目の記事ということにしておく(にぎわい感の創出)。

私が今やっているプロジェクトはScalaのコンパイラオプションとして-Xfatal-warningsが有効化されているのですが、Metalsはこれを無効化することを推奨しています:

-Xfatal-warnings: disable this setting even if you have it enabled in your main build. Fatal warnings prevent code navigation from working when there are warnings like 'unused import'.

https://scalameta.org/metals/docs/integrations/new-build-tool/

他のメンバーはIntelliJとか使ってるので困らんらしい!!!

想定される解決策としては

  • bloopInstallのときだけscalacOptionsを変更するようにbuild.sbtを修正する
    • できなくはなさそう。sbt-bloopプラグインが有効になってない環境に対応するため、task keyを動的に取得する必要がある。
  • 手元でbuild.sbtを修正、コミットせずにgit update-index --skip-worktreeする
  • Metalsの設定を変更してsbtコマンドの呼び方を変える

あたりですが、最後のが一番リーズナブルだと判断した。

まずsbtコマンドのラッパーを用意し、

~/bin/sbt-no-fatal-warnings.sh
#!/bin/sh

sbt 'set scalacOptions -= "-Xfatal-warnings"' "$@"

エディタからMetalsを設定し、sbtの代わりに用意したラッパーを呼ぶようにする。

metals_config.settings = {
	showImplicitArguments = true,
	excludedPackages = { "akka.actor.typed.javadsl", "com.github.swagger.akka.javadsl" },
	sbtScript = vim.fn.expand("~/bin/sbt-no-fatal-warnings.sh"),
-- 以下略

これでMetalsがビルドをインポートする際には-Xfatal-warningsが無効化されるようになります。良かったですね。

Discussion

ログインするとコメントできます