Если для одного проекта требуется другой форматтер кода, настройте выбор на уровне проекта: используйте файл конфигурации этого проекта и, если вы работаете в Visual Studio Code, его настройки рабочей области (workspace settings). Это сохранит пользовательские настройки VS Code по умолчанию нетронутыми и обеспечит воспроизводимость форматирования в рамках проекта. Приведенные ниже шаги ориентированы на macOS и VS Code; в других редакторах могут использоваться другие элементы управления.
Определите, что означает «форматтер» для этого проекта
Сначала определите язык и фактическую потребность. Форматтер переписывает код в соответствии со стилем; базовые настройки редактора могут управлять только отступами, окончаниями строк или пробелами. Например, EditorConfig предоставляет свойства стиля проекта, которые могут считывать поддерживающие его редакторы, тогда как Prettier — это форматтер со своей собственной конфигурацией проекта. Эти инструменты могут дополнять друг друга, но один лишь файл EditorConfig не выбирает и не устанавливает форматтер. В руководстве EditorConfig описаны его формат и плагины для редакторов; руководство по настройке Prettier объясняет, как он считывает поддерживаемые файлы конфигурации.
Прежде чем добавлять новый форматтер, проверьте, какой форматтер уже используется в проекте. Изучите манифест пакета, конфигурацию форматтера и документацию проекта. Если участники команды или автоматические проверки ожидают определенный инструмент или версию, соответствие этой конфигурации обычно является наиболее практичным решением. Установка конкурирующего форматтера или изменение его параметров может привести к большим различиям (diffs), даже если код продолжает работать.
Выберите, где должна находиться настройка
В VS Code пользовательские настройки действуют на протяжении всей вашей работы с редактором, тогда как настройки рабочей области применяются к открытому проекту и имеют приоритет над пользовательскими. VS Code хранит настройки рабочей области в папке .vscode в корне проекта; пользовательские настройки хранятся отдельно в каталоге поддержки приложений (Application Support) вашей учетной записи macOS. Используйте палитру команд (Command Palette) (⇧⌘P) и выберите Preferences: Open Workspace Settings (JSON), чтобы отредактировать настройку проекта. Убедитесь, что в редакторе настроек указано Workspace, прежде чем что-либо менять. Документация VS Code по настройкам объясняет области действия и расположения.
Чтобы выбрать форматтер только для определенного языка в этом проекте, добавьте запись форматтера по умолчанию для этого языка в настройки рабочей области. Например, если проект использует расширение Prettier для VS Code для JavaScript, настройка выглядит следующим образом:
{
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}
Используйте идентификатор расширения именно того форматтера, который установлен в вашем редакторе; приведенный пример не является универсальным идентификатором. Если проект включает несколько языков, добавьте запись для каждого нужного языка вместо того, чтобы задавать глобальное значение по умолчанию. Команда VS Code Format Document With... позволяет выбирать среди доступных форматтеров для текущего документа, а действия форматирования можно вызывать из палитры команд. В руководстве VS Code по форматированию описаны эти элементы управления. Избегайте включения форматирования при сохранении в рамках этого точечного изменения, если только вы не хотите, чтобы каждое сохранение в этом проекте запускало форматирование.
Храните правила форматтера вместе с проектом
Форматтер по умолчанию лишь выбирает инструмент; он не определяет все правила форматирования этого инструмента. Храните общие правила в файле конфигурации, который распознает выбранный форматтер. Для Prettier это может быть файл .prettierrc.json в корне проекта. Минимальный пример может указывать только те параметры, о применении которых договорились в проекте:
{
"singleQuote": true
}
Prettier ищет конфигурацию от форматируемого файла вверх по родительским каталогам, поэтому конфигурация на корневом уровне может применяться к файлам ниже по структуре. Он также поддерживает ряд других форматов конфигурации; выберите тот, который поддерживается версией проекта и существующим инструментарием. Документация по настройке Prettier содержит список поддерживаемых файлов и поведение при поиске конфигураций.
Если цель состоит только в единообразии отступов или окончаний строк в разных редакторах, вместо этого рассмотрите использование .editorconfig в корне. Например, root = true останавливает поиск файлов EditorConfig выше по структуре, а такие свойства, как indent_style, indent_size и end_of_line, могут определять базовые текстовые соглашения. Поддержка редакторами зависит от плагинов, и эти свойства не заменяют правила форматирования, учитывающие специфику языка. Спецификация и обзор EditorConfig описывают, как находятся файлы и как применяются соответствующие правила.
Проверьте область действия перед форматированием
Сохраните настройку рабочей области и конфигурацию, затем при необходимости повторно откройте папку проекта в VS Code. Откройте один репрезентативный файл и используйте Format Document With..., чтобы подтвердить выбранный форматтер. Если форматтера нет в списке, убедитесь, что его расширение установлено и поддерживает этот язык; настройка рабочей области сама по себе не может установить расширение или добавить поддержку форматтера.
Прежде чем применять форматирование ко всему проекту, проверьте затронутые файлы в системе контроля версий или в окне сравнения diff. Сначала отформатируйте небольшую репрезентативную выборку, особенно если в проекте уже есть правила стиля или сгенерированные файлы. Если результат оказался неожиданным, остановитесь и проверьте наличие конкурирующей конфигурации в родительском каталоге, языковых настроек или другого форматтера, который уже ожидает проект. Отмените нежелательные изменения форматирования с помощью инструментов контроля версий в редакторе, затем скорректируйте конфигурацию проекта и повторите проверку на небольшой выборке.
Такой подход связывает решение с проектом: пользовательские настройки VS Code по умолчанию остаются в своей отдельной области действия, в то время как проект может содержать собственный выбор форматтера и правила. Если вы смените редактор, настройка рабочей области не перенесется вместе с вами, поэтому полагайтесь на файл конфигурации форматтера в проекте, если этот редактор его поддерживает.
Источники
Пользовательские настройки и настройки рабочей области — Visual Studio Code
Базовое редактирование — Visual Studio Code
Файл конфигурации — Prettier
EditorConfig — EditorConfig