Автономный форматер кода Java / beautifier / pretty printer? [закрытый]
Мне интересно узнать о доступных вариантах высококачественные автономные форматеры исходного кода для Java.
форматер должен быть автономным, то есть он должен поддерживать "пакетном" режиме что это отделен от любой конкретной среды разработки. В идеале это должно быть независимо от любой конкретной операционной системы как хорошо. Таким образом, встроенный форматер для IDE du jour имеет небольшой интерес здесь (Если эта IDE не поддерживает вызов форматирования пакетного режима, возможно, из командной строки). Форматер, написанный на C/C++ с закрытым исходным кодом, который работает, скажем, только на Windows, не идеален, но несколько интересен.
чтобы быть ясным," форматирование "(или" beautifier") - это не то же самое, что "проверка стиля"." форматер принимает исходный код в качестве входных данных, применяет правила стиля и создает стилизованный исходный код, семантически эквивалентный исходному источнику код. Синтаксические модификации ограничены такими вещами, как изменение макета кода, как изменение пробелов или организация import заявления. Очень мало, если таковые имеются, проводится другой рефакторинг. Проверка стиля также применяет правила стиля, но это просто отчеты нарушение правил без создания измененного исходного кода как выходной. Так что картинка выглядит так:
форматер (производит измененный исходный код, соответствующий стилю правила)
Прочитать Исходный Код → Применить Правила Стиля → Написать Стилизованный Исходный Код
Стиль Проверки (не производит измененный исходный код)
Прочитать Исходный Код → Применить Правила Стиля → Написать Нарушения Правил
Дополнительные Пояснения
решения должны быть настраиваемыми. Я хочу иметь возможность указать свой собственный стиль, а не просто выбрать из списка предустановленных.
кроме того, я не глядя для общего назначения довольно-принтер, написанный на Java это может довольно много печатать. Я хочу создать Java-код.
Я тоже не обязательно интересует grand-unified formatter для многих языков. Я полагаю, что было бы неплохо для решения иметь поддержку языков, отличных от Java, но это не является требованием.
кроме того, инструменты, которые выполняют только код выделение are право из.
Я тоже не интересует веб-сервис. мне нужен инструмент, который я могу запустить локально.
наконец, решения не должны ограничиваться открытым исходным кодом, общественным достоянием, условно-бесплатным программным обеспечением, коммерческим или чем-либо еще. все формы лицензирования приемлемы.
9 ответов
JIndent (коммерческий) делает то, что вы хотите:
Я также использовал Jalopy в прошлом, чтобы сделать это, это с открытым исходным кодом:
http://jalopy.sourceforge.net/
EDIT: я отмечу, что Jalopy довольно старый, и, похоже, нет никаких последних обновлений. Я не совсем уверен, будет ли он работать с Java 5/6. Возможно, вы захотите взглянуть на Jacobe вместо этого:
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
на сайте Roedy Green также есть более полный список форматтеров:
вы также можете запустить Eclipse reformatter из командной строки. Проверьте запись в блоге
драндулет может быть интересна. Он будет подключаться к Ant и, таким образом, не зависит от вашей IDE.
Astyle также может быть полезно. Это открытый исходный код (например, 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 экспортированный файл форматирования с: кошачий форматер.в XML | грэп параметр | е с/@@' > форматер.asprefs
спасибо Миша!--9-->
вот что я сделал, используя банки 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
соответствующие банки в каталоге плагинов берутся непосредственно из каталога плагинов Eclipse 3.6.
содержимое конфига.Ини являются:
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/
спасибо Миша!--9-->
Попробуйте "Jacobe Code Beautifier":
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
личное издание является бесплатным.
Я использовал Доктор Ява для кода и с помощью быстрого ctrl + a + tab он форматирует все это красиво с подсветкой синтаксиса. Ive использовал его на Mac и Windows, не знаю, поддерживают ли они linux. И это открытый исходный код, автономный и свободный.
Я также много использовал PrettyPrinter, встроенный в JRefactory (http://jrefactory.sourceforge.net/). Я обнаружил это через плагин для JEdit. Я оценил это, так как у него было лучшее освещение javadoc, которое я когда-либо видел.
к сожалению, он кажется мертвым (без эволюции с 2004 года), и на самом деле он не поддерживает Java5.
кстати я подтверждаю, что Triemax является коммерческой люкс на основе мертвого открытых источников драндулет.
смотреть Форматирование Java для инструмента, который обрабатывает все диалекты Java, включая версию 7.
Jalopy не обрабатывает операторы, такие как List stuff
Я смог заставить его форматировать, изменив все
кроме того, перед изменением вы должны убедиться, что вы не будете меняться сравнивает как = etc.
таким образом, вы можете назвать это решение бедным человеком, потому что оно включает в себя много ручных шагов. Если бы я делал Jalopy чаще, я бы, вероятно, написал сценарий с использованием sed, который сделал бы эти изменения автоматически для меня.