Автономный форматировщик кода Java /beautifier/ довольно принтер?

Мне интересно узнать о доступных вариантах высококачественных автономных форматировщиков исходного кода для Java.

Форматер должен быть автономным, то есть он должен поддерживать "пакетный" режим, который отделен от любой конкретной среды разработки. В идеале он должен быть независимым от какой-либо конкретной операционной системы. Таким образом, встроенный форматер для IDE du jour здесь не представляет большого интереса (если только эта среда не поддерживает вызов форматера в пакетном режиме, возможно, из командной строки). Форматер, написанный на C/C++ с закрытым исходным кодом, который работает только на, скажем, Windows, не идеален, но несколько интересен.

Чтобы было ясно, "форматтер" (или "beautifier") не то же самое, что "проверка стиля". Модуль форматирования принимает исходный код в качестве входных данных, применяет правила стиля и создает стилизованный исходный код, который семантически эквивалентен исходному исходному коду. Синтаксические изменения ограничиваются такими вещами, как изменение макета кода, например, изменение пробелов или организация import заявления. Очень мало, если таковые имеются, другой рефакторинг выполняется. Средство проверки стиля также применяет правила стиля, но оно просто сообщает о нарушениях правил, не выводя модифицированный исходный код в качестве вывода. Итак, картина выглядит так:

Formatter (создает модифицированный исходный код, соответствующий правилам стиля)

Прочитать Исходный код → Применить правила стиля → Написать стилизованный исходный код

Проверка стиля (не производит измененный исходный код)

Прочитайте Исходный код → Применить правила стиля → Нарушение правил записи

Дальнейшие разъяснения

Решения должны быть легко настраиваемыми. Я хочу иметь возможность указать свой собственный стиль, а не просто выбрать из списка предустановок.

Кроме того, я не ищу симпатичный принтер общего назначения, написанный на Java, который может печатать много вещей. Я хочу стилизовать код Java.

Я также не обязательно интересуюсь великим унифицированным форматером для многих языков. Я полагаю, что для решения было бы неплохо иметь поддержку языков, отличных от Java, но это не является обязательным требованием.

Кроме того, инструменты, которые выполняют только подсветку кода, прямо не нужны.

Я также не заинтересован в веб-сервисе. Я хочу инструмент, который я могу запустить локально.

Наконец, решения не должны ограничиваться открытым исходным кодом, общественным достоянием, условно-бесплатным программным обеспечением, свободным программным обеспечением, коммерческим или чем-либо еще. Все формы лицензирования являются приемлемыми.

9 ответов

Решение

JIndent (Commercial) делает то, что вы хотите:

http://www.jindent.com/

Я также использовал Jalopy в прошлом, чтобы сделать это, это с открытым исходным кодом:

http://jalopy.sourceforge.net/

РЕДАКТИРОВАТЬ: Я отмечу, что Jalopy довольно стар, и, кажется, не было никаких последних обновлений к нему. Я не совсем уверен, будет ли это работать с Java 5/6. Возможно, вы захотите взглянуть на Джейкоба:

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

Также на сайте Роди Грина есть более полный список форматеров:

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

Вы также можете запустить переформатирование Eclipse из командной строки. Проверьте эту запись в блоге

Jalopy может представлять интерес. Он подключится к Ant и, следовательно, не зависит от вашей IDE.

Астиль также может быть полезным. Это открытый исходный код (например, Jalopy), но написанный на C++. Он ориентирован на форматирование Java/C/C++ и может управляться пакетно (через сценарии оболочки или аналогичные)

ОБНОВЛЕНИЕ: в соответствии с моим новым пониманием, основанным на неверном отчете об ошибке, который я подал: 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 jars. Это только 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

Соответствующие файлы в каталоге плагинов взяты непосредственно из каталога плагинов 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/

Спасибо миша

Раньше я использовал Dr.Web для кодирования, и с помощью быстрой вкладки ctrl+A + он прекрасно форматировал все с подсветкой синтаксиса. Я использовал его на Mac и Windows, не знаю, поддерживают ли они Linux. И это с открытым исходным кодом, самостоятельно и бесплатно.

Попробуйте "Jacob Code Beautifier":

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

Персональное издание бесплатно.

Jalopy не обрабатывает операторы типа List... и комментарии, начинающиеся с @

Я смог заставить его отформатировать, изменив все на LTLTLTMyClassGTGTGT, а затем @ в //@//@//@ (я просто повторяю LT, GT или // @, чтобы убедиться, что они не делают Уже существует. Тогда я смог Jalopy, и, очевидно, я должен заменить все обратно на то, что было.

Кроме того, перед изменением <или> вы должны убедиться, что вы не измените сравнения, такие как <= или>= и т. Д.

Таким образом, вы можете назвать это решением для бедного человека, потому что оно включает в себя множество ручных шагов. Если бы я делал Jalopy чаще, я бы, вероятно, написал сценарий с использованием sed, который бы автоматически вносил эти изменения.

Смотрите наш Java Formatter для инструмента, который обрабатывает все диалекты Java, включая версию 7.

Я также много использовал PrettyPrinter, встроенный в JRefactory ( http://jrefactory.sourceforge.net/). Я обнаружил это через плагин для JEdit. Я оценил это, поскольку у него было лучшее освещение Javadoc, которое я когда-либо видел.

К сожалению, он кажется мертвым (без развития с 2004 года) и на самом деле не поддерживает Java5.

Кстати, я подтверждаю, что Triemax - это коммерческий пакет, основанный на мертвой Jalopy с открытым исходным кодом.

Другие вопросы по тегам