Автономный форматер кода Java / beautifier / pretty printer? [закрытый]

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

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

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

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

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

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

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

Дополнительные Пояснения

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

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

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

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

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

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

9 ответов


JIndent (коммерческий) делает то, что вы хотите:

http://www.jindent.com/

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

http://jalopy.sourceforge.net/

EDIT: я отмечу, что Jalopy довольно старый, и, похоже, нет никаких последних обновлений. Я не совсем уверен, будет ли он работать с Java 5/6. Возможно, вы захотите взглянуть на Jacobe вместо этого:

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

на сайте Roedy Green также есть более полный список форматтеров:

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


вы также можете запустить 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 ... и комментарии lint, начинающиеся с @

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

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

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