Додаток D - корисні інструменти розробки

В цьому додатку ми говоримо про деякі корисні інструменти розробки, які надає проєкт Rust. Ми оглянемо автоматичне форматування, швидкі способи застосувати виправлення для попереджень, linter і інтеграцію з IDE.

Автоматичне форматування за допомогою rustfmt

Інструмент rustfmt переформатовує ваш код відповідно до стилю коду спільноти. Багато спільних проєктів використовують rustfmt для запобігання суперечкам, який стиль використовувати під час написання Rust: всі форматують свій код за допомогою цього інструменту.

Щоб встановити rustfmt, введіть наступне:

$ rustup component add rustfmt

Ця команда дає вам rustfmt і cargo-fmt, подібно до того, як Rust дає вам rustc та cargo. Щоб відформатувати будь-який проєкт Cargo, введіть наступне:

$ cargo fmt

Запуск цієї команди переформатує весь код Rust в поточному крейті. Це має змінювати лише стиль коду, а не його семантику. Для отримання додаткової інформації по rustfmt перегляньте його документацію.

Виправте ваш код за допомогою rustfix

Інструмент rustfix включений у встановлення Rust і може автоматично виправити попередження компілятора, які мають чіткий спосіб виправити проблему, що скоріш за все те, що ви хочете. Ймовірно, ви вже бачили попередження компілятора. Наприклад, розглянемо цей код:

Файл: src/main.rs

fn do_something() {}

fn main() {
    for i in 0..100 {
        do_something();
    }
}

Тут ми викликаємо функцію do_something 100 разів. але ми ніколи не використовуємо змінну і в тілі циклу for. Rust попереджає нас про це:

$ cargo build
   Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: unused variable: `i`
 --> src/main.rs:4:9
  |
4 |     for i in 0..100 {
  |         ^ help: consider using `_i` instead
  |
  = note: #[warn(unused_variables)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 0.50s

Попередження пропонує нам використати _i як назву змінної: підкреслення вказує на те, що не збираємося використовувати цю змінну. Ми можемо автоматично застосувати цю пропозицію, використовуючи інструмент 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 do_something() {}

fn main() {
    for _i in 0..100 {
        do_something();
    }
}

Змінна циклу for тепер називається _i, і попередження більше не з'являється.

Ви також можете використовувати команду cargo fix для перенесення коду між різними редакціями Rust. Про редакції розповідає Додаток E.

Більше lint від Clippy

Clippy - це інструмент, що містить набір lint для аналізу вашого коду, щоб ви могли спіймати загальні помилки та поліпшити ваш код на Rust.

Щоб встановити Clippy, введіть наступне:

$ rustup component add clippy

Щоб запустити lint Clippy для будь-якого проєкту Cargo, введіть наступне:

$ cargo clippy

Наприклад, ви пишете програму, що використовує наближення математичної константи, такої як Пі, як ця програма:

Файл: src/main.rs

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. Consider using it directly
 --> src/main.rs:2:13
  |
2 |     let x = 3.1415;
  |             ^^^^^^
  |
  = note: #[deny(clippy::approx_constant)] on by default
  = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/master/index.html#approx_constant

Ця помилка повідомляє, що Rust вже має більш точну константу Пі і що ваша програма буде коректнішою, якщо ви скористаєтеся цією константою. Тоді ви зміните свій код, щоб використовувати константу Пі. Наступний код не призводить до помилок або попереджень від Clippy:

Файл: src/main.rs

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, наприклад the Rust analyzer plug-in for Visual Studio Code.

Відвідайте домашню сторінку проєкту rust-analyzer, щоб отримати інструкцію для встановлення, тоді встановіть підтримку мовного сервера у вашому конкретному IDE. Ваше IDE набуде можливостей, таких, як автодоповнення, перехід до визначення і вбудовані помилки.