Jestem zainteresowany poznaniem dostępnych opcji wysokiej jakości, samodzielnych formatów kodu źródłowego dla języka Java.
Program formatujący musi być autonomiczny, to znaczy musi obsługiwać tryb „wsadowy”, który jest oddzielony od określonego środowiska programistycznego . W idealnym przypadku powinien być również niezależny od konkretnego systemu operacyjnego . Tak więc wbudowany program formatujący dla IDE du jour jest tutaj mało interesujący (chyba że to IDE obsługuje wywołanie programu formatującego w trybie wsadowym, być może z wiersza poleceń). Program formatujący napisany w języku C / C ++ o zamkniętym kodzie źródłowym, który działa tylko na, powiedzmy, Windows nie jest idealny, ale jest dość interesujący.
Aby było jasne, „formatyzator” (lub „upiększacz”) to nie to samo, co „narzędzie do sprawdzania stylu”. Program formatujący akceptuje kod źródłowy jako dane wejściowe, stosuje reguły stylizacji i tworzy kod źródłowy ze stylem, który jest semantycznie równoważny z oryginalnym kodem źródłowym. Modyfikacje składniowe są ograniczone do takich rzeczy, jak modyfikowanie układu kodu, np. Zmiana białych znaków lub organizowanie import
instrukcji. Przeprowadza się bardzo niewiele innych refaktoryzacji, jeśli w ogóle. Moduł sprawdzania stylów również stosuje reguły stylów, ale po prostu zgłasza naruszenia reguł bez generowania zmodyfikowanego kodu źródłowego na wyjściu. Więc obraz wygląda tak:
Formatter (tworzy zmodyfikowany kod źródłowy zgodny z zasadami stylizacji)
Przeczytaj kod źródłowy → Zastosuj zasady stylizacji → Napisz stylizowany kod źródłowy
Style Checker (nie tworzy zmodyfikowanego kodu źródłowego)
Przeczytaj kod źródłowy → Zastosuj zasady stylizacji → Napisz naruszenia reguł
Dalsze wyjaśnienia
Rozwiązania muszą być wysoce konfigurowalne. Chcę mieć możliwość określenia własnego stylu, a nie tylko wybierania z listy gotowych ustawień.
Także, ja nie szukam ogólnego przeznaczenia ładna-drukarki napisany w języku Java , który może całkiem-print wiele rzeczy. Chcę stylizować kod Java.
Ja też nie koniecznie interesuje w Grand-ujednolicone formater dla wielu języków. Przypuszczam, że byłoby miło, gdyby rozwiązanie obsługiwało języki inne niż Java, ale nie jest to wymagane.
Ponadto narzędzia, które wykonują tylko podświetlanie kodu są tuż na zewnątrz .
Nie jestem też zainteresowany usługą internetową. Chcę narzędzia, które mogę uruchomić lokalnie.
Wreszcie rozwiązania nie muszą ograniczać się do oprogramowania open source, domeny publicznej, shareware, bezpłatnego oprogramowania, komercyjnego lub czegokolwiek innego. Dopuszczalne są wszystkie formy licencjonowania .
źródło
Odpowiedzi:
JIndent (Commercial) robi, co chcesz:
http://www.jindent.com/
W przeszłości używałem również Jalopy do tego, jest to open source:
http://jalopy.sourceforge.net/
EDYCJA: zauważę, że Jalopy jest dość stary i wydaje się, że nie ma żadnych najnowszych aktualizacji. Nie jestem do końca pewien, czy będzie działać z Javą 5/6. Zamiast tego możesz spojrzeć na Jacobe:
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
W witrynie Roedy'ego Greena znajduje się również pełniejsza lista elementów formatujących:
http://mindprod.com/jgloss/beautifier.html
źródło
Możesz także uruchomić ponowne formatowanie Eclipse z wiersza poleceń.
Oto dokumentacja Eclipse dotycząca tej funkcji
Najpierw musisz utworzyć plik konfiguracyjny specyficzny dla twojego projektu ustawień programu formatującego kod Java.
Następnie zapisz
{projectDirectory}/.settings/org.eclipse.jdt.core.prefs
w innej lokalizacji.Teraz zadzwonisz do programu formatującego.
"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"
[OSTRZEŻENIE] Wygląda na to, że przestało działać w Eclipse 2018. Użyj Eclipse Oxygen.
źródło
Jalopy może być interesujący. Podłącza się do Anta i dlatego jest niezależny od twojego IDE.
Astyle również może się przydać. Jest open source (jak Jalopy), ale napisany w C ++. Jest nastawiony na formatowanie Java / C / C ++ i może być sterowany wsadowo (za pomocą skryptów powłoki lub podobnych)
źródło
AKTUALIZACJA: Zgodnie z moim nowym zrozumieniem, opartym na nieprawidłowym zgłoszeniu błędu, który złożyłem : https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 Plik OpenMRSFormatter.xml w rzeczywistości musi być plikiem preferencji, a nie XML plik.
Możesz znaleźć taki plik tutaj: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874
lub przekonwertuj dowolny plik formatu XML wyeksportowany za pomocą: cat formatter.xml | ustawienie grep | sed 's / @@'> formatter.asprefs
Dziękuję Misha
Oto coś, co zrobiłem przy użyciu słoików Eclipse 3.6. Jest to tylko Java, wiersz poleceń i powinien być kompatybilny z wieloma platformami:
http://www.sendspace.com/file/nm4ptt
Istnieje skrypt powłoki, który używa dołączonego pliku OpenMRSCodeFormatter.xml. Przykładowe dane wyjściowe:
misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java public class Test { public a() { System.out.println("! I did not format this right!"); } }misha@misha-d630:~/openmrs-code-formatter$ ./format.sh ../Test.java Configuration Name: OpenMRSFormatter.xml Starting format job ... Done. cat ../misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java public class Test { public a() { System.out.println("! I did not format this right!"); } }misha@misha-d630:~/openmrs-code-formatter$
Jest to oparte na poście tutaj: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/
Ponieważ nie wiem, jak długo link będzie się wyświetlał, poniżej opiszę zawartość.
Jest to oparte na dystrybucji Eclipse 3.6 Helios. Użyłem tego dla Linuksa x86, ale powinien działać dla każdej wersji, ponieważ nie korzystałem z (o ile wiem) żadnych plików JAR specyficznych dla platformy.
Zawartość archiwum tar to:
misha@misha-d630:~$ tar tvjf openmrs-code-formatter.tar.bz2 | sort tar: Record size = 8 blocks drwxr-xr-x misha/misha 0 2010-09-11 19:32 openmrs-code-formatter/plugins/ drwxr-xr-x misha/misha 0 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/ drwxr-xr-x misha/misha 0 2010-09-11 19:38 openmrs-code-formatter/configuration/ -rw-r--r-- misha/misha 101957 2010-09-11 19:03 openmrs-code-formatter/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar -rw-r--r-- misha/misha 107210 2010-09-11 19:32 openmrs-code-formatter/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar -rw-r--r-- misha/misha 111098 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar -rw-r--r-- misha/misha 1147220 2010-09-11 18:45 openmrs-code-formatter/plugins/org.eclipse.osgi_3.6.0.v20100517.jar -rw-r--r-- misha/misha 1812 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info -rw-r--r-- misha/misha 182596 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar -rw-r--r-- misha/misha 248071 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar -rw-r--r-- misha/misha 265 2010-09-11 19:21 openmrs-code-formatter/configuration/config.ini -rw-r--r-- misha/misha 28554 2010-09-11 19:34 openmrs-code-formatter/OpenMRSFormatter.xml -rw-r--r-- misha/misha 39331 2010-09-11 19:17 openmrs-code-formatter/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar -rw-r--r-- misha/misha 4504121 2010-09-11 19:27 openmrs-code-formatter/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar -rw-r--r-- misha/misha 47023 2010-09-11 18:42 openmrs-code-formatter/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -rw-r--r-- misha/misha 52710 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar -rw-r--r-- misha/misha 6451211 2010-09-11 19:32 openmrs-code-formatter/plugins/com.ibm.icu_4.2.1.v20100412.jar -rw-r--r-- misha/misha 70928 2010-09-11 19:01 openmrs-code-formatter/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar -rw-r--r-- misha/misha 769898 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.resources_3.6.0.v20100526-0737.jar -rw-r--r-- misha/misha 83817 2010-09-11 19:07 openmrs-code-formatter/plugins/org.eclipse.equinox.app_1.3.0.v20100512.jar -rw-r--r-- misha/misha 86986 2010-09-11 19:31 openmrs-code-formatter/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar -rw-r--r-- misha/misha 90837 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.core.jobs_3.5.0.v20100515.jar -rw-r--r-- misha/misha 91928 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar -rwxr-xr-x misha/misha 111 2010-09-11 19:39 openmrs-code-formatter/format.sh
Odpowiednie pliki jar w katalogu wtyczek są pobierane bezpośrednio z katalogu wtyczek Eclipse 3.6.
Zawartość config.ini to:
misha@misha-d630:~$ more openmrs-code-formatter/configuration/config.ini osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1\:start org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter
format.sh to:
misha@misha-d630:~$ more openmrs-code-formatter/format.sh #!/bin/bash java -jar plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $*
a OpenMRSFormatter.xml jest dostępny tutaj: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000
Uważam, że to wystarczy do reprodukcji.
Ciekawy projekt oparty na tej samej koncepcji można znaleźć tutaj: http://code.google.com/p/maven-java-formatter-plugin/
Dziękuję Misha
źródło
Wypróbuj „Jacobe Code Beautifier”:
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
Edycja osobista jest bezpłatna.
źródło
Kiedyś używałem Dr. Java do kodowania w i dzięki szybkiemu ctrl + A + tab, wszystko to ładnie formatuje z podświetlaniem składni. Używałem go na Macu i Windowsie, nie wiem, czy obsługują Linuksa. Jest to oprogramowanie typu open source, samodzielne i bezpłatne.
źródło
Często używałem też PrettyPrinter osadzonego w JRefactory ( http://jrefactory.sourceforge.net/ ). Odkryłem to poprzez wtyczkę do JEdit. Doceniam to, ponieważ miał lepszy zasięg javadoc, jaki kiedykolwiek widziałem.
Niestety wydaje się martwy (brak ewolucji od 2004 roku) i faktycznie nie obsługuje Java5.
Przy okazji potwierdzam, że Triemax jest pakietem komercyjnym opartym na martwym otwartym oprogramowaniu Jalopy.
źródło
Zobacz nasz Java Formatter, aby znaleźć narzędzie, które obsługuje wszystkie dialekty Java, w tym wersję 7.
źródło
Jalopy nie obsługuje instrukcji typu List stuff <MyClass> ... i lint komentarzy zaczynających się od @
Udało mi się wymusić formatowanie, zmieniając wszystkie <MyClass> na LTLTLTMyClassGTGTGT, a następnie @ na // @ // @ // @ (po prostu powtarzam LT, GT lub // @, aby upewnić się, że nie już istnieje. Wtedy udało mi się Jalopy i oczywiście muszę wszystko odmienić z powrotem na to, czym było.
Ponadto przed zmianą <lub> musisz upewnić się, że nie zmienisz porównań, takich jak <= lub> = itp.
Możesz więc nazwać to rozwiązanie dla biednych, ponieważ obejmuje wiele ręcznych kroków. Gdybym miał częściej robić Jalopy, prawdopodobnie napisałbym skrypt używając seda, który wprowadziłby te zmiany automatycznie za mnie.
źródło