Skip to content

Clippy cannot --fix self imports with unused imports in the same import list #14450

Closed as duplicate of#133750
@richardsamuels

Description

@richardsamuels

Summary

As a part of a larger project, I encountered an issue with clippy --fix

My Project had an import that looks like this:
use something::{self as s, SomeStruct};

My code accesses SomeStruct as s::SomeStruct while SomeStruct is actually an unused import. When clippy attempts to correct this, it generates use something::self as s;, which is incorrect rust

Issue occurs on both stable and nightly. Full clippy output and reproducer below

Reproducer

To reproduce, just cargo init and replace main.rs with the following code and run cargo clippy --fix:

mod something {
    pub struct SomeStruct {}

    impl SomeStruct {
        pub fn new() -> Self {
            SomeStruct {}
        }
        pub fn some_func(&self) {
            println!("Hello, world!");
        }
    }
}

use something::{self as s, SomeStruct};

fn main() {
    let s = s::SomeStruct::new();

    s.some_func();
}

I expected use something::{self as s, SomeStruct}; to be reduced to use something as s;

Version

Stable:
rustc 1.85.1 (4eb161250 2025-03-15)
binary: rustc
commit-hash: 4eb161250e340c8f48f66e2b929ef4a5bed7c181
commit-date: 2025-03-15
host: aarch64-apple-darwin
release: 1.85.1
LLVM version: 19.1.7

Stable Clippy: clippy 0.1.85 (4eb161250e 2025-03-15)

Nightly:
rustc 1.87.0-nightly (be73c1f46 2025-03-21)
binary: rustc
commit-hash: be73c1f4617c97bce81b2694a767353300a75072
commit-date: 2025-03-21
host: aarch64-apple-darwin
release: 1.87.0-nightly
LLVM version: 20.1.1

Nightly clippy: clippy 0.1.87 (be73c1f461 2025-03-21)

Additional Labels

No response

Clippy Error Log

clippy --fix output
    Checking rs-bug v0.1.0 (/Users/rsamuels/code/rs-bug)
warning: failed to automatically apply fixes suggested by rustc to crate `rs_bug`

after fixes were automatically applied the compiler reported errors within these files:

  • src/main.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/rust-clippy/issues
quoting the full output of this command we'd be very appreciative!
Note that you may be able to make some more progress in the near-term
fixing code with the --broken-code flag

The following errors were reported:
error[E0429]: self imports are only allowed within a { } list
--> src/main.rs:14:14
|
14 | use something::self as s;
| ^^^^^^
|
help: consider importing the module directly
|
14 - use something::self as s;
14 + use something as s;
|
help: alternatively, use the multi-path use syntax to import self
|
14 | use something::{self as s};
| + +

error: aborting due to 1 previous error

For more information about this error, try rustc --explain E0429.
Original diagnostics will follow.

warning: unused import: SomeStruct
--> src/main.rs:14:28
|
14 | use something::{self as s, SomeStruct};
| ^^^^^^^^^^
|
= note: #[warn(unused_imports)] on by default

warning: rs-bug (bin "rs-bug") generated 1 warning (run cargo clippy --fix --bin "rs-bug" to apply 1 suggestion)
warning: failed to automatically apply fixes suggested by rustc to crate rs_bug

after fixes were automatically applied the compiler reported errors within these files:

  • src/main.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/rust-clippy/issues
quoting the full output of this command we'd be very appreciative!
Note that you may be able to make some more progress in the near-term
fixing code with the --broken-code flag

The following errors were reported:
error[E0429]: self imports are only allowed within a { } list
--> src/main.rs:14:14
|
14 | use something::self as s;
| ^^^^^^
|
help: consider importing the module directly
|
14 - use something::self as s;
14 + use something as s;
|
help: alternatively, use the multi-path use syntax to import self
|
14 | use something::{self as s};

| + +

error: aborting due to 1 previous error

For more information about this error, try rustc --explain E0429.
Original diagnostics will follow.

warning: rs-bug (bin "rs-bug" test) generated 1 warning (1 duplicate)
Finished dev profile [unoptimized + debuginfo] target(s) in 0.25s

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: Clippy is not doing the correct thingI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when applied

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions