ตัวจัดรูปแบบโค้ด Java แบบสแตนด์อโลน / เครื่องตกแต่ง / เครื่องพิมพ์สวย? [ปิด]


85

ฉันสนใจที่จะเรียนรู้เกี่ยวกับตัวเลือกของรูปแบบซอร์สโค้ดแบบสแตนด์อโลนคุณภาพสูงสำหรับ Java

formatter ที่จะต้องยืนอยู่คนเดียวนั่นคือมันจะต้องสนับสนุนโหมด "แบทช์"ที่หลุดพ้นจากสภาพแวดล้อมการพัฒนาใด ๆ โดยเฉพาะอย่างยิ่ง ตามหลักการแล้วควรเป็นอิสระจากระบบปฏิบัติการใดระบบหนึ่งด้วย ดังนั้นฟอร์แมตเตอร์ในตัวสำหรับ IDE du jour จึงไม่ค่อยน่าสนใจที่นี่ (เว้นแต่ว่า IDE จะรองรับการเรียกใช้ฟอร์แมตเตอร์โหมดแบทช์บางทีอาจมาจากบรรทัดคำสั่ง) ฟอร์แมตเตอร์ที่เขียนด้วย C / C ++ แบบปิดที่ทำงานบนเท่านั้นกล่าวได้ว่า Windows ไม่เหมาะ แต่ค่อนข้างน่าสนใจ

เพื่อความชัดเจน "ตัวจัดรูปแบบ" (หรือ "เครื่องตกแต่ง") ไม่เหมือนกับ "ตัวตรวจสอบสไตล์" ฟอร์แมตเตอร์ยอมรับซอร์สโค้ดเป็นอินพุตใช้กฎการจัดรูปแบบและสร้างซอร์สโค้ดสไตล์ที่มีความหมายเทียบเท่ากับซอร์สโค้ดดั้งเดิม การปรับเปลี่ยนไวยากรณ์จะ จำกัด เฉพาะสิ่งต่างๆเช่นการแก้ไขเลย์เอาต์โค้ดเช่นเดียวกับการเปลี่ยนช่องว่างหรือการจัดระเบียบimportงบ การปรับโครงสร้างใหม่อื่น ๆ น้อยมากถ้ามี ตัวตรวจสอบสไตล์ยังใช้กฎการจัดรูปแบบ แต่เพียงแค่รายงานการละเมิดกฎโดยไม่ต้องสร้างซอร์สโค้ดที่แก้ไขเป็นเอาต์พุต ดังนั้นภาพจึงเป็นดังนี้:

ฟอร์แมตเตอร์ (สร้างซอร์สโค้ดที่แก้ไขซึ่งสอดคล้องกับกฎการจัดรูปแบบ)

อ่านซอร์สโค้ด→ใช้กฎสไตล์→เขียนซอร์สโค้ดที่มีสไตล์

Style Checker (ไม่สร้างซอร์สโค้ดที่แก้ไข)

อ่านซอร์สโค้ด→ใช้กฎการจัดแต่งทรงผม→เขียนการละเมิดกฎ

คำชี้แจงเพิ่มเติม

โซลูชันต้องกำหนดค่าได้สูง ฉันต้องการระบุสไตล์ของตัวเองไม่ใช่แค่เลือกจากรายการที่ตั้งไว้ล่วงหน้า

นอกจากนี้ฉันไม่ได้มองหาเครื่องพิมพ์สวย ๆ ทั่วไปที่เขียนด้วย Javaที่สามารถพิมพ์ได้หลายอย่าง ฉันต้องการจัดรูปแบบโค้ด Java

ฉันไม่จำเป็นต้องสนใจฟอร์แมตเตอร์ที่รวมเป็นหนึ่งเดียวสำหรับหลายภาษา ฉันคิดว่ามันอาจจะดีสำหรับโซลูชันที่รองรับภาษาอื่นที่ไม่ใช่ Java แต่นั่นไม่ใช่ข้อกำหนด

นอกจากนี้เครื่องมือที่เพียงดำเนินการเน้นรหัสมีสิทธิ ออก

ฉันไม่สนใจบริการเว็บด้วย ฉันต้องการเครื่องมือที่สามารถเรียกใช้ในเครื่องได้

