# G - Other useful tools

In this appendix, we'll talk about some additional tools that are provided by the Rust project, and are useful when developing Rust code.

## Automatic formatting with `rustfmt`

`rustfmt` is a tool that can re-format your code according to community norms. Many projects use `rustfmt` to prevent arguments about which style to use when writing Rust: just do what the tool does!

`rustfmt` is not at 1.0 yet, but a preview is available for you to use in the meantime. Please give it a try and let us know how it goes!

To install `rustfmt`:

    $ rustup component add rustfmt-preview

This will give you both `rustfmt` and `cargo-fmt`, similar to how Rust gives you both `rustc` and `cargo`. To take any Cargo project and format it:

    $ cargo fmt

## Fix up your code with `rustfix`

If you’ve written code in Rust before, you’ve probably seen a compiler warning before. For example, consider this code:

    fn do_something() {}

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

Here, we’re calling do_something a hundred times. But we never use the variable i. And so Rust warns:

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

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

See how it suggests that we use `_i` as a name instead? We can automatically apply that suggestion with 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

If we look at `src\main.rs` again, we’ll see that the code has changed:

    fn do_something() {}

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

We’re now using `_i`, and the warning will no longer appear.

`cargo fix` can also be used to transition your code between different editions of Rust. Editions are covered in Appendix H.

## More lints with `clippy`

`clippy` is a bunch of lints to catch common mistakes and improve your Rust code.

`clippy` is not at 1.0 yet, but a preview is available for you to use in the meantime. Please give it a try and let us know how it goes!

To install `clippy`:

    $ rustup component add clippy-preview

To take any Cargo project and run clippy's lints on it:

    $ cargo clippy

## IDE integration with the Rust Language Server

To help IDE integration, the Rust project distributes `rls`, the Rust Language Server, as in http://langserver.org/. This can be used by different clients, such as the Rust plugin for Visual Studio: Code.

The `rls` is not at 1.0 yet, but a preview is available for you to use in the meantime. Please give it a try and let us know how it goes!

To install the `rls`:

    $ rustup component add rls-preview

Then, install the language server support in your particular IDE, and it should all work.