Câu hỏi Trình định dạng mã Java độc lập / máy làm đẹp / máy in đẹp? [đã đóng]


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

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

Để rõ ràng, "trình định dạng" (hoặc "trình làm đẹp") không giống với "trình kiểm tra kiểu". Trình định dạng chấp nhận mã nguồn làm đầu vào, áp dụng các quy tắc tạo kiểu và tạo mã nguồn theo kiểu tương đương 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ư trong việc thay đổi khoảng trắng hoặc tổ chức import các câ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ó đơn giản báo cáo vi phạm quy tắc mà không tạo mã nguồn được sửa đổi như đầu ra. Vì vậy, hình ảnh trông như thế này:

Trình đị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 theo kiểu

Trình kiểm tra kiểu (không tạo mã nguồn được 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ể xác định phong cách của riêng tôi, không chỉ đơn giản là chọn từ một danh sách định sẵn.

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

tôi cũng không phải nhất thiết quan tâm đến một NULL cho nhiều ngôn ngữ. Tôi cho rằng nó có thể là tốt đẹp cho một giải pháp để có hỗ trợ cho các ngôn ngữ khác ngoài Java, 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ã là đúng  ngoài.

tôi cũng không quan tâm đến 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 phải bị hạn chế đố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.


76
2018-06-15 15:07


gốc


cộng đồng wiki? - skaffman
Tôi whipped một cái gì đó lên đó là một Helios độc lập (Eclipse 3.6) mà chỉ có định dạng mã. Nó là <13 MB, chỉ Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/… - Миша Кошелев


Các câu trả lời:


JIndent (Commercial) làm những gì bạn muốn:

http://www.jindent.com/

Tôi cũng đã sử dụng Jalopy trong quá khứ để làm điều này, nó là mã nguồn mở:

http://jalopy.sourceforge.net/

EDIT: Tôi sẽ lưu ý rằng Jalopy là khá cũ và dường như không có bất kỳ cập nhật gần đây cho nó. Tôi không hoàn toàn chắc chắn nếu nó sẽ làm việc với Java 5/6. Thay vào đó, bạn có thể muốn xem Jacobe:

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 về các trình định dạng tại đây trên trang web của Roedy Green:

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


25
2018-06-15 15:11



Mối quan hệ giữa Jalopy nguồn mở và mối quan hệ này là gì: triemax.com/products/jalopy - Greg Mattes
Dường như dự án nguồn mở đã chết và họ đã quyết định đi với một phiên bản thương mại - được sản xuất bởi Triemax. Đã lâu rồi kể từ khi tôi sử dụng Jalopy, tôi tin rằng đó là với Ant. Thay vào đó hãy xem Jacobe. - Jon
Jacobe không được cập nhật cho Java 7, và TIOBE nói rằng nó sẽ không bao giờ được. - Chris Jones
Cũng có định dạng google-java. - mrts


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


14
2017-07-16 14:36





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.

Một phong cách cũng có thể hữu ích. Đó là mã nguồn mở (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 định hướng theo lô (thông qua các kịch bản lệnh shell hoặc tương tự)


6
2018-06-15 15:12



bỏ phiếu cho Astyle - Daniel Grillo
Downvoted tại sao? - Brian Agnew


CẬP NHẬT: Theo hiểu biết mới của tôi dựa trên sai báo cáo lỗi 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 tệp XML.

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

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

Cảm ơn bạn Misha


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

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

Có một kịch bản lệnh shell sử dụng tệp OpenMRSCodeFormatter.xml đi kèm. Đầ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 được 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ẽ ở lại bao lâu, tôi sẽ mô tả các nội dung bên dưới.

Điều này dựa trên phân phối Eclipse 3.6 Helios. Tôi đã sử dụng một cho Linux x86, nhưng nó sẽ làm việc 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 (cho kiến ​​thức của tôi) nền tảng của mình.

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ọ liên quan trong thư mục plugins được lấy trực tiếp từ thư mục plugins 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 ở đây: http://code.google.com/p/maven-java-formatter-plugin/

Cảm ơn bạn Misha


4
2017-09-12 18:20





Hãy thử "Jacobe Code Beautifier":

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

Phiên bản cá nhân miễn phí.


1
2017-08-06 21:43





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


1
2018-06-15 15:15



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ư thông dịch viên). - dansalmo


Tôi cũng sử dụng rất nhiều PrettyPrinter 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ó độ bao phủ javadoc tốt hơn mà tôi từng thấy.

Thật không may nó có vẻ đã chết (không có sự tiến hóa từ năm 2004) và thực sự nó không hỗ trợ Java5.

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


0
2018-06-15 20:01