Bağımsız Java kod formatlayıcı / güzelleştirici / güzel yazıcı? [kapalı]


84

Java için yüksek kaliteli, bağımsız kaynak kodu biçimlendiricilerinin mevcut seçenekleri hakkında bilgi edinmekle ilgileniyorum .

Biçimlendirici olduğunu, bu bir desteklemelidir, tek başına olmalıdır "toplu" modunu olan herhangi bir geliştirme ortamından ayrılmış . İdeal olarak, herhangi bir işletim sisteminden de bağımsız olmalıdır . Dolayısıyla, IDE du jour için yerleşik bir formatlayıcı burada çok az ilgi çekicidir (IDE, toplu mod formatlayıcı çağrısını desteklemediği sürece, belki de komut satırından). Yalnızca Windows üzerinde çalışan, kapalı kaynaklı C / C ++ ile yazılmış bir formatlayıcı ideal değildir, ancak biraz ilginçtir.

Açık olmak gerekirse, bir "biçimlendirici" (veya "güzelleştirici") bir "stil denetleyici" ile aynı şey değildir. Biçimlendirici, kaynak kodunu girdi olarak kabul eder, stil kurallarını uygular ve orijinal kaynak koduna anlamsal olarak eşdeğer olan stilize edilmiş kaynak kodu üretir. Sözdizimsel değişiklikler, beyaz boşlukları değiştirirken olduğu gibi kod düzenini değiştirmek veya importifadeleri düzenlemek gibi şeylerle sınırlıdır . Varsa çok az başka yeniden düzenleme yapılır. Bir stil denetleyici ayrıca stil kurallarını uygular, ancak çıktı olarak değiştirilmiş kaynak kodu üretmeden kural ihlallerini rapor eder . Yani resim şuna benziyor:

Biçimlendirici (stil kurallarına uyan değiştirilmiş kaynak kodu üretir)

Kaynak Kodunu Oku → Stil Kurallarını Uygula → Tarz Kaynak Kodunu Yaz

Stil Denetleyicisi (değiştirilmiş kaynak kodu üretmez)

Kaynak Kodunu Oku → Stil Kurallarını Uygula → Kural İhlallerini Yaz

Ek Açıklamalar

Çözümler son derece yapılandırılabilir olmalıdır. Sadece bir ön ayar listesinden seçim yapmak yerine kendi stilimi belirleyebilmek istiyorum.

Ayrıca, Java ile yazılmış, pek çok şeyi güzel bir şekilde yazdırabilen genel amaçlı bir güzel yazıcı aramıyorum . Java koduna stil vermek istiyorum.

Ben de değilim değil mutlaka bir ilgilenen büyük birleşmiş biçimlendiricisine birçok dil için. Bir çözümün Java dışındaki dilleri desteklemesi iyi olabilir, ancak bu bir gereklilik değil.

Dahası, sadece kod vurgulama gerçekleştirmek araçları olan doğru dışarı .

Ayrıca bir web servisiyle de ilgilenmiyorum. Yerel olarak çalıştırabileceğim bir araç istiyorum.

Son olarak, çözümlerin açık kaynak, kamu malı, paylaşılan yazılım, özgür yazılım, ticari veya başka herhangi bir şeyle sınırlandırılmasına gerek yoktur. Tüm lisanslama biçimleri kabul edilebilir .


1
Yalnızca kod biçimlendirmesi yapan bağımsız bir Helios (Eclipse 3.6) olan bir şeyi kırbaçladım. <13 MB, yalnızca Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша

Yanıtlar:


25

JIndent (Ticari) istediğinizi yapar:

http://www.jindent.com/

Bunu yapmak için geçmişte Jalopy'yi de kullandım, açık kaynak:

http://jalopy.sourceforge.net/

DÜZENLEME: Jalopy'nin oldukça eski olduğunu ve yeni bir güncelleme olmadığı görülüyor. Java 5/6 ile çalışıp çalışmayacağından tam olarak emin değilim. Bunun yerine Jacobe'ye bakmak isteyebilirsiniz:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

Ayrıca, Roedy Green'in sitesinde biçimlendiricilerin daha eksiksiz bir listesi var:

http://mindprod.com/jgloss/beautifier.html


: Açık kaynak Jalopy ve bu bir ilişkisi nedir triemax.com/products/jalopy
Greg Mattes

Görünüşe göre açık kaynak projesi bitmiş ve Triemax tarafından üretilen ticari bir sürümle gitmeye karar vermişler. Jalopy'yi kullanmayalı uzun zaman oldu, sanırım Ant'la beraberdi. Bunun yerine Jacobe'ye bir bakın.
Jon

Jacobe, Java 7 için güncellenmiyor ve TIOBE bunun asla olmayacağını söylüyor.
Chris Jones


14

Eclipse yeniden biçimlendiriciyi komut satırından da çalıştırabilirsiniz.

