A közelmúltban Java-fejlesztést végeztem, és az általam preferált szerkesztők a Visual Studio Code és a Neovim között ingadoznak. A vim beállításom úgy van beállítva, hogy a Java forrásfájlokat a google-java-format segítségével formázza, de a Visual Studio Code-ban ugyanezt a viselkedést nehezen tudtam elérni. Ez a bejegyzés azt vizsgálja, hogyan lehet Java forrásfájlokat a google-java-format használatával formázni a VS Code-ban.
TL;DR
Telepítse az emeraldwalk/vscode-runonsave:
$ code --install-extension emeraldwalk.RunOnSave
Telepítse a google-java-formatot a rendszeréhez:
# Example using Homebrew on OS X$ brew install google-java-format
Konfigurálja a RunOnSave-t a Visual Studio Code beállításaiban:
{ "emeraldwalk.runonsave": { "commands": , },}
Háttér
A Google közzéteszi a Google Java stílus útmutatóját, valamint a google-java-format-ot, amely a Java kódot ennek a stílus útmutatónak megfelelően formázza újra. A formázó elérhető Java JAR-ként és a népszerű csomagkezelőkön keresztül. Például a formatter telepítéséhez OS X-en:
$ brew install google-java-format
A Java forrásfájlok formázásához adjuk át őket argumentumként a parancsnak:
$ google-java-format -i ./MyClass.java
Létező munka
A google-java-formathoz már léteznek népszerű pluginok olyan IDE-khez, mint az Eclipse és az IntelliJ. Sajnos a Visual Studio Code-hoz e sorok írásakor még nem léteznek hivatalosak. Mielőtt saját megoldással álltam volna elő, némi internetes keresgélést végeztem.
A legnépszerűbb válasz a redhat-developer/vscode-java#419 oldalról származik, amely egy Wiki oldalra irányít minket, ahol utasításokat találunk néhány Visual Studio Code konfiguráció szerkesztésére:
{ "java.format.settings.profile": "GoogleStyle", "java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",}
Ez utasítja a szerkesztőt, hogy a kód formázásakor a beépített stílus helyett a “GoogleStyle”-t használja. Ez remekül illeszkedőnek tűnt, mivel én már használom a RedHat Java nyelvi támogatását.
Míg ez megváltoztatja a kód alapértelmezett formátumát, az én teszteléseim során nem egyezett a közvetlenül a parancssorból futtatott google-java-format
kimenetével. Rosszabb, hogy olyan dolgokat módosított, mint a licencfejlécek, érvénytelenné téve azokat.
A Dev-Snippets/vscode-google-java-format-providerre is rábukkantam, ami ígéretesnek tűnt, de nem tudtam rávenni, hogy formázóként regisztráljon (és nem én vagyok az egyetlen).
megoldás
Elkezdtem a saját Visual Studio Code plugin írásához, hogy a google-java-format
formázóként fusson. Miután kb. 10 percet töltöttem a feladatban, rájöttem, hogy ez a plugin elég buta lesz:
- Erzékeli, hogy a fájl Java-e
- Futtatja
google-java-format -i ${file}
- Megjelenti az esetleges hibákat a felhasználónak
Ezek a lépések lényegében a “parancs futtatása mentéskor”, és kiderült, hogy valaki már írt egy kiterjesztést! Az emeraldwalk/vscode-runonsave beolvassa a Visual Studio Code beállításait, egyezteti a fájlokat egy reguláris kifejezés alapján, majd lefuttat egy, a felhasználó által megadott parancsot. Ez egy minimális, de tökéletes megoldásnak bizonyult!
Telepítettem a RunOnSave-et és a google-java-format
-ot a Mac-emre:
$ code --install-extension emeraldwalk.RunOnSave$ brew install google-java-format
Aztán úgy állítottam be a RunOnSave-et, hogy a Visual Studio Code beállításaiban .java
-re végződő fájlokra futtassa a google-java-format
-ot:
{ "emeraldwalk.runonsave": { "commands": , },}
Ez megköveteli, hogy a google-java-format
a $PATH
-ban legyen. Ha nem így lenne, megadhatnám helyette a bináris teljes elérési útvonalát:
{ "cmd": "/usr/local/bin/google-java-format --replace ${file}"}
Miután néhány órát töltöttem azzal, hogy megpróbáltam elérni a google-java-format és a Visual Studio Code formatOnSave
közötti paritást, úgy érzem, elértem a tökéletes megoldást.