Trình định dạng mã Java độc lập / trình làm đẹp / máy in đẹp? [đóng cửa]


84

Tôi muốn tìm hiểu về các lựa chọn sẵn có của các bộ định dạng mã nguồn độc lập, chất lượng cao cho Java.

Bộ định dạng phải độc lập, nghĩa là nó phải hỗ trợ chế độ "hàng loạt" được tách ra khỏi bất kỳ môi trường phát triển cụ thể nào . Tốt nhất, nó phải độc lập với bất kỳ hệ điều hành cụ thể nào . Vì vậy, một trình định dạng tích hợp cho IDE du jour ít được quan tâm ở đây (trừ khi IDE đó hỗ trợ lệnh gọi định dạng chế độ hàng loạt, có lẽ từ dòng lệnh). Một định dạng được viết bằng C / C ++ mã nguồn đóng chỉ chạy trên Windows không phải là lý tưởng, nhưng có phần thú vị.

Nói rõ hơn, "trình định dạng" (hoặc "trình làm đẹp") không giống như "trình kiểm tra kiểu". Một trình định dạng chấp nhận mã nguồn làm đầu vào, áp dụng quy tắc tạo kiểu và tạo mã nguồn được tạo kiểu tương đương về mặt ngữ nghĩa với mã nguồn ban đầu. Các sửa đổi cú pháp được giới hạn ở những thứ như sửa đổi bố cục mã như thay đổi khoảng trắng hoặc tổ chức các importcâu lệnh. Rất ít, nếu có, việc tái cấu trúc khác được thực hiện. Trình kiểm tra kiểu cũng áp dụng các quy tắc tạo kiểu, nhưng nó chỉ báo cáo các vi phạm quy tắc mà không tạo mã nguồn sửa đổi làm đầu ra. Vì vậy, hình ảnh trông như thế này:

Định dạng (tạo mã nguồn được sửa đổi phù hợp với các quy tắc tạo kiểu)

Đọc mã nguồn → Áp dụng quy tắc tạo kiểu → Viết mã nguồn được tạo kiểu

Trình kiểm tra kiểu (không tạo mã nguồn đã sửa đổi)

Đọc mã nguồn → Áp dụng quy tắc tạo kiểu → Viết vi phạm quy tắc

Nhiều sự sáng tỏ hơn

Các giải pháp phải có cấu hình cao. Tôi muốn có thể chỉ định phong cách của riêng mình, không chỉ đơn giản là chọn từ một danh sách đặt trước.

Ngoài ra, tôi không tìm kiếm một máy in đẹp có mục đích chung được viết bằng Java có thể in được nhiều thứ. Tôi muốn tạo kiểu mã Java.

Tôi cũng không nhất thiết phải quan tâm đến một trình định dạng thống nhất cho nhiều ngôn ngữ. Tôi cho rằng giải pháp có hỗ trợ cho các ngôn ngữ khác ngoài Java có thể tốt, nhưng đó không phải là một yêu cầu.

Hơn nữa, các công cụ chỉ thực hiện đánh dấu mãngay lập tức .

Tôi cũng không quan tâm đến một dịch vụ web. Tôi muốn một công cụ mà tôi có thể chạy cục bộ.

Cuối cùng, các giải pháp không cần bị giới hạn đối với nguồn mở, miền công cộng, phần mềm chia sẻ, phần mềm miễn phí, thương mại hoặc bất kỳ thứ gì khác. Tất cả các hình thức cấp phép đều được chấp nhận .


1
Tôi đã đánh dấu một thứ là Helios độc lập (Eclipse 3.6) chỉ thực hiện định dạng mã. Nó <13 MB, chỉ Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша Кошелев

Câu trả lời:


25

JIndent (Thương mại) làm những gì bạn muốn:

http://www.jindent.com/

Tôi cũng đã sử dụng Jalopy trước đây để làm điều này, nó là mã nguồn mở:

http://jalopy.sourceforge.net/

CHỈNH SỬA: Tôi sẽ lưu ý rằng Jalopy đã khá cũ và dường như không có bất kỳ bản cập nhật nào gần đây cho nó. Tôi không chắc liệu nó có hoạt động với Java 5/6 hay không. Bạn có thể muốn nhìn vào Jacobe thay thế:

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

Ngoài ra còn có một danh sách đầy đủ hơn các bộ định dạng ở đây trên trang web của Roedy Green:

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


: Mối quan hệ giữa các mã nguồn mở Jalopy và một Gì triemax.com/products/jalopy
Greg Mattes

Có vẻ như dự án mã nguồn mở đã chết và họ đã quyết định sử dụng phiên bản thương mại - do Triemax sản xuất. Đã lâu rồi tôi không sử dụng Jalopy, tôi tin là với Ant. Hãy xem Jacobe thay thế.
Jon

Jacobe không được cập nhật cho Java 7 và TIOBE cho biết sẽ không bao giờ có.
Chris Jones

1

14

Bạn cũng có thể chạy trình định dạng lại Eclipse từ dòng lệnh.

Đây là tài liệu Eclipse về tính năng

Trước tiên, bạn phải tạo tệp cấu hình cụ thể cho dự án cài đặt trình định dạng mã Java của bạn.

