$ sudo teach IT
Модуль 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 вопроса