Samodzielny program do formatowania / upiększania kodu Java / ładna drukarka? [Zamknięte]


84

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 importinstrukcji. 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 kodutuż 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 .


1
Podniosłem coś, co jest samodzielnym Heliosem (Eclipse 3.6), który obsługuje tylko formatowanie kodu. Ma mniej niż 13 MB, tylko Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша Кошелев

Odpowiedzi:


25

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


Jaki jest związek między otwartym oprogramowaniem Jalopy a tym: triemax.com/products/jalopy
Greg Mattes

Wygląda na to, że projekt open source umarł i zdecydowali się na komercyjną wersję - wyprodukowaną przez Triemax. Minęło dużo czasu, odkąd użyłem Jalopy, myślę, że to było z Ant. Zamiast tego spójrz na Jacobe.
Jon

Jacobe nie jest aktualizowany do Javy 7, a TIOBE twierdzi, że nigdy nie będzie.
Chris Jones


14

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.prefsw 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.


7

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)


4

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



1

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.


Naciśnięcie klawisza Tab po wybraniu dowolnej części kodu spowoduje sformatowanie zaznaczenia. DrJava także przyjemna interaktywna (podobna do interpretera) karta.
dansalmo

0

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.



0

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.