สุดท้ายโซลูชันไม่จำเป็นต้อง จำกัด เฉพาะโอเพนซอร์สโดเมนสาธารณะแชร์แวร์ซอฟต์แวร์ฟรีเชิงพาณิชย์หรือสิ่งอื่นใด ทุกรูปแบบของการออกใบอนุญาตเป็นที่ยอมรับ


1
ฉันแส้อะไรบางอย่างที่เป็น Helios แบบสแตนด์อโลน (Eclipse 3.6) ที่จัดรูปแบบโค้ดเท่านั้น มีขนาด <13 MB, Java เท่านั้น openmrs-mailing-list-archives.1560443.n2.nabble.com/…
МишаКошелев

คำตอบ:


25

JIndent (Commercial) ทำสิ่งที่คุณต้องการ:

http://www.jindent.com/

ฉันเคยใช้ Jalopy ในอดีตเพื่อทำสิ่งนี้เป็นโอเพ่นซอร์ส:

http://jalopy.sourceforge.net/

แก้ไข: ฉันจะทราบว่า Jalopy ค่อนข้างเก่าและดูเหมือนจะไม่มีการอัปเดตล่าสุดใด ๆ ฉันไม่ค่อยแน่ใจว่ามันจะทำงานกับ Java 5/6 ได้หรือไม่ คุณอาจต้องการดู Jacobe แทน:

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

นอกจากนี้ยังมีรายการรูปแบบที่สมบูรณ์มากขึ้นที่นี่ในเว็บไซต์ของ Roedy Green:

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


อะไรคือความสัมพันธ์ระหว่างโอเพ่นซอร์ส Jalopy กับอันนี้: triemax.com/products/jalopy
Greg Mattes

ดูเหมือนว่าโครงการโอเพนซอร์สจะตายไปแล้วและพวกเขาตัดสินใจที่จะใช้เวอร์ชันเชิงพาณิชย์ที่ผลิตโดย Triemax เป็นเวลานานแล้วที่ฉันใช้ Jalopy ฉันเชื่อว่ามันใช้กับ Ant ลองดูที่ Jacobe แทน
จอน

Jacobe ไม่ได้รับการอัปเดตสำหรับ Java 7 และ TIOBE บอกว่าจะไม่เป็นเช่นนั้น
Chris Jones

1
นอกจากนี้ยังมีgoogle-Java รูปแบบ
mrts

14

คุณยังสามารถรัน Eclipse ฟอร์แมตเตอร์จากบรรทัดคำสั่ง

นี่คือเอกสาร Eclipse ของคุณลักษณะ

ก่อนอื่นคุณต้องสร้างไฟล์คอนฟิกูเรชันเฉพาะสำหรับโปรเจ็กต์ของการตั้งค่าตัวจัดรูปแบบโค้ด Java ของคุณ

จากนั้นบันทึก{projectDirectory}/.settings/org.eclipse.jdt.core.prefsไปยังตำแหน่งอื่น

ตอนนี้คุณจะเรียกฟอร์แมตเตอร์

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

[คำเตือน] ดูเหมือนว่าจะหยุดทำงานใน Eclipse 2018 ให้ใช้ Eclipse Oxygen


7

Jalopyอาจเป็นที่สนใจ มันจะเสียบเข้ากับ Ant ดังนั้นจึงไม่ขึ้นกับ IDE ของคุณ

Astyleอาจมีประโยชน์เช่นกัน เป็นโอเพนซอร์ส (เช่น Jalopy) แต่เขียนด้วย C ++ มุ่งเน้นไปที่การจัดรูปแบบ Java / C / C ++ และสามารถขับเคลื่อนแบบแบตช์ (ผ่านเชลล์สคริปต์หรือที่คล้ายกัน)


4

อัปเดต: ตามความเข้าใจใหม่ของฉันตามรายงานข้อบกพร่องที่ไม่ถูกต้องที่ฉันยื่น: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 ไฟล์ OpenMRSFormatter.xml จริง ๆ แล้วต้องเป็นไฟล์การตั้งค่าไม่ใช่ XML ไฟล์.

คุณสามารถค้นหาไฟล์ดังกล่าวได้ที่นี่: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

หรือแปลงไฟล์ฟอร์แมตเตอร์ที่เอ็กซ์พอร์ต XML ด้วย: cat formatter.xml | การตั้งค่า grep | sed 's / @@'> formatter.asprefs

ขอบคุณมิชา


