Спасибо за интерес к участию в проекте!
Этот проект следует стандартам кодирования RustManifest. Пожалуйста, ознакомьтесь с ними перед началом работы.
Ключевые моменты:
- Используйте
cargo +nightly fmtдля форматирования - Никаких
unwrap()илиexpect()в продакшен коде - Документация только через Rustdoc (без инлайн комментариев)
- Описательные имена переменных и функций
- Rust nightly toolchain
- cargo-make (опционально, для автоматизации задач)
- cargo-nextest (для запуска тестов)
git clone https://github.com/RAprogramm/<PROJECT_NAME>
cd <PROJECT_NAME>
# Установка nightly toolchain
rustup toolchain install nightly
rustup component add rustfmt --toolchain nightly
rustup component add clippy
# Установка test runner (опционально, но рекомендуется)
cargo install cargo-nextestПеред коммитом убедитесь, что все проверки проходят:
# Проверка форматирования
cargo +nightly fmt --all -- --check
# Линтинг
cargo clippy --all-targets --all-features -- -D warnings
# Тесты
cargo test --all-features
# Или с nextest
cargo nextest run --all-featuresИспользуйте номер issue как имя ветки:
123Формат: #<номер_issue> <тип>: <описание>
#123 feat: add new output format
#123 fix: correct line counting in parser
#45 docs: update API examples
#78 test: add property tests for extractor
#90 refactor: simplify config loadingТипы:
feat- новая функциональностьfix- исправление багаdocs- документацияtest- тестыrefactor- рефакторинг кодаchore- служебные задачи
- Создайте ветку от
main - Внесите изменения
- Убедитесь, что все CI проверки проходят
- Создайте PR с описательным заголовком
- Включите
Closes #<issue>в описание
Качество код-ревью падает с размером. Важен именно продакшен код, а не общее количество строк.
| Продакшен код | Качество ревью | Риск |
|---|---|---|
| < 100 строк | Тщательное | Низкий |
| 100-300 строк | Умеренное | Средний |
| 300+ строк | Поверхностное | Высокий |
Тесты и бенчмарки не считаются так же:
- PR с 50 строками в
src/и 1000 строками тестов — легко ревьюить - PR с 300 строками в
src/и 0 тестов — сложно ревьюить и рискованно
Используйте rust-prod-diff-checker GitHub Action для автоматического анализа размера PR и разделения продакшен изменений от тестов/бенчмарков.
Правило: Если ревьюер не может понять ваши изменения продакшен кода за 15 минут — PR слишком большой.
- Покрывайте все публичные API функции
- Тестируйте пути ошибок, не только happy path
- Используйте property-based тестирование для парсеров
- Никаких
unwrap()в тестах — используйте?с правильными типами ошибок
#[test]
fn test_example() -> Result<(), Box<dyn std::error::Error>> {
let result = some_function()?;
assert_eq!(result, expected);
Ok(())
}# Все тесты
cargo test --all-features
# С покрытием
cargo llvm-cov nextest --all-features
# Конкретный тест
cargo test test_nameКаждый PR запускает:
| Задача | Описание |
|---|---|
| Format | cargo +nightly fmt --check |
| Clippy | cargo clippy -D warnings |
| Test | cargo test --all-features |
| Doc | cargo doc --no-deps |
| Coverage | Загрузка в Codecov |
Все публичные элементы должны иметь Rustdoc:
/// Краткое описание того, что делает функция.
///
/// # Errors
///
/// Возвращает `Error` если что-то пошло не так.
///
/// # Examples
///
/// ```
/// use my_crate::my_function;
///
/// let result = my_function()?;
/// # Ok::<(), my_crate::Error>(())
/// ```
pub fn my_function() -> Result<(), Error> {
// ...
}- Открывайте issue для багов или запросов функциональности
- Проверяйте существующие issues перед созданием новых
- Предоставляйте минимальное воспроизведение для багов
Участвуя в проекте, вы соглашаетесь, что ваши contributions будут лицензированы под MIT License.