ضمیمه د - ابزارهای مفید توسعه
در این ضمیمه، ما درباره برخی ابزارهای مفید توسعه که پروژه Rust ارائه میدهد صحبت میکنیم. به فرمتدهی خودکار، روشهای سریع برای اعمال اصلاحات هشدارها، یک تحلیلگر کد (linter) و یکپارچهسازی با محیطهای توسعه یکپارچه (IDE) خواهیم پرداخت.
فرمتدهی خودکار با rustfmt
ابزار rustfmt
کد شما را بر اساس سبک کدنویسی جامعه فرمت میکند. بسیاری از پروژههای مشترک از rustfmt
استفاده میکنند تا از بحث در مورد سبک کدنویسی در هنگام نوشتن کدهای Rust جلوگیری شود: همه کدهای خود را با استفاده از این ابزار فرمت میکنند.
برای نصب rustfmt
، دستور زیر را وارد کنید:
$ rustup component add rustfmt
این دستور ابزارهای rustfmt
و cargo-fmt
را به شما میدهد، مشابه به اینکه Rust ابزارهای rustc
و cargo
را ارائه میدهد. برای فرمت کردن هر پروژهای که از Cargo استفاده میکند، دستور زیر را وارد کنید:
$ cargo fmt
اجرای این دستور تمام کدهای Rust در crate فعلی را مجدداً فرمت میکند. این کار باید فقط سبک کدنویسی را تغییر دهد، نه معنای کد را. برای اطلاعات بیشتر در مورد rustfmt
، به مستندات آن مراجعه کنید.
اصلاح کد شما با rustfix
ابزار rustfix
که همراه با نصبهای Rust ارائه میشود، میتواند به طور خودکار هشدارهای کامپایلر را که یک راه حل واضح برای رفع مشکل دارند و احتمالاً همان چیزی است که میخواهید، اصلاح کند. احتمالاً قبلاً هشدارهای کامپایلر را دیدهاید. به عنوان مثال، کد زیر را در نظر بگیرید:
Filename: src/main.rs
fn do_something() {} fn main() { for i in 0..100 { do_something(); } }
در اینجا، ما تابع do_something
را 100 بار فراخوانی میکنیم، اما هرگز متغیر i
را در بدنه حلقه 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
کد را تغییر داده است:
Filename: src/main.rs
fn do_something() {} fn main() { for _i in 0..100 { do_something(); } }
اکنون متغیر حلقه for
به نام _i
تغییر یافته است و هشدار دیگر نمایش داده نمیشود.
همچنین میتوانید از دستور cargo fix
برای انتقال کد خود بین نسخههای مختلف Rust استفاده کنید. نسخهها در ضمیمه ه پوشش داده شدهاند.
لینتهای بیشتر با Clippy
ابزار Clippy مجموعهای از تحلیلگرهای کد (لینتها) است که کد شما را تحلیل میکنند تا بتوانید اشتباهات رایج را پیدا کرده و کد Rust خود را بهبود دهید.
برای نصب Clippy، دستور زیر را وارد کنید:
$ rustup component add clippy
برای اجرای تحلیلگرهای 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
را توصیه میکند. این ابزار مجموعهای از ابزارهای متمرکز بر کامپایلر است که با پروتکل زبان سرور کار میکند، که یک مشخصه برای ارتباط IDEها و زبانهای برنامهنویسی با یکدیگر است. مشتریهای مختلف میتوانند از rust-analyzer
استفاده کنند، مانند پلاگین Rust analyzer برای Visual Studio Code.
برای دستورالعملهای نصب، به صفحه اصلی پروژه rust-analyzer
مراجعه کنید، سپس پشتیبانی از سرور زبان را در IDE خاص خود نصب کنید. IDE شما قابلیتهایی مانند تکمیل خودکار، پرش به تعریف و نمایش خطاها به صورت درونخطی را به دست خواهد آورد.