diff --git a/src/imports.rs b/src/imports.rs index cfc2f3bda19..2e42861d1dc 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -566,8 +566,13 @@ impl UseTree { // Normalise foo::self -> foo. if let UseSegmentKind::Slf(None) = last.kind { - if !self.path.is_empty() { - return self; + if let Some(second_last) = self.path.pop() { + if matches!(second_last.kind, UseSegmentKind::Slf(_)) { + self.path.push(second_last); + } else { + self.path.push(second_last); + return self; + } } } diff --git a/tests/source/issue_6558.rs b/tests/source/issue_6558.rs new file mode 100644 index 00000000000..f46add35420 --- /dev/null +++ b/tests/source/issue_6558.rs @@ -0,0 +1,5 @@ +// Removing `self::self` breaks idempotence, leaving it causes a compilation error +// which the user should be made aware of #6558 +use self; +use self::self; +use self::self::self; diff --git a/tests/target/issue_6558.rs b/tests/target/issue_6558.rs new file mode 100644 index 00000000000..14efa1619df --- /dev/null +++ b/tests/target/issue_6558.rs @@ -0,0 +1,4 @@ +// Removing `self::self` breaks idempotence, leaving it causes a compilation error +// which the user should be made aware of #6558 +use self::self; +use self::self::self;