Мне интересно узнать о доступных вариантах высококачественных автономных средств форматирования исходного кода для Java.
Модуль форматирования должен быть автономным, то есть он должен поддерживать «пакетный» режим , не связанный с какой-либо конкретной средой разработки . В идеале он также должен быть независимым от какой-либо конкретной операционной системы . Таким образом, встроенный модуль форматирования для IDE du jour здесь не представляет особого интереса (если только эта среда не поддерживает вызов модуля форматирования в пакетном режиме, возможно, из командной строки). Форматировщик, написанный на C / C ++ с закрытым исходным кодом, который работает, скажем, только под Windows, не идеален, но в некоторой степени интересен.
Чтобы было ясно, «средство форматирования» (или «украшение») - это не то же самое, что «средство проверки стиля». Средство форматирования принимает исходный код в качестве входных данных, применяет правила стилизации и создает исходный код со стилями, который семантически эквивалентен исходному исходному коду. Синтаксические модификации ограничиваются такими вещами, как изменение макета кода, например изменение пробелов или упорядочивание import
операторов. Другой рефакторинг, если вообще выполняется, очень мало. Средство проверки стиля также применяет правила стилизации, но просто сообщает о нарушениях правил, не создавая измененный исходный код в качестве вывода. Итак, картина выглядит так:
Formatter (создает измененный исходный код, соответствующий правилам стиля)
Прочитать исходный код → Применить правила стилизации → Написать исходный код со стилями
Средство проверки стиля (не производит модифицированный исходный код)
Прочитать исходный код → Применить правила стилизации → Нарушения правил записи
Дальнейшие пояснения
Решения должны быть легко конфигурируемыми. Я хочу иметь возможность указывать свой собственный стиль, а не просто выбирать его из предустановленного списка.
Кроме того, я не ищу симпатичный принтер общего назначения, написанный на Java, который может печатать многие вещи. Я хочу стилизовать Java-код.
Меня также не обязательно интересует универсальный модуль форматирования для многих языков. Я полагаю, что решение могло бы иметь поддержку других языков, кроме Java, но это не является обязательным требованием.
Кроме того, инструменты , которые только выполняют подсветку кода являются прямо из .
Я тоже не интересуюсь веб-сервисом. Мне нужен инструмент, который можно запускать локально.
Наконец, решения не должны ограничиваться открытым исходным кодом, общественным достоянием, условно-бесплатным программным обеспечением, бесплатным программным обеспечением, коммерческим или чем-либо еще. Допускаются все формы лицензирования .
источник
Ответы:
JIndent (коммерческий) делает то, что вы хотите:
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 из командной строки.
Вот документация Eclipse о функции
Сначала тебе нужно создать файл конфигурации, специфичный для вашего проекта настроек форматирования кода Java.
Затем сохраните
{projectDirectory}/.settings/org.eclipse.jdt.core.prefs
в другое место.Теперь вы вызовете форматтер.
"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"
[ПРЕДУПРЕЖДЕНИЕ] Похоже, это перестало работать в Eclipse 2018. Используйте Eclipse Oxygen.
источник
Jalopy может представлять интерес. Он подключается к 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-файл форматтера с помощью: cat formatter.xml | настройка grep | sed 's / @@'> formatter.asprefs
Спасибо миша
Вот кое-что, что я сделал с помощью jar-файлов 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
Соответствующие jar-файлы в каталоге плагинов берутся непосредственно из каталога плагинов 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/
Спасибо миша
источник
Попробуйте «Украсить код Якоби»:
http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html
Персональная версия бесплатна.
источник
Раньше я использовал Dr. Java для программирования, и с помощью быстрой клавиши ctrl + A + он форматировал все это красиво с подсветкой синтаксиса. Я использовал его на Mac и Windows, не знаю, поддерживают ли они Linux. И это с открытым исходным кодом, автономно и бесплатно.
источник
Я также много использовал PrettyPrinter, встроенный в JRefactory ( http://jrefactory.sourceforge.net/ ). Я обнаружил это через его плагин для JEdit. Я оценил его, так как он имел лучшее покрытие javadoc, которое я когда-либо видел.
К сожалению, он кажется мертвым (без развития с 2004 года), и на самом деле он не поддерживает Java5.
Кстати, я подтверждаю, что Triemax - это коммерческий пакет, основанный на мертвом Jalopy с открытым исходным кодом.
источник
См. Наш Java Formatter для инструмента, который обрабатывает все диалекты Java, включая версию 7.
источник
Jalopy не обрабатывает такие утверждения, как List stuff <MyClass> ... и комментарии, начинающиеся с @
Мне удалось заставить его отформатировать, изменив все <MyClass> на LTLTLTMyClassGTGTGT, а затем @ на // @ // @ // @ (я просто повторяю LT, GT или // @, чтобы убедиться, что они не уже существует.Тогда я смог Jalopy, и, очевидно, я должен все заменить на то, что было.
Кроме того, перед изменением <или> вы должны убедиться, что вы не измените сравнения, такие как <= или> = и т. Д.
Так что вы можете назвать это решение для бедняков, потому что оно включает в себя множество ручных шагов. Если бы мне приходилось чаще выполнять Jalopy, я бы, вероятно, написал сценарий с использованием sed, который автоматически вносил бы эти изменения за меня.
источник