# Участие в разработке Zen C

Во-первых, спасибо, что решили внести свой вклад в Zen C! Именно такие люди, как вы, делают этот проект замечательным.

Мы приветствуем ваш вклад! Исправление ошибок, добавление документации, предложение новых функций или просто сообщение о проблемах.

## Как внести свой вклад

Общий рабочий процесс для внесения вклада:

1.  **Создайте форк репозитория**: используйте стандартный рабочий процесс GitHub, чтобы создать форк репозитория в вашу учётную запись.
2.  **Создайте ветку функции**: Создайте новую ветку для вашей функции или исправления ошибки. Это помогает держать ваши изменения организованными и отдельными от основной ветки.
    ```bash
    git checkout -b feature/NewThing
    ```
3.  **Внесите изменения**: Напишите ваш код или изменения в документации.
4.  **Проверьте**: Убедитесь, что ваши изменения работают как ожидается и не ломают существующую функциональность (см. [Запуск тестов](#запуск-тестов)).
5.  **Отправьте запрос на слияние**: Запушьте вашу ветку в ваш форк и отправьте Pull Request (PR) в основной репозиторий Zen C.

## Задачи (Issues) и Запросы на слияние (Pull Requests)

Мы используем GitHub Issues и Pull Requests для отслеживания ошибок и функций. Чтобы помочь нам поддерживать качество:

-   **Используйте шаблоны**: При открытии Issue или PR используйте предоставленные шаблоны.
    -   **Отчет об ошибке**: Для сообщения об ошибках.
    -   **Запрос функции**: Для предложения новых функций.
    -   **Запрос на слияние**: Для отправки изменений кода.
-   **Будьте подробны**: Предоставьте как можно больше деталей.
    -   **Автоматические проверки**: У нас есть автоматизированный рабочий процесс, который проверяет длину описания новых Issues и PR. Если описание слишком короткое (< 50 символов), оно будет автоматически закрыто. Это нужно для того, чтобы у нас было достаточно информации, чтобы помочь вам.

## Руководство по разработке

### Стиль кода
- Следуйте существующему стилю Си, который используется в кодовой базе. Последовательность — это ключ.
- Вы можете использовать предоставленный файл `.clang-format` для форматирования вашего кода.
- Держите код чистым и читаемым.

### Структура проекта
Если вы хотите расширить компилятор, вот краткая карта кодовой базы:
*   **Parser**: `src/parser/` - Содержит реализацию рекурсивного парсера спуска.
*   **Codegen**: `src/codegen/` - Содержит логику транспилера, который конвертирует Zen C в GNU C/C11.
*   **Стандартная библиотека**: `std/` - Модули стандартной библиотеки, написанные на самом Zen C.

## Запуск тестов

Набор тестов — ваш лучший друг при разработке. Пожалуйста, убедитесь, что все тесты проходят перед отправкой PR.

### Запустить все тесты
Чтобы запустить полный набор тестов, используя компилятор по умолчанию (обычно GCC):
```bash
make test
```

### Запустить конкретный тест
Чтобы запустить один файл теста для экономии времени во время разработки:
```bash
./zc run tests/test_match.zc
```

### Тестирование с разными бэкендами
Zen C поддерживает несколько компиляторов Си в качестве бэкендов. Вы можете запускать тесты специально для них:

**Clang**:
```bash
./tests/run_tests.sh --cc clang
```

**Zig (cc)**:
```bash
./tests/run_tests.sh --cc zig
```

**TCC (Tiny C Compiler)**:
```bash
./tests/run_tests.sh --cc tcc
```

## Процесс запроса на слияние

1.  Убедитесь, что вы добавили тесты для любой новой функциональности.
2.  Убедитесь, что все существующие тесты проходят.
3.  Обновите документацию (Markdown файлы в `docs/`, `translations/` или `README.md`), если это уместно.
4.  Ясно опишите ваши изменения в описании PR. Ссылайтесь на любые связанные задачи (issues).

Спасибо за ваш вклад!