İşte özelliğin Eclipse belgeleri

Öncelikle , Java kod formatlayıcı ayarlarınızın projenize özel konfigürasyon dosyası oluşturmanız gerekir .

Ardından {projectDirectory}/.settings/org.eclipse.jdt.core.prefsbaşka bir yere kaydedin .

Şimdi formatlayıcıyı arayacaksınız.

"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"

[UYARI] Bu, Eclipse 2018'de çalışmayı durdurmuş gibi görünüyor. Eclipse Oksijen Kullanın.


7

Jalopi ilgi çekici olabilir. Ant'a bağlanacak ve böylece IDE'nizden bağımsız olacaktır.

Astyle de faydalı olabilir. Açık kaynak kodludur (Jalopy gibi) ancak C ++ ile yazılmıştır. Java / C / C ++ biçimlendirmesine yöneliktir ve toplu olarak çalıştırılabilir (kabuk komut dosyaları veya benzeri aracılığıyla)


4

GÜNCELLEME: Dosyaladığım yanlış bir hata raporuna dayalı yeni anlayışıma göre : https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 OpenMRSFormatter.xml dosyası aslında bir XML değil bir tercihler dosyası olmalıdır dosya.

Böyle bir dosyayı burada bulabilirsiniz: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

veya herhangi bir XML dışa aktarılmış formatlayıcı dosyasını şu şekilde dönüştürün: cat formatter.xml | grep ayarı | sed 's / @@'> formatter.asprefs

Teşekkür ederim Misha


İşte Eclipse 3.6 kavanozları kullanarak yaptığım bir şey. Yalnızca Java, komut satırı ve platformlar arası uyumlu olmalıdır:

http://www.sendspace.com/file/nm4ptt

Paketlenmiş bir OpenMRSCodeFormatter.xml dosyasını kullanan bir kabuk komut dosyası vardır. Örnek çıktı:

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$ 

Bu, buradaki gönderiye dayanmaktadır: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

Bağlantının ne kadar kalacağını bilmediğim için içeriği aşağıda anlatacağım.

Bu, Eclipse 3.6 Helios dağıtımına dayanmaktadır. Birini Linux x86 için kullandım, ancak (bildiğim kadarıyla) platforma özgü herhangi bir JAR dosyası kullanmadığım için herhangi bir sürüm için çalışmalıdır.

Tar arşivinin içeriği:

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

Eklentiler dizinindeki ilgili kavanozlar doğrudan Eclipse 3.6 eklenti dizininden alınır.

Config.ini içeriği:

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 şudur:

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 $*

ve OpenMRSFormatter.xml burada mevcuttur: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

Bunun çoğalmak için yeterli olması gerektiğine inanıyorum.

Aynı konsepte dayalı ilginç bir proje burada bulunur: http://code.google.com/p/maven-java-formatter-plugin/

Teşekkür ederim Misha



1

Ben kullanmayı kullanılan Dr Java ve hızlı bir ctrl o dizim tüm o güzel biçimlendirir + A + tab ile koduna. Mac ve Windows'ta kullandım, linux'u destekleyip desteklemediklerini bilmiyorum. Ve açık kaynak kodlu, bağımsız ve ücretsiz.


Kodun herhangi bir bölümü seçildiğinde sekmeye basmak seçimi biçimlendirecektir. DrJava ayrıca hoş bir interaktif (tercüman gibi) sekme.
dansalmo

0

Ayrıca JRefactory'nin ( http://jrefactory.sourceforge.net/) içine gömülü PrettyPrinter'ı çok kullandım ) . JEdit eklentisi aracılığıyla keşfettim. Şimdiye kadar gördüğüm daha iyi javadoc kapsama alanı olduğu için takdir ettim.

Ne yazık ki ölü görünüyor (2004'ten beri evrim yok) ve aslında Java5'i desteklemiyor.

Bu arada, Triemax'ın ölü açık kaynaklı Jalopy'ye dayalı ticari bir paket olduğunu onaylıyorum.



0

Jalopy, <MyClass> Listeleri gibi İfadeleri ve @ ile başlayan lint açıklamalarını işlemez.

Tüm <MyClass> 'ı LTLTLTMyClassGTGTGT'ye ve ardından @ // @ // @ // @ şeklinde değiştirerek biçimlendirmeye zorlayabildim. O zaman Jalopy yapabildim ve açıkçası her şeyi eskisi gibi değiştirmem gerekiyor.

Ayrıca, <veya> 'i değiştirmeden önce, <= veya> = vb. Gibi karşılaştırmaları değiştirmeyeceğinizden emin olmalısınız.

Öyleyse, buna kötü adam çözümü diyebilirsiniz çünkü birçok manuel adım içerir. Jalopy'yi daha sık yapacak olsaydım, sed kullanarak bu değişiklikleri benim için otomatik olarak yapacak bir komut dosyası yazardım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.