Using google-java-format with VS Code

私は最近いくつかの Java 開発を行っており、私の好みのエディタは Visual Studio Code と Neovim の間で行き来しています。 私の vim セットアップは、google-java-format を使用して Java ソース ファイルをフォーマットするように構成されていますが、Visual Studio Code で同じ動作を実現するのに苦労していました。 この記事では、VS Codeでgoogle-java-formatを使用してJavaソースファイルをフォーマットする方法について説明します。

TL;DR

I install emeraldwalk/vscode-runonsave:

$ code --install-extension emeraldwalk.RunOnSave

Install google-java-format for your system:

# Example using Homebrew on OS X$ brew install google-java-format

Configure RunOnSave in Visual Studio Code settings.VSコードの設定を確認する。

{ "emeraldwalk.runonsave": { "commands": , },}

Background

Google は、詳細な Google Java スタイル ガイドと、そのスタイル ガイドに従って Java コードを再フォーマットする google-java-format を発表しています。 フォーマッタは Java JAR として、また一般的なパッケージマネージャで利用可能です。 たとえば、OS X にフォーマッターをインストールする場合、

$ brew install google-java-format

次に、Java ソース ファイルをフォーマットするには、コマンドに引数としてそれらを渡します:

$ google-java-format -i ./MyClass.java

既存の作業

すでに Eclipse や IntelliJ といった IDE 用の google-java-format の人気プラグインが存在します。 残念ながら、この記事を書いている時点では、Visual Studio Code 用の公式なものは存在しません。 5632>

最も一般的な答えは redhat-developer/vscode-java#419 で、Visual Studio Code の設定を編集する手順を含む Wiki ページに誘導しています:

{ "java.format.settings.profile": "GoogleStyle", "java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",}

これにより、コードのフォーマット時に組み込みスタイルの代わりに「GoogleStyle」を使用するようエディターに指示します。 私はすでに RedHat の Java Language Support を使用しているので、これは非常に適しているように思えました。

これはコードのデフォルトの形式を変更しますが、私のテストでは、コマンド ラインから直接 google-java-format を実行したときの出力と一致しませんでいた。 さらに悪いことに、ライセンス ヘッダーのようなものを変更し、無効にしてしまいました。

Dev-Snippets/vscode-google-java-format-provider も偶然見つけましたが、これは有望に見えましたが、フォーマッターとして登録することができませんでした (そして私だけではないはずです)。 5632>

  1. Detect if the file is Java
  2. Run google-java-format -i ${file}
  3. Report any errors back to the user

これらのステップは本質的に「保存時にコマンドを実行」ですが、誰かがすでに拡張機能を書いていたことが判明しました!

私は Mac に RunOnSave と google-java-format をインストールしました:

$ code --install-extension emeraldwalk.RunOnSave$ brew install google-java-format

それから Visual Studio Code settings で .java で終わるファイルに対して google-java-format を実行するように RunOnSave を構成しました:

{ "emeraldwalk.runonsave": { "commands": , },}

このためには $PATH で終わっていないといけないんですよ。 そうでない場合は、代わりにバイナリへのフル パスを指定できます。

{ "cmd": "/usr/local/bin/google-java-format --replace ${file}"}

数時間かけて google-java-format と Visual Studio Code の formatOnSave の間の同等性を達成しようとした結果、完璧なソリューションに到達したような気がします。