นี่คือบางสิ่งที่ฉันสร้างโดยใช้ Eclipse 3.6 ขวด เป็น Java เท่านั้นบรรทัดคำสั่งและควรเข้ากันได้กับข้ามแพลตฟอร์ม:

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

มีเชลล์สคริปต์ที่ใช้ไฟล์ OpenMRSCodeFormatter.xml ที่รวมอยู่ ผลลัพธ์ตัวอย่าง:

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$ 

อ้างอิงจากโพสต์ที่นี่: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

เนื่องจากฉันไม่รู้ว่าลิงก์จะอยู่ได้นานแค่ไหนฉันจะอธิบายเนื้อหาด้านล่างนี้

สิ่งนี้อ้างอิงจากการแจกแจงของ Eclipse 3.6 Helios ฉันใช้หนึ่งสำหรับ Linux x86 แต่ควรใช้กับเวอร์ชันใดก็ได้เนื่องจากฉันไม่ได้ใช้ไฟล์ JAR เฉพาะแพลตฟอร์ม (ตามความรู้ของฉัน)

เนื้อหาของไฟล์เก็บถาวร tar คือ:

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

jars ที่เกี่ยวข้องในไดเร็กทอรีปลั๊กอินถูกนำมาจากไดเร็กทอรีปลั๊กอิน Eclipse 3.6 โดยตรง

เนื้อหาของ config.ini ได้แก่ :

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 คือ:

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

และ OpenMRSFormatter.xml ได้ที่นี่: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

ฉันเชื่อว่าน่าจะเพียงพอสำหรับการสืบพันธุ์

พบโครงการที่น่าสนใจตามแนวคิดเดียวกันได้ที่นี่: http://code.google.com/p/maven-java-formatter-plugin/

ขอบคุณมิชา



1

ฉันเคยใช้ดร . ฉันใช้มันบน Mac และ Windows ไม่รู้ว่าพวกเขารองรับ linux หรือไม่ และเป็นโอเพนซอร์สแบบสแตนด์อโลนและฟรี


การกดแถบเมื่อเลือกส่วนใดส่วนหนึ่งของรหัสจะเป็นการจัดรูปแบบการเลือก DrJava ยังเป็นแท็บแบบโต้ตอบที่ดี (ชอบล่าม)
dansalmo

0

ฉันยังใช้ PrettyPrinter จำนวนมากที่ฝังอยู่ใน JRefactory ( http://jrefactory.sourceforge.net/ ) ฉันค้นพบผ่านปลั๊กอินสำหรับ JEdit ฉันชื่นชมมันเพราะมันมีการครอบคลุม javadoc ที่ดีกว่าที่ฉันเคยเห็น

น่าเสียดายที่ดูเหมือนจะตายไปแล้ว (ไม่มีวิวัฒนาการตั้งแต่ปี 2004) และจริงๆแล้วมันไม่รองรับ Java5

ฉันยืนยันว่า Triemax เป็นชุดเชิงพาณิชย์ที่ใช้ Jalopy โอเพนซอร์สที่ตายแล้ว



0

Jalopy ไม่จัดการคำสั่งเช่น List stuff <MyClass> ... และความคิดเห็นที่ขึ้นต้นด้วย @

ฉันสามารถบังคับให้ฟอร์แมตได้โดยเปลี่ยน <MyClass> ทั้งหมดเป็น LTLTLTMyClassGTGTGT แล้ว @ เป็น // @ // @ // @ (ฉันแค่ทำซ้ำ LT, GT หรือ // @ เพื่อให้แน่ใจว่าไม่มี มีอยู่แล้วจากนั้นฉันก็สามารถ Jalopy ได้และเห็นได้ชัดว่าฉันต้องเปลี่ยนทุกอย่างกลับไปเป็นอย่างที่เป็นอยู่

นอกจากนี้ก่อนที่จะเปลี่ยน <หรือ> คุณต้องแน่ใจว่าคุณจะไม่เปลี่ยนการเปรียบเทียบเช่น <= หรือ> = เป็นต้น

ดังนั้นคุณอาจเรียกสิ่งนี้ว่าวิธีแก้ปัญหาคนจนเพราะเกี่ยวข้องกับขั้นตอนหลายขั้นตอนด้วยตนเอง ถ้าฉันทำ Jalopy บ่อยขึ้นฉันอาจจะเขียนสคริปต์โดยใช้ sed ที่จะทำการเปลี่ยนแปลงให้ฉันโดยอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.