# echolot spec (/ru/docs/cli/spec)

`echolot spec` приносит в терминал две вещи со [страницы «Спецификации»](/docs/specs): линтер и связь между
спецификацией и папкой запросов, созданных по ней.

| Подкоманда | Что делает |
| --- | --- |
| `echolot spec lint` | Проверяет документ OpenAPI или Swagger линтером; завершается с кодом 1, если в нём есть ошибки (или предупреждения, с `--strict`). |
| `echolot spec check` | Перечисляет, что изменилось в спецификации, за которой следует папка; завершается с кодом 1, если папка не актуальна. |
| `echolot spec apply` | Применяет изменения спецификации к папке, сохраняя правки, сделанные в рабочем пространстве. |

## echolot spec lint [#echolot-spec-lint]

```sh
echolot spec lint <file> [--strict] [--hints]
```

`<file>` — это спецификация, YAML или JSON. Файлы, на которые она ссылается через `$ref`, читаются из соседних с ней.

```sh
echolot spec lint Alpenglow.echolot/specs/alpenglow.yaml
```

```text
0 errors, 0 warnings.
```

Каждая проблема — одна строка в стандартном выводе: файл, строка и столбец, серьёзность, сообщение и правило в
скобках, чтобы на неё могли указать редакторы и CI. Итоговое число идёт в стандартный поток ошибок:

```text
api.yaml:2:1: error: info needs a version (of the API, such as 1.0.0). [info]
api.yaml:7:7: error: GET /x documents no responses. [responses]
api.yaml:6:5: hint: GET /x has no operationId; code generators and agents name it from one. [operation-id]
2 errors, 0 warnings.
```

| Параметр | Значение |
| --- | --- |
| `--strict` | Считать неудачей и предупреждения. |
| `--hints` | Также перечислить подсказки: хорошие практики, например operationId и описания. Подсказки никогда не считаются неудачей. |

Правила те же, что на странице «Спецификации»; см. [редактирование спецификаций](/docs/specs/editing).

## echolot spec check [#echolot-spec-check]

```sh
echolot spec check [--workspace <workspace>] <folder> [--refresh]
```

Папка, созданная импортом спецификации или связанная с ней в приложении, следует за этой спецификацией. `check`
сравнивает папку со спецификацией в её нынешнем виде и перечисляет каждую операцию, которая была `added`, `changed` (с
полями) или `removed`. Если изменение касается того, что вы правили в рабочем пространстве, об этом сказано: такие
правки сохраняются.

```sh
echolot spec check -w Shop.echolot pets
```

```text
added    POST /pets
changed  GET /pets/{id}  (parameters, responses)
removed  DELETE /pets/{id}
3 changes, 12 unchanged.
```

| Параметр | Значение |
| --- | --- |
| `-w`, `--workspace <folder>` | Папка рабочего пространства. По умолчанию — текущая папка. |
| `--refresh` | Сначала заново загрузить спецификацию по её URL. |

`<folder>` — путь к связанной папке, например `pets`. Используйте `check` в CI, чтобы сборка падала, когда запросы
отстали от спецификации.

## echolot spec apply [#echolot-spec-apply]

```sh
echolot spec apply [--workspace <workspace>] <folder> [--operation <operation> ...]
```

Записывает изменения спецификации в папку: новые операции становятся запросами, изменённые обновляются, удалённые
удаляются. То, что вы правили в запросе, сохраняется. Запрос, который вы правили и чьей операции в спецификации больше
нет, тоже остаётся и перестаёт следовать за спецификацией. Каждая строка говорит, что произошло:

```text
added    pets/create-pet
updated  pets/get-pet  kept edits to headers
removed  pets/delete-pet
```

| Параметр | Значение |
| --- | --- |
| `-w`, `--workspace <folder>` | Папка рабочего пространства. По умолчанию — текущая папка. |
| `--operation <operation>` | Только эта операция, например `"GET /pets"`. Можно повторять; если не указано — все изменения. |

## Коды выхода [#exit-codes]

| Код | Когда |
| --- | --- |
| `0` | `lint`: нет ошибок (и нет предупреждений, с `--strict`). `check`: папка актуальна. `apply`: применено. |
| `1` | `lint`: ошибки или предупреждения с `--strict`. `check`: есть изменения, которые нужно применить. |
| `64` | Неверный параметр или папка, которая не следует за спецификацией. |
