Модуль 8 · Расширения Cargo
Расширения Cargo
Cargo можно расширять сторонними утилитами. Они устанавливаются через cargo install и вызываются как cargo имя.
🔧 Практика 🕐 ~25 минут
📦
cargo install — установка утилит
Терминал
cargo install имя # установить утилиту из crates.io
cargo install имя@версия # конкретная версия
cargo uninstall имя # удалить
cargo install --list # показать установленные утилиты
Утилиты устанавливаются в ~/.cargo/bin/ и доступны из любого места в терминале. Если это расширение Cargo (бинарник начинается с cargo-), оно вызывается как cargo имя.
👁️
cargo-watch — автоматическая пересборка
Установка и использование
cargo install cargo-watch
cargo watch # пересобирать при изменении файлов
cargo watch -x run # запускать при изменении
cargo watch -x test # тестировать при изменении
cargo watch -x "test my_test" # конкретный тест при изменении
cargo watch -x check -x test # сначала check, потом test
💡 cargo-watch следит за изменениями в src/, tests/, Cargo.toml и автоматически запускает нужную команду. Незаменимо для TDD-цикла.
🔒
cargo-audit — проверка уязвимостей
Установка и использование
cargo install cargo-audit
cargo audit # проверить все зависимости на CVE
cargo audit fix # попытаться автоматически обновить уязвимые версии
Проверяет Cargo.lock против базы данных RustSec — базы данных известных уязвимостей в Rust-крейтах. Рекомендуется запускать в CI.
🔍
cargo-expand — раскрытие макросов
Установка и использование
cargo install cargo-expand
cargo expand # показать код после раскрытия всех макросов
cargo expand my_module # только конкретный модуль
Когда макрос (#[derive(Debug)], vec![] и т.д.) работает не так как ожидается — cargo expand показывает реальный код который генерирует макрос. Требует nightly Rust для некоторых функций.
🌳
cargo tree — встроен с Rust 1.44
cargo tree # дерево зависимостей (встроено)
cargo tree -d # только дубликаты
cargo tree -i имя_крейта # кто использует этот крейт
cargo tree --features all # включая все фичи
cargo tree встроен в Cargo начиная с Rust 1.44 — устанавливать ничего не нужно.
⭐
Другие полезные расширения
cargo-outdated Показать устаревшие зависимости включая мажорные версииcargo-edit cargo add/remove/upgrade (cargo add теперь встроен)cargo-nextest Альтернативный тест-раннер — быстрее и красивее выводcargo-flamegraph Профилировщик — генерирует flamegraph из вашего кодаcargo-deny Политики для зависимостей: запретить определённые лицензии, крейты📌 Что важно запомнить
→ cargo install имя — установить утилиту, доступна как cargo имя
→ cargo-watch: автопересборка при изменении файлов
→ cargo-audit: проверка CVE в зависимостях (запускать в CI)
→ cargo-expand: посмотреть что генерируют макросы
Тест
3 вопроса