|
| 1 | +# AGENTS.md |
| 2 | + |
| 3 | +## Основные правила |
| 4 | + |
| 5 | +- Предпочитать идиоматичный Rust и современные конструкции языка и стандартной экосистемы вместо устаревших паттернов. |
| 6 | +- Держать кодовую базу компактной: переиспользовать код, предпочитать обобщения и небольшие абстракции дублированию. |
| 7 | +- Следовать принципу "parse, don't validate": один раз парсить внешний ввод в более строгие типы, которые кодируют инварианты. |
| 8 | +- Предпочитать type-driven design вместо API на сырых строках и разрозненных проверок по коду. |
| 9 | +- Избегать heap-аллокаций на горячих путях, если нет ясной и задокументированной причины. |
| 10 | +- Где это практически уместно, предпочитать заимствование, zero-copy парсинг, срезы и представления, дружественные к стеку. |
| 11 | +- Избегать лишних `clone`, промежуточных `String`/`Vec` и повторного парсинга. |
| 12 | +- Prefer bounds-check elimination patterns: iterators, slices/subslices, chunking, provable index ranges, loop-invariant prechecks, etc. |
| 13 | +- Не использовать `unsafe`, кроме случаев реальной необходимости; он должен быть изолирован, обоснован и покрыт тестами. |
| 14 | +- Пиши doc-strings и комментарии на русском. Только там где это нужно и полезно. |
| 15 | +- Сообщения в консоль: ошибки, ворнинги итд должны быть на английском. |
| 16 | +- Используй файловую структуру модулей Rust 2018+: foo.rs и foo/bar.rs, без foo/mod.rs. |
| 17 | +- Разбивай модули на подмодули при необходимости. |
| 18 | +- Для обычного текста не делай "ручной" перенос на новую строку. |
| 19 | + |
| 20 | +## Предпочтения по реализации |
| 21 | + |
| 22 | +- Предпочитать гарантии времени компиляции проверкам во время исполнения. |
| 23 | +- Предпочитать полные и локализованные преобразования (`TryFrom`, smart constructors, функции-парсеры) на границах системы. |
| 24 | +- Держать модули сфокусированными и цельными. |
| 25 | +- Когда производительность и простота конфликтуют вне горячих путей, предпочитать более простое решение; на горячих путях — более быстрое. |
| 26 | + |
| 27 | +## Тестирование и проверка |
| 28 | + |
| 29 | +- После изменений запускать: |
| 30 | + - `cargo fmt --all` |
| 31 | + - `cargo clippy --all-targets --all-features -- -D warnings` |
| 32 | + - `cargo test --all-features` |
0 commit comments