summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/ru/formatters.mdx
blob: 6bdb1bc9ff3b361c638518e248a05fd64188b206 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
title: Форматеры
description: OpenCode использует средства форматирования, специфичные для языка.
---

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

---

## Встроенный

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

| форматтер                 | Расширения                                                                                                 | Требования                                                                                                    |
| ------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| правительство             | .идти                                                                                                      | Доступна команда `gofmt`                                                                                      |
| смешивание                | .ex, .exs, .bias, .heex, .bend, .neex, .sface                                                              | Доступна команда `mix`                                                                                        |
| красивее                  | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml и [подробнее](https://prettier.io/docs/en/index.html) | Зависимость `prettier` в `package.json`                                                                       |
| биом                      | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml и [подробнее](https://biomejs.dev/)                   | Конфигурационный файл `biome.json(c)`                                                                         |
| зигзаг                    | .zig, .zon                                                                                                 | Доступна команда `zig`                                                                                        |
| clang-формат              | .c, .cpp, .h, .hpp, .ino и [подробнее](https://clang.llvm.org/docs/ClangFormat.html)                       | Конфигурационный файл `.clang-format`                                                                         |
| ктлинт                    | .кт, .ктс                                                                                                  | Доступна команда `ktlint`                                                                                     |
| ерш                       | .py, .pyi                                                                                                  | Команда `ruff` доступна в конфигурации                                                                        |
| ржавчина                  | .rs                                                                                                        | Доступна команда `rustfmt`                                                                                    |
| грузовой контейнер        | .rs                                                                                                        | Доступна команда `cargo fmt`                                                                                  |
| уф                        | .py, .pyi                                                                                                  | Доступна команда `uv`                                                                                         |
| рубокоп                   | .rb, .rake, .gemspec, .ru                                                                                  | Доступна команда `rubocop`                                                                                    |
| стандартный RB            | .rb, .rake, .gemspec, .ru                                                                                  | Доступна команда `standardrb`                                                                                 |
| htmlbeautifier            | .erb, .html.erb                                                                                            | Доступна команда `htmlbeautifier`                                                                             |
| воздух                    | .Р                                                                                                         | Доступна команда `air`                                                                                        |
| дротик                    | .dart                                                                                                      | Доступна команда `dart`                                                                                       |
| ocamlformat               | .мл, .мли                                                                                                  | Доступна команда `ocamlformat` и файл конфигурации `.ocamlformat`.                                            |
| терраформировать          | .tf, .tfvars                                                                                               | Доступна команда `terraform`                                                                                  |
| светиться                 | .блеск                                                                                                     | Доступна команда `gleam`                                                                                      |
| никсфмт                   | .nix                                                                                                       | Доступна команда `nixfmt`                                                                                     |
| шфмт                      | .sh, .bash                                                                                                 | Доступна команда `shfmt`                                                                                      |
| пинта                     | .php                                                                                                       | Зависимость `laravel/pint` в `composer.json`                                                                  |
| oxfmt (экспериментальный) | .js, .jsx, .ts, .tsx                                                                                       | Зависимость `oxfmt` в `package.json` и [экспериментальная переменная окружения flag](/docs/cli/#experimental) |
| ормол                     | .hs                                                                                                        | Доступна команда `ormolu`                                                                                     |

Поэтому, если ваш проект имеет `prettier` в вашем `package.json`, OpenCode автоматически его использует.

---

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

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

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

Этот процесс происходит в фоновом режиме, обеспечивая сохранение стилей кода без каких-либо действий вручную.

---

## Настроить

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

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

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

| Свойство      | Тип                 | Описание                                                                            |
| ------------- | ------------------- | ----------------------------------------------------------------------------------- |
| `disabled`    | логическое значение | Установите для этого параметра значение `true`, чтобы отключить форматтер.          |
| `command`     | нить[]              | Команда для форматирования                                                          |
| `environment` | объект              | Переменные среды, которые необходимо установить при запуске средства форматирования |
| `extensions`  | нить[]              | Расширения файлов, которые должен обрабатывать этот форматтер                       |

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

---

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

Чтобы глобально отключить **все** средства форматирования, установите для `formatter` значение `false`:

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

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

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

---

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

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

```json title="opencode.json" {4-14}
{
  "$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`** в команде будет заменен путем к форматируемому файлу.