A google-java-format használata a VS Code segítségével

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:

  1. Erzékeli, hogy a fájl Java-e
  2. Futtatja google-java-format -i ${file}
  3. 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.