私は最近いくつかの 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>
- Detect if the file is Java
- Run
google-java-format -i ${file}
- 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
の間の同等性を達成しようとした結果、完璧なソリューションに到達したような気がします。