Как да изключа форматирането на Eclipse код за определени раздели на Java кода?

Имам Java код с SQL изрази, написани като низове на Java (моля, без OR / M flamewars, вграденият SQL е това, което е, а не моето решение).

Разделих SQL запитванията семантично на няколко свързани линии в няколко реда код за по-лесна поддръжка. Следователно, вместо нещо като:

 String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4"; 

Имам нещо като:

 String query = "SELECT FOO, BAR, BAZ" + " FROM ABC " + " WHERE BAR > 4 "; 

Този стил улеснява четенето и поддържането на SQL (IMHO), особено за големи заявки. Например, мога да поставя моя редактор в режим "overwrite" и лесно да променя текста.

Имайте предвид, че този проблем е обобщен извън конкретния пример на SQL. Всеки код, написан с всяко вертикално форматиране, особено в таблични конструкции, подлежи на унищожаване от красив принтер.

Сега някои членове на проекта използват редактора Eclipse, а семантичното форматиране често се унищожава, когато форматират целия изходен файл.

Има ли начин да се инструктира Eclipse да игнорира някои низове за форматиране?

Търся нещо като специален коментар, който превключва формата на Eclipse. В идеалния случай, такъв коментар може да бъде конфигуриран като това, което избираме, а други формати могат да бъдат програмирани по същия начин, както:

 // STOP-ECLIPSE-FORMATTING String query = "SELECT FOO, BAR, BAZ" + " FROM ABC " + " WHERE BAR > 4 "; // START-ECLIPSE-FORMATTING 

Очевидно е, че едно „решение“ е членовете на екипа ни да стандартизират някакъв вид външно форматиране, като например Jalopy или JIndent , но това не е въпросът за този въпрос (а не и моето решение по този проект): специално търся начин да избегнете форматирането на Eclipse ad-hoc.

В идеалния случай, решението ще ми позволи да вмъкна инструкции за форматиране на Eclipse , без да се изисква от членовете на екипа да използват Eclipse, за да направят каквато и да е реконфигурация на IDE (с изключение, евентуално, избор на formatter командата за форматиране: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING ).

437
30 нояб. даден от Грег Матс 30 ноември. 2009-11-30 19:38 '09 в 19:38 2009-11-30 19:38
@ 12 отговора

Eclipse 3.6 ви позволява да деактивирате форматирането чрез публикуване на специален коментар, например

 // @formatter:off ... // @formatter:on 

Функциите за включване / изключване трябва да бъдат включени в настройките на Eclipse: Java > Стил на стила > Форматиране . Кликнете върху Редактиране , Изкл. / Вкл. Маркери , активирайте Разреши етикетите Изкл. / Вкл .

Също така е възможно да промените магическите линии в настройките - вижте тук документите Eclipse 3.6 .

Допълнителна информация

Java > Стил на кодовете > Форматиране > Редактиране > Изкл. / Откл

Това предпочитание ви позволява да дефинирате един маркер, който да деактивирате, и един маркер, за да активирате форматирането (вж. Раздела „Изключено / включено в етикетите“ в профила си за форматиране):

2019

786
28 июля '10 в 17:17 2010-07-28 17:17 отговорът е даден xpmatteo 28 юли '10 в 17:17 2010-07-28 17:17

AFAIK от Eclipse 3.5 M4 за форматиране има опцията "Never Join Lines", която запазва почивките на потребителските линии. Може би прави това, което искате.

В противен случай има тази грозна рязка рана

border=0
 String query = // "SELECT FOO, BAR, BAZ" + // " FROM ABC" + // " WHERE BAR > 4"; 
57
30 нояб. Отговорът е даден от трептене на 30 ноември 2009-11-30 19:48 '09 в 19:48 2009-11-30 19:48

Вместо да забраните форматирането, можете да го конфигурирате да не добавя вече опаковани низове. Подобно на отговора на Jitter, тук за Eclipse STS:

Свойства → Стил на Java кода → Форматиране → Активиране на специални настройки на проекта ИЛИ Конфигуриране на настройки на работното пространство → Редактиране → Линейно опаковане (таб) → поставете отметка в квадратчето „Никога не прикачвайте вече опаковани линии“.

Запази, приложи.

2019

22
31 июля '14 в 17:30 2014-07-31 17:30 отговорът е даден ilinca 31 юли 14 в 17:30 часа 2014-07-31 17:30

Вижте този отговор за SO .

Има и друго решение, което може да се използва за потискане на форматирането на отделни коментари в блока. Използвайте

