Files
quoter/.cursor/rules/02-rust-specific.mdc

58 lines
3.7 KiB
Plaintext
Raw Normal View History

2025-08-12 15:59:51 +03:00
---
Rule Name: 02-rust-specific
Description: Rust-specific Cursor Rules
---
Цель: гарантировать типобезопасный, асинхронно-корректный и наблюдаемый код, который сразу проходит тесты и деплой (см. 03-automated-pipeline).
### 🏷️ Типизация
- Везде явные типы для публичных API и где это улучшает читаемость.
- Используем `Option<T>`, `Result<T, E>`, `Vec<T>`, `HashMap<K, V>`. Избегать `dyn Any` — предпочесть `Box<dyn Trait>` или generics.
- Константы — `UPPER_SNAKE_CASE` с `const` или `static` при необходимости.
### 🌀 AsyncIO (tokio)
- Тесты в strict-режиме: никакого `std::thread::sleep` в async функциях.
- `tokio::spawn` — только с явной жизненной стратегией (хранить JoinHandle, отменять, ждать). На shutdown — корректная отмена с таймаутом.
- Любое I/O — с таймаутами (`tokio::time::timeout` или timeouts в клиентах).
### 🌐 HTTP (reqwest)
- `reqwest::Client::new()` и проверка статуса; JSON — `resp.json::<T>().await`.
- Логируем URL/провайдера/модель, но не ключи.
### 🧾 Ошибки
- EAFP. Узкие `match` и `?` оператор. В логах `error!` на неожиданных исключениях.
- Фолбэки — только если безопасны и явно задокументированы в логике.
### 🔎 Логирование
- Только `tracing` или `log` (никаких `println!`). Короткие, осмысленные сообщения, текущая эмодзи-семантика.
### 📁 Файлы/ресурсы
- `std::path::PathBuf` для новых путей; `std::fs::create_dir_all`.
- Явные кодировки (`encoding_rs`). Очистка temp через `Drop` trait или `finally` блоки.
### 🧪 Тесты
- Новая логика — новые тесты. Параметризация `rstest` по возможности.
- Конфигурация: `#[cfg(test)]` модули + `mockall` для моков.
### 🧱 Моделирование данных
- Новые стабильные формы — `struct` с derive макросами вместо «сырых» HashMap.
- Сериализацию/десериализацию выносить на границы через `serde`, а не в доменную логику.
### ⚙️ Производительность и фоновые задачи
- Батчи и кеши. Избегать N× сетевых вызовов в петлях.
- Фоновые циклы — с бэк-офф и джиттером. Счётчики прогресса и периодический дамп.
### 🧹 Стиль
- SRP, ранние возвраты, мелкие функции. Rust формат + `rustfmt` импорты.
### 🔒 Безопасность
- Никогда не логировать секреты. Тримминг внешнего контента в логах.
- Используем `secrecy` для чувствительных данных.
### 🪓 Упрощения по умолчанию
- Отдаём приоритет простым решениям (фиксируем 🪓), но без компромисса по типам/тестам/async.
### 🧿 Эмодзи
- 🏷️ typing • 🌀 asyncio • 🌐 http • 🔎 logs • 🧾 errors • 🧪 tests • 📁 fs • ⚙️ perf • 🔒 sec • 🧵 thread • 🪓 simplify • 🩵 resilience