rust-general — правило для Cursor: что делает и как установить
Правило задаёт практики для безопасного и идиоматичного Rust-кода. Оно пригодится при работе с .rs, Cargo.toml и Cargo.lock.
.cursor/rules/rust-general.mdcЧто делает rust-general
rust-general задаёт правила для структуры Rust-проектов, владения данными и обработки ошибок. Оно советует разделять библиотечный и исполняемый код, держать публичные API небольшими, выбирать Option<T> и Result<T, E> для состояний и ошибок, а клонирование применять только при необходимости. Для библиотек рекомендуются thiserror или стандартные ошибки проекта, для приложений — anyhow с контекстом операций.
Правило также охватывает асинхронность, границы Send и Sync, отмену задач и тестирование. Перед поставкой оно предлагает запускать cargo fmt и cargo clippy, добавлять модульные и интеграционные тесты. Для файлов, подпадающих под **/*.rs, а также для Cargo.toml и Cargo.lock, правило подключается по совпадению шаблона; alwaysApply имеет значение false.
Код с блокирующей блокировкой через .await, лишним Arc<Mutex<_>> или без документированного unsafe потребует правок по этим правилам.
Какие задачи решает
- разделить библиотечный и исполняемый код по структуре crate
- выбрать
Option<T>иResult<T, E>для состояний Rust-программы - добавить контекст к ошибкам ввода-вывода, сети или базы данных
- проверить async-код на блокирующие операции через
.await - подготовить проект к
cargo fmtиcargo clippy
Примеры запросов агенту
- Проверь этот Rust-код по правилам владения, ошибок и структуры проекта.
- Найди в
src/lib.rsлишние клонирования и предложи заимствования. - Проверь async-функции на блокирующие блокировки через
.awaitи ошибки отмены задач.
Как установить rust-general
Вручную: положить файлы
.cursor/rules/rust-general.mdcВо frontmatter: description, globs, alwaysApply
Вручную: положить файлы
.claude/rules/rust-general.mdПоле paths во frontmatter ограничивает файлы: globs из источника → paths
AGENTS.md
Codex читает AGENTS.md: вставьте текст правила туда
Вручную: положить файлы
.github/instructions/rust-general.instructions.mdПоле applyTo задаёт, к каким файлам применять: globs из источника → applyTo
Вручную: положить файлы
.devin/rules/rust-general.mdВручную: положить файлы
.clinerules/rust-general.mdПо шагам, с командами для каждой платформы: Cursor rules: файлы .mdc, четыре режима и замена .cursorrules
Вопросы о rust-general
Как установить rust-general в Cursor?
Добавьте файл правила по пути .cursor/rules/rust-general.mdc. После этого Cursor сможет применять его к файлам, которые совпадают с заданными шаблонами.
Что делает rust-general?
Правило задаёт рекомендации для структуры crate, владения, типов, ошибок, async-кода и тестов в Rust. Оно также напоминает запускать cargo fmt и cargo clippy перед поставкой.
Какие файлы обрабатывает rust-general?
Правило рассчитано на **/*.rs, Cargo.toml и Cargo.lock. Оно не применяется постоянно: alwaysApply имеет значение false.
Исходный текст
rust-general.mdc · CC0-1.0
--- description: General Rust rules for safe, idiomatic application and library development globs: ["**/*.rs", "Cargo.toml", "Cargo.lock"] alwaysApply: false --- # Rust General Rules ## Project Structure - Keep crates focused and name modules by domain responsibility. - Put reusable library code in `src/lib.rs` and binary entry points in `src/main.rs` or `src/bin/`. - Keep public APIs small and documented. - Use feature flags deliberately and document non-default features. - Commit `Cargo.lock` for applications; follow the project convention for libraries. ## Ownership and Types - Prefer borrowing over cloning when ownership is not needed. - Use owned values at API boundaries when the callee must store data. - Model domain states with enums and structs instead of strings or booleans. - Use `Option<T>` for absence and `Result<T, E>` for fallible operations. - Avoid `unwrap()` and `expect()` outside tests, examples, and process-startup invariants. ## Error Handling - Use `thiserror` or project-standard custom errors for libraries. - Use `anyhow` or project-standard context-rich errors for applications. - Add context when crossing IO, network, database, or parsing boundaries. - Do not discard errors with `_` unless explicitly documented. ## Concurrency and Async - Use `Send` and `Sync` boundaries intentionally. - Prefer message passing or owned task inputs for async work. - Do not hold blocking locks across `.await`. - Use `tokio::task::spawn_blocking` or equivalent for blocking CPU or IO in async applications. - Propagate cancellation through futures rather than hiding it in detached tasks. ## Testing and Quality - Run `cargo fmt` and `cargo clippy` before delivery. - Add unit tests for pure logic and integration tests for public behavior. - Use property tests for parsers, serializers, and state machines when useful. - Use benchmarks only after identifying a real performance question. ## Common Mistakes - Do not fight the borrow checker by adding unnecessary `Arc<Mutex<_>>`. - Do not expose internal module structure through public APIs by accident. - Do not allocate in hot loops without measuring. - Do not use unsafe code unless the invariant is documented and tested.
© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules