Автономный форматировщик кода Java /beautifier/ довольно принтер?
Мне интересно узнать о доступных вариантах высококачественных автономных форматировщиков исходного кода для Java.
Форматер должен быть автономным, то есть он должен поддерживать "пакетный" режим, который отделен от любой конкретной среды разработки. В идеале он должен быть независимым от какой-либо конкретной операционной системы. Таким образом, встроенный форматер для IDE du jour здесь не представляет большого интереса (если только эта среда не поддерживает вызов форматера в пакетном режиме, возможно, из командной строки). Форматер, написанный на C/C++ с закрытым исходным кодом, который работает только на, скажем, Windows, не идеален, но несколько интересен.
Чтобы было ясно, "форматтер" (или "beautifier") не то же самое, что "проверка стиля". Модуль форматирования принимает исходный код в качестве входных данных, применяет правила стиля и создает стилизованный исходный код, который семантически эквивалентен исходному исходному коду. Синтаксические изменения ограничиваются такими вещами, как изменение макета кода, например, изменение пробелов или организация import
заявления. Очень мало, если таковые имеются, другой рефакторинг выполняется. Средство проверки стиля также применяет правила стиля, но оно просто сообщает о нарушениях правил, не выводя модифицированный исходный код в качестве вывода. Итак, картина выглядит так:
Formatter (создает модифицированный исходный код, соответствующий правилам стиля)
Прочитать Исходный код → Применить правила стиля → Написать стилизованный исходный код
Проверка стиля (не производит измененный исходный код)
Прочитайте Исходный код → Применить правила стиля → Нарушение правил записи
Дальнейшие разъяснения
Решения должны быть легко настраиваемыми. Я хочу иметь возможность указать свой собственный стиль, а не просто выбрать из списка предустановок.
Кроме того, я не ищу симпатичный принтер общего назначения, написанный на Java, который может печатать много вещей. Я хочу стилизовать код Java.
Я также не обязательно интересуюсь великим унифицированным форматером для многих языков. Я полагаю, что для решения было бы неплохо иметь поддержку языков, отличных от Java, но это не является обязательным требованием.
Кроме того, инструменты, которые выполняют только подсветку кода, прямо не нужны.
Я также не заинтересован в веб-сервисе. Я хочу инструмент, который я могу запустить локально.
Наконец, решения не должны ограничиваться открытым исходным кодом, общественным достоянием, условно-бесплатным программным обеспечением, свободным программным обеспечением, коммерческим или чем-либо еще. Все формы лицензирования являются приемлемыми.
9 ответов
JIndent (Commercial) делает то, что вы хотите:
Я также использовал Jalopy в прошлом, чтобы сделать это, это с открытым исходным кодом:
http://jalopy.sourceforge.net/
РЕДАКТИРОВАТЬ: Я отмечу, что Jalopy довольно стар, и, кажется, не было никаких последних обновлений к нему. Я не совсем уверен, будет ли это работать с Java 5/6. Возможно, вы захотите взглянуть на Джейкоба:
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.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
Я смог заставить его отформатировать, изменив все
Кроме того, перед изменением <или> вы должны убедиться, что вы не измените сравнения, такие как <= или>= и т. Д.
Таким образом, вы можете назвать это решением для бедного человека, потому что оно включает в себя множество ручных шагов. Если бы я делал Jalopy чаще, я бы, вероятно, написал сценарий с использованием sed, который бы автоматически вносил эти изменения.
Смотрите наш Java Formatter для инструмента, который обрабатывает все диалекты Java, включая версию 7.
Я также много использовал PrettyPrinter, встроенный в JRefactory ( http://jrefactory.sourceforge.net/). Я обнаружил это через плагин для JEdit. Я оценил это, поскольку у него было лучшее освещение Javadoc, которое я когда-либо видел.
К сожалению, он кажется мертвым (без развития с 2004 года) и на самом деле не поддерживает Java5.
Кстати, я подтверждаю, что Triemax - это коммерческий пакет, основанный на мертвой Jalopy с открытым исходным кодом.