The rustfmt tool reformats your code according to the community code style. Many collaborative projects use rustfmt to prevent arguments about which style to use when writing Rust: everyone formats their code using the tool.

    To install rustfmt, enter the following:

    This command gives you rustfmt and cargo-fmt, similar to how Rust gives you both rustc and cargo. To format any Cargo project, enter the following:

    1. $ cargo fmt

    Running this command reformats all the Rust code in the current crate. This should only change the code style, not the code semantics. For more information on rustfmt, see .

    The rustfix tool is included with Rust installations and can automatically fix compiler warnings that have a clear way to correct the problem that’s likely what you want. It’s likely you’ve seen compiler warnings before. For example, consider this code:

    Filename: src/main.rs

    1. fn do_something() {}
    2. fn main() {
    3. for i in 0..100 {
    4. do_something();

    Here, we’re calling the do_something function 100 times, but we never use the variable i in the body of the for loop. Rust warns us about that:

    1. $ cargo fix
    2. Checking myprogram v0.1.0 (file:///projects/myprogram)
    3. Fixing src/main.rs (1 fix)
    4. Finished dev [unoptimized + debuginfo] target(s) in 0.59s

    When we look at src/main.rs again, we’ll see that cargo fix has changed the code:

    Filename: src/main.rs

    1. fn do_something() {}
    2. fn main() {
    3. for _i in 0..100 {
    4. do_something();
    5. }

    The for loop variable is now named , and the warning no longer appears.

    You can also use the cargo fix command to transition your code between different Rust editions. Editions are covered in Appendix E.

    The Clippy tool is a collection of lints to analyze your code so you can catch common mistakes and improve your Rust code.

    To install Clippy, enter the following:

    To run Clippy’s lints on any Cargo project, enter the following:

    1. $ cargo clippy

    Filename: src/main.rs

    1. fn main() {
    2. let x = 3.1415;
    3. let r = 8.0;
    4. println!("the area of the circle is {}", x * r * r);
    5. }

    Running cargo clippy on this project results in this error:

    This error lets you know that Rust already has a more precise PI constant defined, and that your program would be more correct if you used the constant instead. You would then change your code to use the PI constant. The following code doesn’t result in any errors or warnings from Clippy:

    Filename: src/main.rs

    1. fn main() {
    2. let x = std::f64::consts::PI;
    3. let r = 8.0;
    4. }

    For more information on Clippy, see its documentation.

    To help IDE integration, the Rust community recommends using rust-analyzer. This tool is a set of compiler-centric utilities that speaks the , which is a specification for IDEs and programming languages to communicate with each other. Different clients can use rust-analyzer, such as the Rust analyzer plug-in for Visual Studio Code.

    Visit the rust-analyzer project’s for installation instructions, then install the language server support in your particular IDE. Your IDE will gain abilities such as autocompletion, jump to definition, and inline errors.