Sau đó lưu {projectDirectory}/.settings/org.eclipse.jdt.core.prefsvào vị trí khác.

Bây giờ bạn sẽ gọi trình định dạng.

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

[CẢNH BÁO] Điều này dường như đã ngừng hoạt động trong Eclipse 2018. Sử dụng Eclipse Oxygen.


7

Jalopy có thể được quan tâm. Nó sẽ cắm vào Ant và do đó độc lập với IDE của bạn.

Astyle cũng có thể hữu ích. Nó là mã nguồn mở (giống như Jalopy) nhưng được viết bằng C ++. Nó hướng tới định dạng Java / C / C ++ và có thể được điều khiển theo đợt (thông qua các tập lệnh shell hoặc tương tự)


4

CẬP NHẬT: Theo hiểu biết mới của tôi dựa trên báo cáo lỗi không chính xác mà tôi đã gửi: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 Tệp OpenMRSFormatter.xml thực sự phải là tệp tùy chọn chứ không phải XML tập tin.

Bạn có thể tìm thấy một tệp như vậy tại đây: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

hoặc chuyển đổi bất kỳ tệp định dạng đã xuất XML nào bằng: cat formatter.xml | cài đặt grep | sed 's / @@'> formatter.asprefs

Cảm ơn Misha


Đây là thứ mà tôi đã thực hiện bằng cách sử dụng các lọ Eclipse 3.6. Nó chỉ dành cho Java, dòng lệnh và phải tương thích với nhiều nền tảng:

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

Có một tập lệnh shell sử dụng tệp OpenMRSCodeFormatter.xml được đóng gói. Đầu ra mẫu:

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$ 

Điều này dựa trên bài đăng ở đây: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

Vì tôi không biết liên kết sẽ tồn tại trong bao lâu nên tôi sẽ mô tả nội dung bên dưới.

Điều này dựa trên bản phân phối Eclipse 3.6 Helios. Tôi đã sử dụng một cái cho Linux x86, nhưng nó sẽ hoạt động cho bất kỳ phiên bản nào, vì tôi không sử dụng bất kỳ tệp JAR cụ thể nào (theo hiểu biết của tôi).

Nội dung của kho lưu trữ tar là:

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

Các lọ có liên quan trong thư mục plugin được lấy trực tiếp từ thư mục plugin của Eclipse 3.6.

Nội dung của config.ini là:

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 là:

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

và OpenMRSFormatter.xml có sẵn tại đây: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

Tôi tin rằng đó là đủ để tái sản xuất.

Một dự án thú vị dựa trên cùng một khái niệm được tìm thấy tại đây: http://code.google.com/p/maven-java-formatter-plugin/

Cảm ơn Misha



1

Tôi đã từng sử dụng Tiến sĩ Java để viết mã và với một ctrl + A + tab nhanh chóng, nó định dạng tất cả một cách độc đáo với tô sáng cú pháp. Tôi đã sử dụng nó trên Mac và Windows, không biết chúng có hỗ trợ linux hay không. Và nó là mã nguồn mở, độc lập và miễn phí.


Nhấn tab khi bất kỳ phần nào của mã được chọn sẽ định dạng lựa chọn. DrJava cũng là một tab tương tác tốt (giống như trình thông dịch).
dansalmo

0

Tôi cũng đã sử dụng rất nhiều PrettyPrinter được nhúng bên trong JRefactory ( http://jrefactory.sourceforge.net/ ). Tôi đã phát hiện ra nó thông qua plugin của nó cho JEdit. Tôi đánh giá cao nó vì nó có phạm vi bao phủ javadoc tốt hơn mà tôi từng thấy.

Thật không may, nó dường như đã chết (không có sự phát triển nào kể từ năm 2004) và thực sự nó không hỗ trợ Java5.

Nhân tiện, tôi xác nhận rằng Triemax là một bộ thương mại dựa trên mã nguồn mở Jalopy đã chết.


0

Xem Java Formatter của chúng tôi để biết một công cụ xử lý tất cả các phương ngữ của Java, bao gồm cả phiên bản 7.


0

Jalopy không xử lý các Câu lệnh như Nội dung danh sách <MyClass> ... và các nhận xét lint bắt đầu bằng @

Tôi đã có thể buộc nó phải định dạng bằng cách thay đổi tất cả <MyClass> thành LTLTLTMyClassGTGTGT và sau đó @ thành // @ // @ // @ (Tôi chỉ lặp lại LT, GT hoặc // @ để đảm bảo chúng không đã tồn tại. Sau đó, tôi đã có thể Jalopy, và rõ ràng là tôi phải thay thế mọi thứ trở lại như cũ.

Ngoài ra, trước khi thay đổi <hoặc>, bạn phải đảm bảo rằng bạn sẽ không thay đổi các so sánh như <= hoặc> =, v.v.

Vì vậy, bạn có thể gọi đây là giải pháp người nghèo vì nó bao gồm nhiều bước thủ công. Nếu tôi làm Jalopy thường xuyên hơn, có lẽ tôi sẽ viết một kịch bản bằng sed để tự động thực hiện những thay đổi đó cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.