ภาคผนวก D: เครื่องมือพัฒนาที่เป็นประโยชน์ (Useful Development Tools)
ในภาคผนวกนี้ เราจะพูดถึงเครื่องมือการพัฒนาที่เป็นประโยชน์ซึ่งโครงการ Rust มีเตรียมไว้ให้ เราจะมาทำความรู้จักกับการจัดรูปแบบโค้ดโดยอัตโนมัติ, วิธีจัดการแก้ไขตามคำเตือนอย่างรวดเร็ว, เครื่องมือตรวจสอบรูปแบบโค้ด (linter) และการเชื่อมต่อทำงานร่วมกับ IDE ต่างๆ
การจัดรูปแบบโค้ดโดยอัตโนมัติด้วย rustfmt
เครื่องมือ rustfmt ทำหน้าที่จัดรูปแบบโครงสร้างโค้ดของคุณใหม่ตามรูปแบบการเขียนโค้ดมาตรฐานของชุมชน โครงการที่ร่วมกันพัฒนาหลายโครงการเลือกใช้งาน rustfmt เพื่อขจัดข้อโต้แย้งเกี่ยวกับการเลือกใช้รูปแบบโค้ดเมื่อเขียนภาษา Rust: โดยกำหนดให้ทุกคนจัดรูปแบบโค้ดของตนด้วยเครื่องมือตัวนี้
การติดตั้ง Rust จะรวม rustfmt มาให้เป็นค่าเริ่มต้น ดังนั้นคุณจึงควรมีโปรแกรม rustfmt และ cargo-fmt ติดตั้งอยู่บนระบบของคุณแล้ว คำสั่งทั้งสองนี้เปรียบได้กับ rustc และ cargo โดยที่ rustfmt ช่วยให้ควบคุมรายละเอียดได้เจาะลึกขึ้น ขณะที่ cargo-fmt จะเข้าใจข้อกำหนดเฉพาะของโครงการที่ใช้งาน Cargo หากต้องการจัดรูปแบบโครงการ Cargo ใดๆ ให้ป้อนคำสั่งดังต่อไปนี้:
$ cargo fmt
การรันคำสั่งนี้จะจัดรูปแบบโค้ด Rust ทั้งหมดในเครตปัจจุบันใหม่ ซึ่งจะมีผลต่อการเปลี่ยนรูปแบบการเขียนโค้ดเท่านั้น โดยไม่มีการแก้ไขการทำงาน (semantics) ของโค้ดแต่อย่างใด ศึกษาข้อมูลเพิ่มเติมเกี่ยวกับ rustfmt ได้ที่ เอกสารประกอบการใช้งาน
แก้ไขโค้ดของคุณด้วย rustfix
เครื่องมือ rustfix รวมอยู่ในการติดตั้ง Rust และสามารถแก้ไขคำเตือนของคอมไพเลอร์ได้โดยอัตโนมัติ ในกรณีที่มีแนวทางแก้ไขปัญหาที่ชัดเจนและมักเป็นสิ่งที่คุณต้องการแก้ไขอยู่แล้ว คุณอาจเคยเห็นคำเตือนของคอมไพเลอร์มาก่อนแล้ว ตัวอย่างเช่น พิจารณาโค้ดต่อไปนี้:
ชื่อไฟล์: src/main.rs
fn main() {
let mut x = 42;
println!("{x}");
}
ในจุดนี้ เรากำลังนิยามตัวแปร x เป็นแบบที่สามารถแก้ไขค่าได้ (mut) แต่เราไม่เคยทำการเปลี่ยนแปลงค่าของมันเลย 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 ไม่สามารถแก้ไขค่าได้แล้ว (immutable) และคำเตือนก็จะไม่แสดงขึ้นมาอีก
นอกจากนี้ คุณยังสามารถใช้คำสั่ง cargo fix เพื่อเปลี่ยนผ่านโค้ดของคุณไปมาระหว่าง Rust รุ่น (editions) ต่างๆ ได้อีกด้วย โดยข้อมูลของรุ่นต่างๆ จะครอบคลุมอยู่ใน ภาคผนวก E
ตรวจสอบรูปแบบโค้ดเพิ่มเติมด้วย Clippy
เครื่องมือ Clippy คือชุดรวบรวมการวิเคราะห์สไตล์การเขียนโค้ด (lints) เพื่อช่วยวิเคราะห์โปรแกรมของคุณ เพื่อป้องกันและตรวจหาข้อผิดพลาดที่มักเกิดขึ้นได้บ่อย ตลอดจนช่วยปรับปรุงพัฒนาโค้ดภาษา 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 (LSP) ซึ่งเป็นข้อกำหนดมาตรฐานสำหรับให้ IDE และภาษานักพัฒนาโปรแกรมสามารถสื่อสารติดต่อระหว่างกันได้ ไคลเอนต์ชนิดต่างๆ สามารถใช้งาน rust-analyzer ร่วมด้วยได้ เช่น ปลั๊กอิน Rust analyzer สำหรับ Visual Studio Code
คุณสามารถเข้าไปเยี่ยมชม โฮมเพจของโครงการ rust-analyzer สำหรับคู่มือคำแนะนำในการติดตั้ง จากนั้นจึงทำการติดตั้งชุดเสริมการทำงานสำหรับ IDE เฉพาะที่คุณกำลังใช้งานอยู่ IDE ของคุณก็จะได้รับความสามารถที่สะดวกสบายเพิ่มขึ้น เช่น การเติมคำอัตโนมัติ (autocompletion), การข้ามไปยังจุดนิยาม (jump to definition) และการแสดงข้อผิดพลาดภายในการพิมพ์โค้ด (inline errors)