Ответ 1
Использовать комментарии:
Object o = foo() //
.bar() //
.toString();
Я очень расстроен правилами форматирования Eclipse для серии квалифицированных вызовов (т.е. стиля шаблона Builder). Например, вот мое предпочтительное форматирование для некоторого кода, который создает новый объект Apache Commons CLI Options
:
Options options = new Options()
.addOption(OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit")
.addOption(OptionBuilder.withLongOpt(OPTION_PROPERTIES)
.hasArg()
.withArgName("FILE")
.withType(File.class)
.withDescription("specify a user properties file")
.create());
I.e., параметры завернуты и отступы, если необходимо, и все квалифицированные вызовы, кроме первого, если это необходимо, обернуты и отступы, если их больше одного. Если список параметров обертывается внутри квалифицированного вызова, вызов сначала должен быть завершен.
Форматирование по умолчанию в Eclipse ( "Wrap only when needed" для аргументов и invocations) приводит к следующему беспорядку:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit").addOption(
OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
"FILE").withType(File.class).withDescription(
"specify a user properties file").create());
Переход в "Стиль Java-кода → Formatter → Line Wrapping" и параметр переноса строки на "Обертка всех элементов, кроме первого элемента, если это не необходимо" для выходов:
Options options = new Options().addOption(
OPTION_HELP_SHORT, OPTION_HELP, false, "print usage information")
.addOption(OPTION_VERSION_SHORT, OPTION_VERSION, false,
"print version and exit")
.addOption(
OptionBuilder.withLongOpt(OPTION_PROPERTIES).hasArg().withArgName(
"FILE").withType(File.class).withDescription(
"specify a user properties file").create());
Мне не нравится, что выражение OptionBuilder
не обернуто или что "FILE"
обертывается без обертывания withArgName
.
Изменение отступов на "Отступ по столбцу" дает:
Options options = new Options().addOption(OPTION_HELP_SHORT, OPTION_HELP,
false, "print usage information")
.addOption(OPTION_VERSION_SHORT,
OPTION_VERSION, false,
"print version and exit")
.addOption(
OptionBuilder.withLongOpt(
OPTION_PROPERTIES)
.hasArg()
.withArgName("FILE")
.withType(File.class)
.withDescription(
"specify a user properties file")
.create());
Разрывает линии, где я бы предпочел, но слишком сильно переместил вещи вправо.
Есть ли способ убедить Eclipse применить мой предпочтительный стиль форматирования или нечто более близкое к нему, чем любое из вышеперечисленных?
Использовать комментарии:
Object o = foo() //
.bar() //
.toString();
Отключение форматирования с комментариями или вставка комментариев строки слишком утомительны.
Лучший способ описан здесь:
... или вы можете выбрать "Линейная упаковка". Никогда не присоединяться к уже завернутому линии "по всему миру. Затем вы можете разбить его вручную и форматировать будет только форматировать внутренние строки (или добавить дополнительные разрывы строк, если необходимо).
С помощью этого параметра форматировщик Eclipse перестанет разрушать ваши инструкции для строителя.
В Eclipse 3.6 Можно отключить форматирование для области кода. См. Мой ответ на
Как отключить форматирование кода Eclipse для определенных разделов кода Java?
AFAIK, это известная проблема с Eclipse Formatter: https://bugs.eclipse.org/bugs/show_bug.cgi?id=59891
В меню выберите "Окно" → "Настройки", когда откроется окно, выберите "Java" - "Стиль кода" → "Форматировать", и оттуда вы можете создать свой собственный стиль форматирования, выбрав новый или отредактированный вариант. При редактировании профиля форматирования открывается новое окно, которое дает вам множество различных опций.