Инструменты форматирования OpenCode

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


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

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

  1. Определить расширение записанного или отредактированного файла (например,.ts、.py、.goи т.д.)
  2. Сопоставить расширение со всеми включёнными инструментами форматирования
  3. Запустить соответствующую команду форматирования для этого файла
  4. Автоматически записать результат форматирования обратно в файл

Например, если ваш проект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"]
    }
  }
}
Другие расширения