В любой команде разработчиков рано или поздно возникает проблема несогласованного форматирования кода: кто-то использует табы, кто-то пробелы, у одного LF, у другого CRLF, у кого-то в конце строки мусорные пробелы, у кого-то - нет. В результате - бесконечные конфликты в Git и споры "как правильно".
EditorConfig решает эту проблему просто и элегантно.
EditorConfig - это стандарт и набор инструментов, позволяющих задавать правила форматирования кода на уровне проекта, а не отдельного редактора.
Он работает через файл .editorconfig, который:
Пример базового .editorconfig:
root = true [*] charset = utf-8 end_of_line = lf indent_style = space indent_size = 4 insert_final_newline = true trim_trailing_whitespace = true max_line_length = 120
root = true
Это одна из самых важных строк в EditorConfig, она говорит редактору: "Этот .editorconfig - корневой. Не ищи другие .editorconfig выше по дереву каталогов".
Без root = true редактор может:
Это может привести к неожиданному поведению.
Как работают секции EditorConfig
[*.php] indent_size = 4
Поддерживаемые свойства
charset
Задаёт кодировку файлов. Возможные значения:
Всегда используй utf-8 - это стандарт де-факто.
end_of_line
Определяет символ конца строки. Возможные значения:
Разные окончания строк - частая причина git-конфликтов.
lf - лучший универсальный вариант.
indent_style
Определяет чем делать отступы. Возможные значения:
Многие проекты предпочитают пробелы из-за предсказуемости.
indent_size
Количество пробелов для одного уровня отступа. Возможные значения:
Используется только если indent_style = space.
tab_width
Определяет визуальную ширину символа табуляции, используется только если indent_style = tab.
insert_final_newline
Добавляет пустую строку в конце файла.
Почему это важно:
Всегда true.
trim_trailing_whitespace
Удаляет пробелы и табы в конце строк.
max_line_length
Задаёт максимальную длину строки. Возможные значения:
EditorConfig не переносит строки, а лишь:
Практический пример для разных файлов
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.php]
indent_style = space
indent_size = 4
max_line_length = 120
[*.{js,ts}]
indent_style = space
indent_size = 2
max_line_length = 100
[Makefile]
indent_style = tab
Source: Orkhan Alishov's notes