Приложение D: полезные инструменты разработки
В этом приложении мы поговорим о некоторых полезных инструментах разработки, которые предоставляет проект Rust. Мы рассмотрим автоматическое форматирование, быстрые способы применять исправления предупреждений, линтер и интеграцию с IDE.
Автоматическое форматирование с помощью rustfmt
Инструмент rustfmt переформатирует ваш код в соответствии со стилем кода
сообщества. Многие совместные проекты используют rustfmt, чтобы избежать
споров о том, какой стиль использовать при написании Rust: все форматируют свой
код с помощью этого инструмента.
Установки Rust по умолчанию включают rustfmt, поэтому программы rustfmt и
cargo-fmt уже должны быть в вашей системе. Эти две команды аналогичны rustc
и cargo в том смысле, что rustfmt позволяет более тонко управлять
форматированием, а cargo-fmt понимает соглашения проекта, использующего
Cargo. Чтобы отформатировать любой проект Cargo, введите следующее:
$ cargo fmt
Выполнение этой команды переформатирует весь код Rust в текущем крейте. Это
должно изменить только стиль кода, а не семантику кода. Дополнительные сведения
о rustfmt см. в его документации.
Исправление кода с помощью rustfix
Инструмент rustfix входит в установки Rust и может автоматически исправлять
предупреждения компилятора, для которых есть ясный способ исправить проблему,
и это, скорее всего, именно то, что вам нужно. Вероятно, вы уже видели
предупреждения компилятора. Например, рассмотрим этот код:
Имя файла: src/main.rs
fn main() {
let mut x = 42;
println!("{x}");
}
Здесь мы определяем переменную x как изменяемую, но на самом деле никогда ее
не изменяем. Rust предупреждает нас об этом:
$ cargo build
Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: variable does not need to be mutable
--> src/main.rs:2:9
|
2 | let mut x = 0;
| ----^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default
Предупреждение предлагает удалить ключевое слово mut. Мы можем автоматически
применить это предложение с помощью инструмента rustfix, выполнив команду
cargo fix:
$ cargo fix
Checking myprogram v0.1.0 (file:///projects/myprogram)
Fixing src/main.rs (1 fix)
Finished dev [unoptimized + debuginfo] target(s) in 0.59s
Когда мы снова посмотрим на src/main.rs, увидим, что cargo fix изменил код:
Имя файла: src/main.rs
fn main() {
let x = 42;
println!("{x}");
}
Переменная x теперь неизменяемая, и предупреждение больше не появляется.
Команду cargo fix также можно использовать для перехода вашего кода между
разными редакциями Rust. Редакции рассматриваются в приложении E.
Больше линтов с Clippy
Инструмент Clippy — это набор линтов для анализа вашего кода, чтобы вы могли находить распространенные ошибки и улучшать свой код Rust. Clippy входит в стандартные установки Rust.
Чтобы запустить линты Clippy для любого проекта Cargo, введите следующее:
$ cargo clippy
Например, предположим, что вы пишете программу, использующую приближение математической константы, такой как pi, как делает эта программа:
fn main() {
let x = 3.1415;
let r = 8.0;
println!("the area of the circle is {}", x * r * r);
}
Выполнение cargo clippy в этом проекте приводит к такой ошибке:
error: approximate value of `f{32, 64}::consts::PI` found
--> src/main.rs:2:13
|
2 | let x = 3.1415;
| ^^^^^^
|
= note: `#[deny(clippy::approx_constant)]` on by default
= help: consider using the constant directly
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant
Эта ошибка сообщает, что в Rust уже определена более точная константа PI, и
что ваша программа была бы корректнее, если бы вы использовали эту константу.
Затем вы изменили бы код, чтобы использовать константу PI.
Следующий код не вызывает у Clippy никаких ошибок или предупреждений:
fn main() {
let x = std::f64::consts::PI;
let r = 8.0;
println!("the area of the circle is {}", x * r * r);
}
Дополнительные сведения о Clippy см. в его документации.
Интеграция с IDE с помощью rust-analyzer
Чтобы помочь с интеграцией IDE, сообщество Rust рекомендует использовать
rust-analyzer. Этот инструмент представляет
собой набор ориентированных на компилятор утилит, которые говорят на Language
Server Protocol — спецификации, позволяющей IDE и языкам
программирования взаимодействовать друг с другом. rust-analyzer могут
использовать разные клиенты, например плагин Rust analyzer для Visual Studio
Code.
Посетите домашнюю страницу проекта
rust-analyzer, чтобы получить инструкции по установке, затем установите
поддержку языкового сервера в вашей конкретной IDE. Ваша IDE получит такие
возможности, как автодополнение, переход к определению и встроенные ошибки.