# Участие в разработке 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). Спасибо за ваш вклад!