Додаток 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 і може автоматично виправляти попередження компілятора, для яких є чіткий спосіб виправлення проблеми, імовірно саме той, який вам потрібен. Ви, мабуть, уже бачили попередження компілятора раніше. Наприклад, розгляньте цей код:
Filename: 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 змінив
код:
Filename: src/main.rs
fn main() {
let x = 42;
println!("{x}");
}
Змінна x тепер незмінна, і попередження більше не з’являється.
Ви також можете використовувати команду cargo fix, щоб перевести свій код між
різними виданнями Rust. Видання розглядаються в Додатку E.
Більше лінтів із Clippy
Інструмент Clippy — це набір лінтів для аналізу вашого коду, щоб ви могли виявляти поширені помилки та покращувати свій код Rust. Clippy входить до стандартних встановлень Rust.
Щоб запустити лінти Clippy для будь-якого проєкту Cargo, введіть таке:
$ cargo clippy
Наприклад, припустімо, ви пишете програму, яка використовує наближення математичної константи, такої як пі, як це робить ця програма:
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 для інструкцій зі встановлення, а потім установіть підтримку language server у
вашій конкретній IDE. Ваша IDE отримає можливості, такі як автодоповнення, перехід до
визначення та вбудовані помилки.