Rustfmt — Как забыть о спорах о форматировании кода в Rust

26 Jun, 2026
6,895
🔱 1,018
👥 49

Знакомая ситуация? Вы тратите время на выравнивание отступов, спорите с коллегами о пробелах и переносах строк, а код ревью превращается в обсуждение стиля. Rustfmt решает эту проблему раз и навсегда.

Что такое Rustfmt?

Rustfmt — это официальный инструмент для автоматического форматирования Rust-кода согласно стилевому гайдлайну. Это не просто утилита, а часть стандартной поставки Rust (начиная с версии 1.24), что делает его де-факто стандартом для форматирования.

Кстати, проект поддерживается командой Rust-lang и активно развивается — на момент написания статьи в нём участвовало более 6500 звёзд на GitHub и почти 1000 форков.

Почему вам стоит начать использовать Rustfmt сегодня?

1. Мгновенная настройка

Установка занимает одну команду:

rustup component add rustfmt

А форматирование всего проекта — ещё одну:

Реклама
cargo fmt

2. Гибкая конфигурация

Хотите кастомизировать стиль? Создайте файл rustfmt.toml в корне проекта. Например:

# Применяем стиль edition 2024
style_edition = "2024"

# Настраиваем ширину строки
max_width = 100

# Включаем форматирование цепочек методов
chain_width = 60

Полный список настроек можно посмотреть командой rustfmt --help=config.

3. Интеграция с CI/CD

Можно настроить автоматическую проверку стиля в пайплайнах. Пример для GitHub Actions:

name: Check formatting
  run: cargo fmt --all -- --check

Если код не соответствует стилю — сборка упадёт, что особенно полезно для командной разработки.

Продвинутые фишки

Форматирование без компиляции

Rustfmt может форматировать код, который даже не компилируется! Это полезно при рефакторинге или работе с черновиками.

Пропуск определённых участков

Не хотите форматировать какой-то блок? Используйте атрибут #[rustfmt::skip]:

#[rustfmt::skip]
fn this_function_wont_be_formatted() {
    println!("This keeps its original formatting");
}

Или для макросов:

#[rustfmt::skip::macros(html)]
let unformatted = html! { <div>
    This HTML stays as-is</div> };

Разные режимы вывода

Хотите не применять изменения, а просто посмотреть diff?

cargo fmt -- --emit=diff

Или получить отчёт в JSON?

cargo fmt -- --emit=json

Где Rustfmt не справляется?

Как и любой инструмент, rustfmt имеет ограничения:

  1. Плохо работает с макросами (хотя поддержка постепенно улучшается)
  2. Не форматирует комментарии внутри кода
  3. Может иметь проблемы с не-ASCII символами
  4. Не обрабатывает фрагменты кода — только полные файлы

Но команда разработчиков постоянно работает над улучшением этих аспектов.

Интеграция с редакторами

Хотите форматировать код на лету? Rustfmt поддерживается всеми популярными редакторами:

  • VSCode через rust-analyzer
  • IntelliJ/CLion через плагин Rust
  • Vim через rust.vim
  • Emacs через rust-mode
  • Sublime Text 3 через RustFmt
  • Atom через соответствующий плагин

Вывод: кому и зачем?

Rustfmt — must-have инструмент для:

  • Команд, где важна единообразность кода
  • Разработчиков, уставших от ручного форматирования
  • Проектов с strict code review
  • Тех, кто хочет сфокусироваться на логике, а не на пробелах

Попробуйте — и вы удивитесь, сколько времени освободится для действительно важных задач. А если захотите поучаствовать в развитии проекта — contributing всегда приветствуется!

P.S. Лично я после внедрения rustfmt в проекте сократил время code review на 30% — спорных моментов в форматировании просто не осталось.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.