Инструменты форматирования OpenCode
OpenCode после каждой записи или редактирования файла,автоматическииспользует инструмент форматирования соответствующего языка, чтобы отформатировать его, гарантируя, что сгенерированный код всегда соответствует стилю кода вашего проекта. Весь процесс выполняется незаметно в фоновом режиме без каких-либо ручных действий.
Как это работает
Когда OpenCode записывает или редактирует файл, он автоматически выполняет форматирование в следующих шагах:
- Определить расширение записанного или отредактированного файла (например,
.ts、.py、.goи т.д.) - Сопоставить расширение со всеми включёнными инструментами форматирования
- Запустить соответствующую команду форматирования для этого файла
- Автоматически записать результат форматирования обратно в файл
Например, если ваш проектpackage.jsonсодержитprettierзависимость, OpenCode автоматически обнаружит её и после каждого редактирования.js、.ts、.cssтаких файлов, он вызывает prettier для форматирования, без какой-либо дополнительной настройки.
Встроенные инструменты форматирования
OpenCode имеет встроенную поддержку инструментов форматирования, охватывающих популярные языки и фреймворки, разделённых на две категории:
- Включается, когда команда доступна: Просто установите соответствующую команду в системе, и OpenCode автоматически обнаружит и использует её
- Требуется файл конфигурации проекта или зависимости: Проект должен включать определённый файл конфигурации или пакет зависимостей
| Инструмент форматирования | Поддерживаемые расширения файлов | Условие включения |
|---|---|---|
air |
.R |
airКоманда доступна |
biome |
.js .jsx .ts .tsx .html .css .md .json .yamlи другие |
Проект содержитbiome.jsonилиbiome.jsoncфайл конфигурации |
cargofmt |
.rs |
cargo fmtКоманда доступна |
clang-format |
.c .cpp .h .hpp .inoи другие |
Проект содержит.clang-formatфайл конфигурации |
cljfmt |
.clj .cljs .cljc .edn |
cljfmtКоманда доступна |
dart |
.dart |
dartКоманда доступна |
dfmt |
.d |
dfmtКоманда доступна |
gleam |
.gleam |
gleamКоманда доступна |
gofmt |
.go |
gofmtКоманда доступна |
htmlbeautifier |
.erb .html.erb |
htmlbeautifierКоманда доступна |
ktlint |
.kt .kts |
ktlintКоманда доступна |
mix |
.ex .exs .eex .heex .leex .neex .sface |
mixКоманда доступна |
nixfmt |
.nix |
nixfmtКоманда доступна |
ocamlformat |
.ml .mli |
ocamlformatКоманда доступна, и проект содержит.ocamlformatфайл конфигурации |
ormolu |
.hs |
ormoluКоманда доступна |
oxfmt(Экспериментально) |
.js .jsx .ts .tsx |
package.jsonПроект содержитoxfmtзависимость, и установлен соответствующий флаг экспериментальной переменной окружения |
pint |
.php |
composer.jsonПроект содержитlaravel/pintзависимость |
prettier |
.js .jsx .ts .tsx .html .css .md .json .yamlи другие |
package.jsonПроект содержитprettierзависимость |
rubocop |
.rb .rake .gemspec .ru |
rubocopКоманда доступна |
ruff |
.py .pyi |
ruffКоманда доступна и соответствующая конфигурация существует |
rustfmt |
.rs |
rustfmtКоманда доступна |
shfmt |
.sh .bash |
shfmtКоманда доступна |
standardrb |
.rb .rake .gemspec .ru |
standardrbКоманда доступна |
terraform |
.tf .tfvars |
terraformКоманда доступна |
uv |
.py .pyi |
uvКоманда доступна |
zig |
.zig .zon |
zigКоманда доступна |
Когда несколько инструментов форматирования поддерживают одно и то же расширение (например,
.rsтакже поддерживаетсяcargofmtиrustfmt,.rbтакже поддерживаетсяrubocopиstandardrb), OpenCode автоматически выберет на основе инструментов, установленных в проекте. Если нужно указать явно, можно отключить ненужные инструменты форматирования с помощью приведённой ниже конфигурации.
Структура файла конфигурации
Пользовательская конфигурация для инструментов форматирования записывается вopencode.jsonизformatterполе, где ключ — это имя инструмента форматирования (совпадающее с именем во встроенной таблице), а значение — объект конфигурации для этого инструмента:
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": {
// Имя инструмента форматирования: объект конфигурации
"prettier": {
// Укажите здесь параметры конфигурации prettier
}
}
}
Каждый инструмент форматирования поддерживает следующие параметры конфигурации:
| Параметр конфигурации | Type | Описание |
|---|---|---|
disabled |
boolean |
Установить вtrueчтобы отключить инструмент форматирования; остальные параметры конфигурации будут проигнорированы |
command |
string[] |
Массив команд для выполнения форматирования. Вы можете использовать$FILEзаполнитель в команде; во время выполнения он будет заменён полным путём к форматируемому файлу |
environment |
object |
Переменные окружения, внедряемые при запуске инструмента форматирования, в виде пар ключ-значение |
extensions |
string[] |
Список расширений файлов, обрабатываемых этим инструментом форматирования (включая., e.g.".ts") |
Отключение инструментов форматирования
1. Отключить все инструменты форматирования
Если вы не хотите, чтобы OpenCode автоматически форматировал какие-либо файлы, можно задатьformatterнепосредственно вfalse:
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": false // Глобально отключает все инструменты форматирования; после записи файлов форматирование выполняться не будет
}
2. Отключение конкретного инструмента форматирования
Если нужно отключить только один инструмент форматирования, в объекте конфигурации соответствующего инструмента задайтеdisabledвtrue, а другие инструменты форматирования затронуты не будут:
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true // Отключает только prettier; другие инструменты форматирования (такие как ruff, gofmt) по-прежнему работают нормально
}
}
}
Пользовательские инструменты форматирования
С помощьюcommand、environmentиextensionsС помощью опции конфигурации можно переопределить поведение встроенных инструментов форматирования по умолчанию или добавить инструменты форматирования, которые ещё не встроены в OpenCode.
1. Переопределение встроенных команд инструментов форматирования
Например, укажите определённые аргументы для prettier и ограничьте его обработкой только определённых расширений:
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
// $FILE в массиве command — это заполнитель; во время выполнения он будет заменён полным путём к файлу, который нужно отформатировать
// Например, фактически выполняется: npx prettier --write /your/project/src/index.ts
"environment": {
"NODE_ENV": "development" // Переменные окружения, внедряемые при запуске prettier
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
// Переопределить стандартные расширения: запускать prettier только для этих четырёх типов файлов и не обрабатывать .html, .css и т. д.
}
}
}
2. Добавление пользовательских инструментов форматирования
Если используемый вами инструмент форматирования отсутствует во встроенном списке, вы можете добавить его, указав любое имя. Вам нужно только предоставить команду запуска и расширения файлов, которые должны обрабатываться:
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": {
"custom-markdown-formatter": { // Пользовательское имя (вы можете назвать его как угодно, если оно не конфликтует со встроенными инструментами)
"command": ["deno", "fmt", "$FILE"],
// Используйте deno fmt для форматирования файлов; $FILE будет заменён на фактический путь к файлу
"extensions": [".md"] // Запускать этот инструмент форматирования только для файлов .md
}
}
}
3. Настройте несколько инструментов форматирования одновременно
Пример
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"ruff": {
"disabled": true // ruff не используется в проекте, поэтому его нужно отключить
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}