Могу ли я определить исключения для правил очистки Eclipse?

Чаще всего правила очистки (Preferences > Java > Code Style > Clean Up) в Eclipse отлично работают и создают красивый код.

Но иногда, особенно с комментариями и конкатенированными строковыми фрагментами (например, встроенными SQL-запросами), очистка просто испортит вещи и уничтожает мое форматирование.

Есть ли способ сказать Eclipse "Не трогайте этот блок текста! Я отформатировал его так, как мне нравится, и вы сделаете его менее читаемым"?

Ответ 1

Я предполагаю, что вы действительно не имеете в виду "Очистить", но параметр "Исходный код формата" скрыт внутри. Он настроен в настройках > Java > Стиль кодa > Formatter. И действительно, есть опция, называемая "Вкл/выкл. Теги". К сожалению, его по умолчанию. Теперь вы должны написать так:

// @formatter:off
StringBuilder sql = new StringBuilder()
    .append("SELECT whatever \n")
    .append("FROM some_table");
// @formatter:on

Вполне возможно, что принятый ответ был правильным на момент написания, однако это было введено в Eclipse 3.5, если Im не ошибается.

Ответ 2

У меня возникла одна и та же проблема, и пока у меня нет решения, я могу рассказать вам, как я работаю над проблемой.

Из-за того, как работает форматирование, я намеренно избегаю слишком длинных строк кода. В общем, когда я держу строки короткими, она принимает правильные решения относительно того, как форматировать код. Это может даже работать с операторами SQL, например:

public static final String SELECT_SOMETHING = "SELECT"
        + "OBJECTID, THIS, THAT, THEOTHER, THING"
        + " FROM DBNAME.DBSCHEMA.TABLE_T"
        + " WHERE ID = ?";

Это утверждение формально определяет, потому что, когда возможные элементы разделяются и объединяются вместе. Когда я этого не делаю, я получаю непредсказуемые результаты:

public static final String SELECT_SOMETHING = "SELECT OBJECTID, SOMETHING FROM DBNAME.DBSCHEMA.TABLE_T WHERE ID = ?";

Для комментариев я поместил их все в одну строку, когда это было возможно, и разрешил перенос слов, когда он делает форматирование.

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

Тем не менее, я понимаю ваше разочарование, когда форматер принимает плохие решения!

Ответ 3

Чувствуя, что я отвечаю на свой вопрос, но есть обходной путь, который я сейчас выполняю (обратите внимание: у меня есть эти правила очистки как save-action):

Сохранить (с помощью Ctrl/Cmd-S, не знаю, имеет ли значение, как вы сохраняете) код, и пусть Eclipse испортит ваше форматирование. Затем просто нажмите Ctrl/Cmd-Z, чтобы отменить, и сразу же повторно сохранить. Формат возвращается в исходный формат и, по-видимому, сохраняется по назначению.

Ответ 4

Для операторов SQL в коде вы можете поместить символ одной строки в конце каждой строки. Тогда форматер не может переформатировать его. Это уродливее, чем не нужно это делать, но это красивее, чем если Eclipse форматирует его.

StringBuffer sql = new StringBuffer() //
   .append("SELECT whatever \n") //
   .append("FROM some_table");

Ответ 5

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

Ответ 6

(только для комментариев Javadoc)

Если у меня есть блок текста, который отформатирован именно так, как мне нравится, я заключу их в <pre> </pre> теги.

Ответ 7

если вы не хотите, чтобы поле стало окончательным (i.i: потому что вы хотите изменить его во время отладки), вы просто назначаете его самому себе на конструкторе. Это даст предупреждение о затмении, но ваше поле останется не последним.