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