Tool to clean up "use" declarations?

I'm looking for a tool I can run to clean up "use" declarations in my project. This would mean removing unused imports, switching the imports to a canonical form, sorting them alphabetically, etc. Does something like this exist?

At least some of this tasks are performed by rustfmt, AFAIK.

1 Like

Yeah, besides the unused declarations thing, rustfmt does all of these.

1 Like

And cargo fix is a tool for automatically fixing some things in Rust. It fixes unused imports warnings by removing them. Make sure to enable the warnings you want to have fixed (remove any allow directives in the code). Not every warning can be automatically fixed, but cargo fix can do quite a lot.

$ cargo build
warning: unused import: `std::collections::HashMap`
   --> src\
119 | use std::collections::HashMap;
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
    = note: `#[warn(unused_imports)]` on by default

warning: 1 warning emitted

$ cargo fix --lib
      Fixing src\ (1 fix)
    Finished dev [unoptimized + debuginfo] target(s) in 8.73s

$ git diff
diff --git src/ src/
index 70bce0ed..0e03ee49 100644
--- src/
+++ src/
@@ -116,7 +116,7 @@ pub mod doc;

 use std::marker::PhantomData;
 use std::sync::Arc;
-use std::collections::HashMap;

 pub use crate::dimension::dim::*;


For merging imports, if you're OK with using nighlty rustfmt, you can make a rustfmt.toml file with:

merge_imports = true

Then cargo fmt will merge imports, and sort them. Otherwise it will only sort the imports and won't merge different ones.

Running that and cargo fix should work. I usually git add -A and then cargo fix --allow-staged (usually cargo fix can only be run on a clean commit).

1 Like

Interesting, cargo fix --all-features definitely does not remove unused imports for me... I still get couple dozen unused import warnings after running it.

1 Like

too bad merge_imports = true isn't default setting.
i have to define my own setting and not use the 'standard' formatting guidelines.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.