Google-java-formaatin käyttäminen VS-koodin kanssa

Olen viime aikoina tehnyt Java-kehitystä, ja suosimani editorit pomppivat Visual Studio Code ja Neovim välillä. Minun vim-asetelmani on konfiguroitu muotoilemaan Java-lähdetiedostot google-java-formatilla, mutta minulla oli vaikeuksia saavuttaa sama käyttäytyminen Visual Studio Codessa. Tässä postauksessa selvitetään, miten Java-lähdetiedostot voidaan muotoilla google-java-formatilla VS Codessa.

TL;DR

Asenna emeraldwalk/vscode-runonsave:

$ code --install-extension emeraldwalk.RunOnSave

Asenna google-java-format järjestelmääsi:

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

Konfiguroi RunOnSave-formaatti Visual Studio Koodin asetuksissa:

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

Tausta

Google julkaisee sanallisen Google Java -tyylioppaan sekä google-java-format, joka muotoilee Java-koodin uudelleen kyseisen tyylioppaan mukaisesti. Muotoilija on saatavana Java JAR:nä ja suosittujen paketinhallintaohjelmien kautta. Asenna formatteri esimerkiksi OS X:lle:

$ brew install google-java-format

Javan lähdetiedostojen muotoilemiseksi anna ne argumentteina komennolle:

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

Olemassaoleva työ

Google-java-formatille on jo olemassa suosittuja liitännäisiä (plugins) IDE-ohjelmille, kuten Eclipselle ja IntelliJille. Valitettavasti mitään virallisia ei ole olemassa Visual Studio Codelle tätä kirjoitettaessa. Ennen kuin keksin oman ratkaisuni, tein hieman Internet-etsintää.

Suosituin vastaus tulee redhat-developer/vscode-java#419:stä, joka ohjaa Wiki-sivulle, jossa on ohjeet joidenkin Visual Studio Code -konfiguraatioiden muokkaamiseen:

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

Tämä ohjeistaa editorin käyttämään ”GoogleStyle”-tyyliä koodin muotoilussa sisäänrakennetun tyylin sijaan. Tämä tuntui sopivan hyvin, koska käytän jo RedHatin Java-kielitukea.

Vaikka tämä muuttaa koodin oletusmuotoilua, testauksessani se ei vastannut suoraan komentoriviltä ajetun google-java-format tulostetta. Vielä pahempaa oli, että se muutti esimerkiksi lisenssiotsikoiden kaltaisia asioita, jolloin ne eivät olleet päteviä.

Törmäsin myös Dev-Snippets/vscode-google-java-format-provideriin, joka vaikutti lupaavalta, mutta en saanut sitä rekisteröitymään formatoijaksi (enkä ole ainoa).

Ratkaisu

Aloitin kirjoittamaan oman Visual Studio Code -liitännäiseni, jonka avulla voin ajoittaa koodin formatoijana. Noin 10 minuutin harjoittelun jälkeen tajusin, että tästä pluginista tulisi aika typerä:

  1. Tunnista, onko tiedosto Java
  2. Suorita google-java-format -i ${file}
  3. Raportoi mahdolliset virheet takaisin käyttäjälle

Nämä vaiheet ovat pohjimmiltaan ”suorita komento tallentamisen yhteydessä”, ja kävi ilmi, että joku on jo kirjoittanut laajennuksen! emeraldwalk/vscode-runonsave lukee Visual Studio Code -asetukset, sovittaa tiedostot säännölliseen lausekkeeseen ja suorittaa sitten käyttäjän antaman komennon. Tämä osoittautui minimaaliseksi mutta täydelliseksi ratkaisuksi!

Asensin RunOnSaven ja google-java-format:

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

Sitten määrittelin RunOnSaven suorittamaan google-java-format tiedostoille, joiden pääte on .java Visual Studio Code -asetuksissa:

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

Tämä edellyttää, että google-java-format on $PATH:ssa. Jos se ei olisi, voisin sen sijaan määrittää koko polun binääriin:

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

Vietettyäni muutaman tunnin yrittäen saavuttaa yhdenvertaisuuden google-java-formaatin ja Visual Studio Code:n formatOnSave:n välillä, minusta tuntuu, että olen saavuttanut täydellisen ratkaisun.