Eclipse Java Formatter. Новая строка перед фигурными скобками, но не после

У нас на работе очень странное соглашение о кодировании, и мне не удалось настроить Java Formatter в Eclipse правильно, чтобы делать то, что я хочу. Конвенция гласит:

  • Перед фигурной скобкой "{" всегда должна быть новая строка

[ОБНОВЛЕНИЕ] В нашем соглашении нет правила, гласящего, должен ли после "{" стоять разрыв строки или нет. В примерах фактически используется разрыв строки (и почти ЛЮБОЕ соглашение, которое я видел до сих пор, говорит или подразумевает, что после "{" и "}" всегда должен быть разрыв строки). Таким образом, образцы 1 и 2 являются "синтаксически правильными". [/ОБНОВИТЬ]

Поскольку это взрывает код, наша команда решила написать такой код (нет, это был не мой выбор!):

public void methode(final boolean b)
{ if (b)
  { do.something();
  }
  else
  { do.somethingElse();
  }
}

Но в форматере мне удалось получить только это:

public void methode(final boolean b)
{
  if (b)
  { 
    do.something();
  }
  else
  { 
    do.somethingElse();
  }
}

или это:

public void methode(final boolean b) { 
  if (b) { 
    do.something();
  }
  else {
    do.somethingElse();
  }
}

Есть ли способ сказать форматировщику разбивать строки перед "{", но не после этого? Я знаю, что первый стиль ужасен, и я был бы рад использовать один из двух последних, но это решение компании.

2 ответа

Решение

Итак, информация о данной теме. Я сделал еще несколько исследований. А вот так называемый Brace-Style (образец 1) имеет название: Horstman Brace Style или здесь Horstman. Его защищает небольшая группа людей, так как она сочетает в себе преимущества K&R и стиля Allman (образец 2). Как брекеты выстроены, так и нет "пустого места" пространства.

Но это не единственная правда. Этот стиль убог для VCS. Если вам нужно добавить строку между открывающей скобкой и первым оператором, вам нужно сначала разбить ее и поместить туда новую строку. В diff или merge вы увидите не "добавлена ​​одна строка", а "одна строка была заменена двумя линиями". Но на самом деле старое утверждение было изменено вами.

Так что еще один аргумент, чтобы не использовать этот стиль.

Не могли бы вы отключить соответствующие части средства форматирования кода и использовать вместо них шаблоны? Например, при наборе

private_

и нажатие ctrl + space вызовет шаблон private_method. Затем вы можете изменить закрытый шаблон, чтобы он был примерно таким -

private ${return_type} ${name}(${}) 
{ ${cursor}
}

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

Другие вопросы по тегам