Есть ли способ конвертировать несколько объявлений переменных в одну строку?

В Eclipse есть ли способ автоматического преобразования:

int myX, myY, myZ;

... к этому...

int myX;
int myY;
int myZ;

Я думал, что могу сделать это из настроек "Очистить" и "Порядок сортировки участников", но не разбивает несколько объявлений на одну строку. Есть ли способ сделать это?

Изменить: уточнить, это касается переменных-членов.

Ответ 1

Пока я не знаю, выполняет ли одна из этих функций, вы можете получить аналогичные результаты несколькими нажатиями клавиш:

  • Выделите строку, содержащую определения нескольких переменных, и используйте функцию Найти/заменить (клавиша: Ctrl-F), чтобы заменить последовательность запятой на точку с запятой, пробел и тип переменной. Убедитесь, что область задана как "выбранные строки", как показано на следующем снимке экрана:

    Find replace dialog

  • Теперь у вас будет строка со всеми объявлениями переменных в одной строке. Это можно устранить, выделив ту же строку и функцию Источник > Формат (клавиша: Shift-Ctrl-F).

    Source format menu

  • Все сделано, теперь у вас есть переменные с их соответствующим типом, по одному в строке:

    All done

Ответ 2

Для этого нет встроенной опции очистки или форматирования (что меня удивляет). Однако написать плагин, чтобы сделать это, было бы не очень сложно. Для справки, вы должны начать с этой точки расширения. Класс org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp выглядит как потенциальный, который можно изучить в качестве примера и руководства.

Ответ 3

Eclipse не предоставляет эту функцию форматирования из коробки. Вы можете использовать плагин Checkstyle для проверки этого и многих других стандартов кодирования.

В конфигурационном файле Checkstyle используйте модуль MultipleVariableDeclarations, как это,

<module name="Checker">
    <module name="TreeWalker">
        <property name="cacheFile" value="target/cachefile"/>
        <property name="tabWidth" value="4"/>
        ...
        <module name="MultipleVariableDeclarations"/>
        ...
    </module>
</module>

Если вы в порядке с инструментом командной строки, то astyle и GC GreatCode являются двумя хорошими форматировщиками кода.

GC GreatCode задается как форматировщик кода C/С++, но он хорошо форматирует ваш код в этом сценарии.

В GC опция разделения объявления переменной -code_split_decl_style

Исходный код:

String fileName, a, b, c;

С опцией -code_split_decl_style-1:

String  fileName,
        a,
        b,
        c;

С опцией -code_split_decl_style-2:

String fileName;
String a;
String b;
String c;

Вы можете играть с различными инструментами форматирования и конфигурацией командной строки для разных языков в одном инструменте графического интерфейса, используя UniversalIndentGUI.


Checkstyle: http://checkstyle.sourceforge.net/

Astyle: astyle.sourceforge.net/

GC GreateCode: http://sourceforge.net/projects/gcgreatcode/

UniversalIndentGUI: universalindent.sourceforge.net/

Ответ 4

Eclipse, похоже, не обеспечивает функцию для этого, и я не нашел плагин, который делает это. Но, предполагая, что у вас есть доступ к awk, вы можете найти этот маленький awk script полезным:

{
  if (match($0,/([a-z|A-Z|0-9|_]+)\s+(([a-z|A-Z|0-9|_]+)\s*,\s*)+([a-z|A-Z|0-9|_]+);/)) {
    match($0,/(\s*[a-z|A-Z|0-9|_]+)\s+([^;]*)/,components);
    split(components[2],vars,",");
    for(i in vars) {
      gsub (/'[[:cntrl:]]|[[:space:]]|\x20/,"",vars[i])
      print components[1],vars[i]";"
    }
  }
  else {
   print $0;
  }
}

Он выполнит требуемую работу. Предполагая, что вы сохраните его в файле script.awk, вы бы назвали его следующим образом

awk -f script.awk target_file.java

ПРИМЕЧАНИЕ: вы должны направлять вывод в альтернативный файл, или ваш источник будет перезаписан (опустошен)

Итак, если вы хотите обработать несколько файлов за один раз, вы должны сделать это так (предполагая оболочку bash):

for f in *.java; do awk -f awk1.awk $f > $f.pr; done

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

================== РЕДАКТИРОВАНИЕ =================

Просто хочу добавить, что существуют плагины для Eclipse, которые поддерживают скрипты bash/awk в выбранном регионе. См. Здесь:

http://eclipseexeditor.sourceforge.net/ (вероятно, для старых для более новых версий Eclipse)

а также:

Bash script плагин для Eclipse?.

Итак, мой script в сочетании с одним из этих плагинов предположительно добавит запрошенную функцию к Eclipse.

Ответ 5

В Eclipse нет такой функции, о которой я знаю.

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