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



Этот перевод продолжает серию об IntelliJ IDEA:



EditorConfig


Есть разные подходы к согласованию стиля кода для всей команды. Одним из популярных инструментов является Prettier. Это форматированный код, который может переформатировать ваш код в соответствии с определенными правилами. Затем вы можете запустить его непосредственно в вашей IDE, как часть CI или перед каждым коммитом, используя Git Hooks.


Еще один популярный и распространенный инструмент — EditorConfig. Подход немного отличается от Prettier. Вы создаете файл .editorconfig прямо в своем проекте с желаемыми настройками. Ваша IDE затем обнаруживает этот файл и загружает его конфигурацию. Многие редакторы поддерживаются «из коробки», и для многих других есть плагины.


Файл примера может выглядеть примерно так:


# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{jsundefinedpy}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.jsonundefined.travis.yml}]
indent_style = space
indent_size = 2

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


Совместное использование настроек в IDEA


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


Однако есть одно существенное ограничение. Поскольку список поддерживаемых параметров довольно ограничен, все еще есть множество параметров, не охватываемых EditorConfig. Каждая IDE имеет огромный список своих собственных свойств конфигурации, которые нельзя использовать совместно с EditorConfig.


Традиционно, если вы хотите поделиться ими, это потребует утомительного экспорта и импорта для каждого члена команды. К счастью, IDEA предлагает несколько различных вариантов синхронизации настроек IDE.


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


Расширенная поддержка EditorConfig в IDEA


IDEA уже давно поддерживает EditorConfig из коробки. Однако, начиная с версии 2019.2, он предлагает расширенную поддержку, которая также охватывает специфичные для IDEA настройки, которые не являются частью базовой спецификации EditorConfig.


Таким образом, вы можете иметь как нулевую настройку для каждой папки, так и совместное использование определенных настроек IDEA. Как это работает?


Создание файла .editorconfig


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


New > EditorConfig File

Перед созданием файла IDEA показывает следующий диалог, в котором вы можете настроить его содержимое.



Root файл


Первый флажок root = true позволяет пометить ваш файл конфигурации как корневой файл. Что это означает?


Вы можете иметь несколько конфигурационных файлов в вашем проекте, каждый в отдельном каталоге. Всякий раз, когда вы открываете файл в вашей IDE, он проверяет, есть ли также файл .editorconfig, расположенный в том же каталоге. Если нет, он идет вверх по структуре каталогов, чтобы найти его. Он не останавливается, пока не найдет файл .editorconfig, который содержит root = true. Ваш верхний файл конфигурации всегда должен содержать root = true.


Это означает, что во время запуска IDE может найти и загрузить несколько файлов конфигурации. Конфигурации из всех найденных файлов применяются. Файлы, находящиеся глубже в иерархии, имеют приоритет над более высокими в иерархии. Это означает в файле, находящемся глубже в иерархии, можно расширить и переопределить все конфигурации, имеющиеся в файлах находящихся выше в иерархии.


Наборы свойств


Теперь пришло время выбрать, какие свойства конфигурации следует включить в ваш новый файл.



Вы можете выбрать стандартные основные свойства, которые поддерживаются каждой каждой IDE, совместимой с EditorConfig, проверив EditorConfig standard. Однако вы также можете проверить специфичные для IDEA свойства конфигурации для различных языков, поддерживаемых IDEA, таких как Java, Kotlin или HTML.


Давайте попробуем свойства конфигурации для Java. Содержимое файла теперь должно содержать целую кучу настроек IDEA / Java. Почти 250 новых настроек!


[*.java]
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = false
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = true
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = true
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_resources = true
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = false

И многое другое. Обратите внимание, что каждая из этих строк имеет префикс ij_. Таким образом, вы можете легко отличить обычные настройки от специфичных для IDEA.


Вставить как комментарии


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


Вы можете выбрать Add properties as comments (Добавить свойства как комментарии). Таким образом, все поддерживаемые свойства вставляются закомментированными. Вы по-прежнему можете видеть все поддерживаемые параметры, но можете раскомментировать только те, которые хотите применить.


Режим предварительного просмотра


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


Рядом с каждым разделом конфигурации, таким как [*.Java] или [*], вы можете увидеть маленький значок глаза.



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



Обратите внимание, что все эти изменения предназначены только для предварительного просмотра и не изменят содержимое вашего файла.


Переопределяет визуализацию


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


Например, у вас могут быть настройки для всех файлов [*] в верхней части файла конфигурации, а затем раздел только для файлов Java [* .java], который переопределяет некоторые общие свойства конфигурации. В этом случае IDEA предлагает вам хорошую визуализацию с иконками в области gutter (желоб слева от кода). Аналогично случаю, когда вы переопределяете методы родительского класса.



Подсказка дает объяснение того, является ли раздел основным или переопределяемым. Нажав на значок, вы можете перейти к этому разделу. Это работает как внутри одного файла, так и по всей иерархии.


Приоритет настроек


Как описано выше, вы можете иметь несколько файлов .editorconfig. Это может быть полезно при наличии разных настроек для разных пакетов или модулей. Можно иметь разные настройки для производственного и тестового кода. Или для разных языков. Подводя итог:


  • Настройки из одного файла конфигурации применяются ко всем его подкаталогам.
  • Если в подкаталоге есть другой параметр, он имеет приоритет над параметрами из родительских каталогов.
  • Самый верхний файл конфигурации должен иметь root = true
  • Настройки конфигурации редактора имеют приоритет над настройками IDE
  • Если параметр не найден в .editorconfig, он берется из настроек IDE

Синхронизация плагинов


Хотя расширенная поддержка EditorConfig очень мощная, она не является полноценной заменой старой доброй синхронизации настроек IDE, которая также может синхронизировать ваши плагины IDE.


Заключение


EditorConfig в IDEA стал намного мощнее. Он поддерживает не только оригинальные параметры EditorConfig, но и множество специфичных для IDEA параметров. Таким образом, вы можете легко обмениваться унифицированной конфигурацией IDE среди членов вашей команды с нулевой настройкой. Нет больше импорта / экспорта настроек или утомительной настройки синхронизации настроек IDE. Более того, теперь вы можете иметь разные параметры конфигурации для каждого каталога отдельно.