$ sudo teach IT
Модуль 3 · Команды Cargo

Проверка и форматирование

cargo check, cargo fmt и cargo clippy — три команды которые сделают ваш код быстрее, чище и правильнее.

🛠️ Практика 🕐 ~15 минут
🔍

cargo check — быстрая проверка без сборки

cargo check анализирует код на ошибки типов и синтаксис без создания бинарника. Работает в 2–5 раз быстрее cargo build. Используйте во время написания кода для мгновенной обратной связи.

Терминал
cargo check           # проверить src/
cargo check --tests   # проверить включая тесты
cargo check --all     # проверить все крейты в воркспейсе
💡 Профессиональный цикл разработки: пишете код → cargo check → исправляете → cargo check → когда ошибок нет → cargo run или cargo test.
🎨

cargo fmt — автоформатирование

cargo fmt автоматически форматирует весь код по официальному стандарту Rust (rustfmt). Больше не нужно спорить про отступы, пробелы и переносы строк.

Терминал
cargo fmt                    # форматировать весь проект (изменяет файлы)
cargo fmt --check            # только проверить, не менять (для CI)
cargo fmt -- --emit stdout   # вывести отформатированный код в stdout

Настройка форматирования через файл rustfmt.toml в корне проекта:

rustfmt.toml
max_width = 100          # максимальная длина строки (по умолчанию 80)
tab_spaces = 4           # размер отступа
edition = "2021"         # версия Rust для парсинга
💡 В командах CI всегда добавляйте cargo fmt --check. Если кто-то закоммитит неотформатированный код — CI упадёт. Это стандарт во всех серьёзных Rust-проектах.
📎

cargo clippy — умный линтер

Clippy — это линтер с более чем 700 правилами. Находит код который компилируется, но написан неидиоматично, неэффективно или потенциально опасно.

Терминал
cargo clippy                   # запустить clippy
cargo clippy --fix             # автоматически исправить что можно
cargo clippy -- -D warnings    # трактовать предупреждения как ошибки (для CI)
cargo clippy --all-targets     # проверить тесты, бенчмарки и примеры тоже

Пример того, что находит clippy:

Пример предупреждений clippy
# Clippy скажет: используйте .is_empty() вместо .len() == 0
if my_vec.len() == 0 { }       // ← предупреждение
if my_vec.is_empty() { }       // ← правильно

# Clippy скажет: .clone() на Copy-типе избыточен
let x: i32 = 5;
let y = x.clone();             // ← предупреждение
let y = x;                     // ← правильно (i32 копируется автоматически)

# Clippy скажет: используйте if let вместо match с одной веткой
match opt {
    Some(x) => println!("{x}"),
    _ => {}                    // ← предупреждение
}
💡 Отключить конкретное предупреждение clippy на уровне функции: #[allow(clippy::имя_предупреждения)]. Отключать целиком не стоит — clippy находит реальные проблемы.
📌 Что важно запомнить
→ cargo check — быстрая проверка ошибок без создания бинарника
→ cargo fmt — автоформатирование; cargo fmt --check — только проверка (для CI)
→ cargo clippy — 700+ правил для идиоматичного Rust-кода
→ В CI: всегда запускайте fmt --check и clippy -- -D warnings