Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ضمیمه د - ابزارهای مفید توسعه

در این ضمیمه، ما درباره برخی ابزارهای مفید توسعه که پروژه Rust ارائه می‌دهد صحبت می‌کنیم. به فرمت‌دهی خودکار، روش‌های سریع برای اعمال اصلاحات هشدارها، یک تحلیلگر کد (linter) و یکپارچه‌سازی با محیط‌های توسعه یکپارچه (IDE) خواهیم پرداخت.

فرمت‌دهی خودکار با rustfmt

نصب‌های Rust به‌صورت پیش‌فرض شامل rustfmt هستند، بنابراین احتمالاً هم‌اکنون برنامه‌های rustfmt و cargo-fmt روی سیستم شما نصب شده‌اند. این دو دستور همانند rustc و cargo هستند؛ به این صورت که rustfmt کنترل دقیق‌تری ارائه می‌دهد و cargo-fmt با ساختار و قراردادهای پروژه‌های مبتنی بر Cargo آشنایی دارد. برای قالب‌بندی هر پروژه‌ی Cargo، دستور زیر را وارد کنید:

$ cargo fmt

اجرای این دستور تمام کدهای Rust در crate فعلی را مجدداً فرمت می‌کند. این کار باید فقط سبک کدنویسی را تغییر دهد، نه معنای کد را. برای اطلاعات بیشتر در مورد rustfmt، به مستندات آن مراجعه کنید.

اصلاح کد شما با rustfix

ابزار rustfix همراه با نصب Rust ارائه می‌شود و می‌تواند هشدارهای کامپایلر را به‌صورت خودکار برطرف کند، آن هم در مواردی که راه‌حل مشخصی برای رفع مشکل وجود دارد و احتمالاً همان چیزی است که شما انتظار دارید. احتمالاً پیش از این با هشدارهای کامپایلر روبه‌رو شده‌اید. برای مثال، به کد زیر توجه کنید:

Filename: src/main.rs

fn main() {
    let mut x = 42;
    println!("{x}");
}

در اینجا، متغیر x را به‌صورت قابل‌تغییر (mutable)
تعریف کرده‌ایم، اما در عمل هیچ‌گاه آن را تغییر نمی‌دهیم.
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 اکنون غیرقابل‌تغییر (immutable) شده است و هشدار نیز دیگر نمایش داده نمی‌شود.

همچنین می‌توانید از دستور cargo fix برای انتقال کد خود بین نسخه‌های مختلف Rust استفاده کنید. نسخه‌ها در ضمیمه ه پوشش داده شده‌اند.

لینت‌های بیشتر با Clippy

ابزار Clippy مجموعه‌ای از lintها برای تحلیل کد شماست تا بتوانید خطاهای رایج را شناسایی کرده و کد Rust خود را بهبود دهید. Clippy همراه با نصب استاندارد Rust در دسترس است.

برای اجرای تحلیلگرهای Clippy روی هر پروژه Cargo، دستور زیر را وارد کنید:

$ cargo clippy

به عنوان مثال، فرض کنید برنامه‌ای می‌نویسید که از یک مقدار تقریبی برای یک ثابت ریاضی، مانند pi، استفاده می‌کند، همانطور که این برنامه انجام می‌دهد:

Filename: 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
 --> 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 ایجاد نمی‌کند:

Filename: 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 را توصیه می‌کند. این ابزار مجموعه‌ای از ابزارهای وابسته به کامپایلر است که با پروتکل زبان سرور (LSP) ارتباط برقرار می‌کند؛ این پروتکل مشخصاتی است برای ارتباط میان IDEها و زبان‌های برنامه‌نویسی. کلاینت‌های مختلفی می‌توانند از rust-analyzer استفاده کنند، مانند افزونه‌ی Rust Analyzer برای Visual Studio Code.

برای دریافت دستورالعمل نصب، به صفحه‌ی اصلی پروژه‌ی rust-analyzer مراجعه کنید، سپس پشتیبانی از language server را در IDE خود نصب نمایید. پس از آن، امکاناتی مانند تکمیل خودکار، پرش به تعریف، و نمایش خطاها به‌صورت درون‌خطی به IDE شما اضافه خواهد شد.