Окремий програму для форматування коду / прикраси / гарненький принтер Java? [зачинено]


84

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

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

Щоб бути зрозумілим, "форматор" (або "прикрасник") - це не те саме, що "перевірка стилю". Форматор приймає вихідний код як вхід, застосовує правила стилізації та створює стилізований вихідний код, який семантично еквівалентний вихідному коду. Синтаксичні модифікації обмежуються такими речами, як зміна макета коду, як, наприклад, при зміні пробілів або організація importоператорів. Іншого рефакторингу проводиться дуже мало, якщо він є. Засіб перевірки стилів також застосовує правила стилізації, але він просто повідомляє про порушення правил, не створюючи модифікований вихідний код як вихід. Тож картина виглядає так:

Formatter (створює змінений вихідний код, який відповідає правилам стилізації)

Прочитайте вихідний код → Застосувати правила стилізації → Написати стилізований вихідний код

Перевірка стилів (не створює змінений вихідний код)

Прочитайте вихідний код → Застосувати правила стилізації → Написати порушення правил

Подальші роз’яснення

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

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

Мене також не обов’язково цікавить уніфікований форматор для багатьох мов. Я вважаю, що для рішення може бути приємно мати підтримку інших мов, крім Java, але це не є вимогою.

Крім того, інструменти , які тільки виконують підсвічування коду є прямо з .

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

Нарешті, рішення не повинні обмежуватися відкритим кодом, загальнодоступним, умовно-безкоштовним, вільним програмним забезпеченням, комерційним продуктом чи будь-чим іншим. Усі форми ліцензування є прийнятними .


1
Я підбив щось, що є автономним Helios (Eclipse 3.6), який виконує лише форматування коду. Це <13 МБ, лише для Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша Кошелев

Відповіді:


25

JIndent (комерційний) робить те, що ви хочете:

http://www.jindent.com/

Раніше я також використовував Jalopy для цього, це відкритий код:

http://jalopy.sourceforge.net/

EDIT: Я зазначу, що Jalopy досить старий, і, схоже, останні оновлення до нього немає. Я не зовсім впевнений, чи буде це працювати з Java 5/6. Можливо, ви захочете подивитися на Якоба:

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

Тут також є більш повний список форматорів тут, на сайті Roedy Green:

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


Який зв’язок між відкритим кодом Jalopy та цим: triemax.com/products/jalopy
Грег Маттес

Схоже, проект з відкритим кодом мертвий, і вони вирішили піти з комерційною версією - виробництва Triemax. Давно я не використовував Jalopy, я вважаю, що це було з Ant. Подивіться натомість Якоба.
Джон

Jacobe не оновлюється для Java 7, і TIOBE каже, що це ніколи не буде.
Кріс Джонс,

1
Існує також формат google-java .
mrts

14

Ви також можете запустити програму переформатування 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.


7

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

Стиль також може бути корисним. Це відкритий код (як Jalopy), але написаний на C ++. Він орієнтований на форматування Java / C / C ++ і може керуватися пакетом (за допомогою скриптів оболонки або подібних)


4

ОНОВЛЕННЯ: Відповідно до мого нового розуміння на основі неправильного звіту про помилки, який я подав: 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. Це лише 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/

Дякую, Миша



1

Раніше я використовував Dr. Java для кодування, і за допомогою швидкої вкладки ctrl + A + це все гарно форматує з підсвічуванням синтаксису. Я використовував його на Mac і Windows, не знаю, чи підтримують вони Linux. І це з відкритим кодом, самостійно та безкоштовно.


Натискання вкладки, коли вибрано будь-яку частину коду, відформатує вибір. DrJava також приємна інтерактивна вкладка (як перекладач).
dansalmo

0

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

На жаль, він здається мертвим (без розвитку з 2004 року), і насправді він не підтримує Java5.

До речі, я підтверджую, що Triemax - це комерційний пакет, заснований на мертвих Jalopy з відкритим кодом.



0

Jalopy не обробляє висловлювання, такі як Список матеріалів <MyClass> ... та коментарі, що починаються з @

Я зміг змусити його форматувати, змінивши всі <MyClass> на LTLTLTMyClassGTGTGT, а потім @ на // @ // @ // @ (я просто повторюю LT, GT або // @, щоб переконатися, що вони цього не роблять). Тоді я зміг отримати Jalopy, і, очевидно, я повинен замінити все назад на те, що було.

Крім того, перед зміною <або> вам потрібно переконатися, що ви не зміните порівняння, наприклад <= або> = тощо.

Отже, ви можете назвати це рішення для бідної людини, оскільки воно передбачає багато ручних кроків. Якби я частіше робив Jalopy, я, напевно, писав би скрипт, використовуючи sed, який би автоматично вносив ці зміни для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.