Източник: Oracle Documentation .

18
11 апр. Отговор, даден от Renaud на 11 април 2014-04-11 18:01 '14 в 18:01 2014-04-11 18:01

Трябва да активирате възможността за добавяне на маркери за форматиране. В лентата с менюта:

Windows Предпочитания Java Стил на кода Форматиране

Кликнете върху бутона Редактиране . Изберете последния раздел. Забележете полето "Вкл. / Изкл.". Включете ги и използвайте отметката.

16
17 авг. Отговорът е даден ZilWerks 17 август. 2011-08-17 21:06 '11 в 21:06 2011-08-17 21:06

Ако поставите знак плюс в началото на ред, той го форматира по различни начини:

 String query = "SELECT FOO, BAR, BAZ" + " FROM ABC" + " WHERE BAR > 4"; 
14
30 нояб. Отговор, даден от CPerkins 30 ноември 2009-11-30 19:50 '09 в 19:50 2009-11-30 19:50

Край на всеки ред с двойна наклонена черта "//". Това би предизвикало затъмнение, което да ги премести в един ред.

5
23 июля '16 в 5:12 2016-07-23 05:12 отговорът се дава на Евво на 23 юли '16 в 5:12 2016-07-23 05:12

Използвам низове с фиксирана ширина (подплатени с интервали), за да избегна форматиране, което възпрепятстваше вмъкването на SQL низове. Това ви дава смесени резултати и няма да работи, когато интервалите не се игнорират, както в SQL, но могат да бъдат полезни.

  final String sql = "SELECT v.value FROM properties p " + "JOIN property_values v ON p.property_id = v.property_id " + "WHERE p.product_id = ? " + "AND v.value IS NOT NULL "; 
5
16 июля '10 в 14:17 2010-07-16 14:17 Отговор е даден от Гус на 16 юли 2007 г. в 14:17 2010-07-16 14:17

@xpmatteo има отговор за изключване на части от кода, но в допълнение към това параметрите по подразбиране трябва да бъдат конфигурирани само за форматиране на редактираните линии на кода, а не за целия файл.

 Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines 

Това би предотвратило това на първо място, тъй като вашите колеги преформатират кода, който в действителност не са се променили. Това е добра практика за предотвратяване на неизправности, които правят разликите безполезни за вашия източник (когато целият файл е преформатиран поради малки разлики в настройките на формата).

Това също ще предотврати преформатирането, ако опцията за включване / изключване е деактивирана.

4
15 авг. отговорът се дава на Робин 15 август. 2012-08-15 18:02 '12 в 18:02 2012-08-15 18:02

Алтернативен метод: в Eclipse 3.6 в секцията “Linear Packing”, след това “General Settings” има опция “Никога не се присъединявайте вече навити линии”. Това означава, че форматиращото устройство ще увива дългите линии, но не отменя опаковките, които вече имате.

4
16 апр. отговорът е даден kmccoy 16 април . 2011-04-16 20:10 '11 в 20:10 2011-04-16 20:10

Фантомните коментари добавят // където искате нови линии са страхотни!

  1. @Formatter: off добавя връзка от кода към редактора. Според мен кодексът никога не трябва да има такива връзки.

  2. Phantom comments (//) ще работят независимо от използвания инструмент за форматиране. Независимо от Eclipse или InteliJ или друг редактор, който използвате. Той дори работи с много хубав формат на Google Java.

  3. Phantom коментарите (//) ще работят в цялата заявка. Ако имате Javascript и може би използвате нещо като JSBeautifier . Подобен стил на код може да се използва и в Javascript.

  4. Всъщност вероятно искате да форматирате правилно? Искате да премахнете смесени пространства и интервали. Искате да се върнете към линиите в съответствие със стандартния код. Това, което НЕ искате, е дълга линия. Това и само това ви дава фантомен коментар!

0
01 июня '17 в 22:45 2017-06-01 22:45 отговорът е даден на Tomas Bjerre на 01.06.2007 г. в 10:45 часа 2017-06-01 22:45

Този хак работи:

 String x = "s" + //Formatter Hack "a" + // "c" + // "d"; 

Бих предложил да не се използва форматиране. Лош код трябва да изглежда лош, а не изкуствено. Добрият код отнема време. Не можете да заблудите качеството. Форматирането е част от качеството на изходния код.

-3
30 нояб. Отговор, даден от Томас Юнг 30 ноември 2009-11-30 19:47 '09 в 19:47 2009-11-30 19:47