Skip to content

Commit 0e90855

Browse files
authored
imports_granularity = "Module" with path contains self (#4716)
* Fix for issue 4681 - Module imports_granularity and self in path * Change wrong rustfmt-imports_granularity Item in test file to Module
1 parent 65f41f3 commit 0e90855

5 files changed

+35
-1
lines changed

Diff for: src/formatting/imports.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,19 @@ pub(crate) fn merge_use_trees(use_trees: Vec<UseTree>, merge_by: SharedPrefix) -
168168
continue;
169169
}
170170

171-
for flattened in use_tree.flatten() {
171+
for mut flattened in use_tree.flatten() {
172+
if merge_by == SharedPrefix::Module {
173+
// If a path ends in `::self`, rewrite it to `::{self}`.
174+
if let Some(UseSegment::Slf(..)) = flattened.path.last() {
175+
let self_segment = flattened.path.pop().unwrap();
176+
flattened
177+
.path
178+
.push(UseSegment::List(vec![UseTree::from_path(
179+
vec![self_segment],
180+
DUMMY_SP,
181+
)]));
182+
}
183+
}
172184
if let Some(tree) = result
173185
.iter_mut()
174186
.find(|tree| tree.share_prefix(&flattened, merge_by))
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::lexer;
2+
use crate::lexer::tokens::TokenData;
3+
use crate::lexer::{tokens::TokenData};
4+
use crate::lexer::self;
5+
use crate::lexer::{self};
6+
use crate::lexer::{self, tokens::TokenData};
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// rustfmt-imports_granularity: Module
2+
3+
use crate::lexer;
4+
use crate::lexer::self;
5+
use crate::lexer::{self, tokens::TokenData};
+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
use crate::lexer;
2+
use crate::lexer;
3+
use crate::lexer::tokens::TokenData;
4+
use crate::lexer::tokens::TokenData;
5+
use crate::lexer::{self};
6+
use crate::lexer::{self, tokens::TokenData};
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// rustfmt-imports_granularity: Module
2+
3+
use crate::lexer;
4+
use crate::lexer::tokens::TokenData;
5+
use crate::lexer::{self};

0 commit comments

Comments
 (0)