Русский
Документация
Форматтеры

Форматтеры

OpenCode использует форматтеры, специфичные для языка.

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


Встроенные

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

ФорматтерРасширенияТребования
air.RКоманда air доступна
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml и другие (opens in a new tab)Файл конфигурации biome.json(c)
cargofmt.rsКоманда cargo fmt доступна
clang-format.c, .cpp, .h, .hpp, .ino и другие (opens in a new tab)Файл конфигурации .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Зависимость oxfmt в package.json и экспериментальный флаг переменной окружения
pint.phpЗависимость laravel/pint в composer.json
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml и другие (opens in a new tab)Зависимость prettier в package.json
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 доступна

Когда форматтеры включены, OpenCode будет использовать prettier для подходящих файлов, если в вашем проекте есть prettier в package.json.


Как это работает

Когда OpenCode записывает или редактирует файл и форматтеры включены, он:

  1. Проверяет расширение файла на соответствие всем включённым форматтерам.
  2. Запускает соответствующую команду форматтера для файла.
  3. Применяет изменения форматирования.

Этот процесс происходит в фоновом режиме для включённых форматтеров.


Настройка

Вы можете включать и настраивать форматтеры через раздел formatter в вашей конфигурации OpenCode.

Чтобы включить все встроенные форматтеры, установите formatter в true.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "formatter": true
}

Используйте объект, чтобы оставить встроенные форматтеры включёнными при настройке переопределений или пользовательских форматтеров.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {}
}

Каждая конфигурация форматтера поддерживает следующее:

СвойствоТипОписание
disabledbooleanУстановите true для отключения форматтера
commandstring[]Команда для форматирования. Обязательна для пользовательских форматтеров; опциональна для встроенных.
environmentobjectПеременные окружения, устанавливаемые при запуске форматтера
extensionsstring[]Расширения файлов, которые должен обрабатывать этот форматтер

Рассмотрим несколько примеров.


Отключение форматтеров

Если formatter опущен, все форматтеры отключены. Чтобы отключить все форматтеры после того, как другая конфигурация их включила, установите formatter в false:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "formatter": false
}

Чтобы отключить конкретный форматтер, установите disabled в true:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {
    "prettier": {
      "disabled": true
    }
  }
}

Пользовательские форматтеры

Вы можете настроить встроенные форматтеры с помощью опций, таких как environment или extensions. Чтобы добавить пользовательский форматтер, укажите command и extensions:

opencode.json
{
  "$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 в команде будет заменён на путь к форматируемому файлу.