# Contributing Guide

## Системные зависимости

- Rust >= 1.93.0

## Установка версии из исходников

Выполнить команду в склонированной директории проекта.

```bash
cargo install --path . --bin cargo-pike --locked --force
```

## Как добавить изменение

_Используется стандартный процесс открытия пулреквестов гитхаба._

1. **Форкните репозиторий** и создайте новую ветку (`git checkout -b feature-branch`).
2. Внесите изменения и убедитесь, что код проходит проверки (`just style-check`), компилируется и запускается.
3. Запустите тесты (`cargo test`).
4. Добавьте информацию о своём изменении в `CHANGELOG.md`.
5. При необходимости внесите изменения в `README.md`.
6. Сделайте коммит, следуя соглашению [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) (см. ниже).
7. Отправьте изменения в ваш форк (`git push origin feature-branch`).
8. Откройте **Pull Request** (PR) и опишите, какие изменения были внесены.

## Требования к коду

- Используйте стиль кодирования **Rustfmt**.
- Следуйте рекомендациям линтера **Clippy** в режиме pedantic.
- Добавляйте комментарии и документацию (`///` для публичных API).
- Убедитесь, что ваш код не ломает существующие тесты.

## Стиль коммитов (Conventional Commits)

> ❗ Очень важно. Если коммит содержит несовместимые изменения. Необходимо после типа коммита (см. ниже) добавить восклицательный знак. Пример: `feat!: description`

Сообщения коммитов должны соответствовать соглашению **[Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)** и использовать английский язык в стиле "**газетных заголовков** (без артиклей и в повелительном склонении)".

Примеры допустимых сообщений коммитов:

- `feat: add new API for config`
- `feat!: remove --version flag`
- `fix: fix config parsing error`
- `chore: update dependencies`

Тело комита не является обязательным, но желательно для сложных изменений.

Формат коммита:

```
<тип>[(область)][!]: <краткое описание>
```

Типы изменений:

- **feat** — добавление новой функциональности
- **fix** — исправление ошибки
- **docs** — изменение документации
- **style** — исправления форматирования (без изменения логики)
- **refactor** — рефакторинг (изменения без исправления багов и добавления новых фич)
- **test** — добавление или изменение тестов
- **chore** — изменения, не влияющие на код (например, обновление зависимостей)
