Перейти к содержимому

Форматтеры

ZubrCode может форматировать файлы после того, как их изменили инструменты write, edit или patch. Форматтеры по умолчанию выключены — включаются конфигурацией:

opencode.jsonc
{
"formatter": true
}

formatter: true включает все встроенные форматтеры: каждый запускается, когда доступны его команда и нужные файлы проекта. Объект включает встроенные и позволяет их переопределить или добавить свои; пустой объект сохраняет унаследованные настройки, а true возвращает встроенные.

Форматтер Расширения Требование
gofmt .go команда gofmt
mix .ex, .exs, .eex, .heex, .leex, .neex, .sface команда mix
oxfmt .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .cts зависимость oxfmt в package.json
prettier .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts, .cts, .html, .htm, .css, .scss, .sass, .less, .vue, .svelte, .json, .jsonc, .yaml, .yml, .toml, .xml, .md, .mdx, .graphql, .gql зависимость prettier в package.json
biome те же расширения, что у prettier biome.json или biome.jsonc и бинарь @biomejs/biome
zig .zig, .zon команда zig
clang-format .c, .cc, .cpp, .cxx, .c++, .h, .hh, .hpp, .hxx, .h++, .ino, .C, .H команда clang-format и .clang-format
ktlint .kt, .kts команда ktlint
ruff .py, .pyi команда ruff и конфиг Ruff или запись зависимости
air .R команда air (форматтер R)
uv .py, .pyi команда uv с поддержкой uv format
rubocop .rb, .rake, .gemspec, .ru команда rubocop
standardrb .rb, .rake, .gemspec, .ru команда standardrb
htmlbeautifier .erb команда htmlbeautifier
dart .dart команда dart
ocamlformat .ml, .mli команда ocamlformat и .ocamlformat
terraform .tf, .tfvars команда terraform
latexindent .tex команда latexindent
gleam .gleam команда gleam
shfmt .sh, .bash команда shfmt
nixfmt .nix команда nixfmt
rustfmt .rs команда rustfmt
pint .php laravel/pint в composer.json
ormolu .hs команда ormolu
cljfmt .clj, .cljs, .cljc, .edn команда cljfmt
dfmt .d команда dfmt

Именованная запись меняет встроенный форматтер или добавляет свой. Своему нужны command и extensions:

opencode.jsonc
{
"formatter": {
"prettier": {
"environment": { "NODE_ENV": "development" },
"extensions": [".js", ".ts"]
},
"deno-markdown": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}
Поле Тип Поведение
disabled boolean true — убрать этот форматтер
command string[] заменить команду встроенного или задать свою
environment объект переменные окружения поверх окружения процесса
extensions string[] список расширений (с точкой)

Все поля необязательны: запись встроенного форматтера наследует пропущенные значения, а новая запись без команды или расширений не запускается.

command — массив аргументов, а не строка оболочки: $FILE заменяется на абсолютный путь файла, команда выполняется в активной папке проекта.

Файл сравнивается с extensions по последнему расширению, регистр важен (.part.md не подходит к notes.part.md — у него расширение .md). Если подходит несколько форматтеров, они пробуются в порядке регистрации, пока один не завершится успешно; неудачный логируется, и пробуется следующий.

Форматирование выключено, пока ни один файл конфигурации не задал formatter. Выключить его поверх более общего файла:

opencode.jsonc
{
"formatter": false
}

Один встроенный форматтер, не трогая остальные:

opencode.jsonc
{
"formatter": {
"prettier": { "disabled": true }
}
}