Skip to content

Commit 2f693d6

Browse files
import_granularity: Don't normalize imports with comments
1 parent b26c86b commit 2f693d6

9 files changed

+264
-13
lines changed

src/imports.rs

+15-2
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ impl UseSegment {
181181
}
182182
})
183183
}
184+
185+
fn contains_comment(&self) -> bool {
186+
if let UseSegment::List(list) = self {
187+
list.iter().any(|subtree| subtree.contains_comment())
188+
} else {
189+
false
190+
}
191+
}
184192
}
185193

186194
pub(crate) fn normalize_use_trees_with_granularity(
@@ -197,7 +205,7 @@ pub(crate) fn normalize_use_trees_with_granularity(
197205

198206
let mut result = Vec::with_capacity(use_trees.len());
199207
for use_tree in use_trees {
200-
if use_tree.has_comment() || use_tree.attrs.is_some() {
208+
if use_tree.contains_comment() || use_tree.attrs.is_some() {
201209
result.push(use_tree);
202210
continue;
203211
}
@@ -556,6 +564,10 @@ impl UseTree {
556564
self.list_item.as_ref().map_or(false, ListItem::has_comment)
557565
}
558566

567+
fn contains_comment(&self) -> bool {
568+
self.has_comment() || self.path.iter().any(|path| path.contains_comment())
569+
}
570+
559571
fn same_visibility(&self, other: &UseTree) -> bool {
560572
match (&self.visibility, &other.visibility) {
561573
(
@@ -582,6 +594,7 @@ impl UseTree {
582594
if self.path.is_empty()
583595
|| other.path.is_empty()
584596
|| self.attrs.is_some()
597+
|| self.contains_comment()
585598
|| !self.same_visibility(other)
586599
{
587600
false
@@ -597,7 +610,7 @@ impl UseTree {
597610
}
598611

599612
fn flatten(self, import_granularity: ImportGranularity) -> Vec<UseTree> {
600-
if self.path.is_empty() {
613+
if self.path.is_empty() || self.contains_comment() {
601614
return vec![self];
602615
}
603616
match self.path.clone().last().unwrap() {

tests/source/imports_granularity_crate.rs

+28
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,31 @@ use j::{a::{self}};
3535

3636
use {k::{a, b}, l::{a, b}};
3737
use {k::{c, d}, l::{c, d}};
38+
39+
use b::{f::g, h::{i, j} /* After b::h group */};
40+
use b::e;
41+
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
42+
use b::d;
43+
use b::r; // After b::r
44+
use b::q::{self /* After b::q::self */};
45+
use b::u::{
46+
a,
47+
b,
48+
};
49+
use b::t::{
50+
// Before b::t::a
51+
a,
52+
b,
53+
};
54+
use b::s::{
55+
a,
56+
b, // After b::s::b
57+
};
58+
use b::v::{
59+
// Before b::v::a
60+
a,
61+
// Before b::v::b
62+
b,
63+
};
64+
use b::t::{/* Before b::t::self */ self};
65+
use b::c;

tests/source/imports_granularity_item.rs

+28
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,31 @@ use a::{b, c, d};
44
use a::{f::g, h::{i, j}};
55
use a::{l::{self, m, n::o, p::*}};
66
use a::q::{self};
7+
8+
use b::{f::g, h::{i, j} /* After b::h group */};
9+
use b::e;
10+
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
11+
use b::d;
12+
use b::r; // After b::r
13+
use b::q::{self /* After b::q::self */};
14+
use b::u::{
15+
a,
16+
b,
17+
};
18+
use b::t::{
19+
// Before b::t::a
20+
a,
21+
b,
22+
};
23+
use b::s::{
24+
a,
25+
b, // After b::s::b
26+
};
27+
use b::v::{
28+
// Before b::v::a
29+
a,
30+
// Before b::v::b
31+
b,
32+
};
33+
use b::t::{/* Before b::t::self */ self};
34+
use b::c;

tests/source/imports_granularity_module.rs

+28
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,31 @@ use bar::{
1717
c::d,
1818
e::f,
1919
};
20+
21+
use b::{f::g, h::{i, j} /* After b::h group */};
22+
use b::e;
23+
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
24+
use b::d;
25+
use b::r; // After b::r
26+
use b::q::{self /* After b::q::self */};
27+
use b::u::{
28+
a,
29+
b,
30+
};
31+
use b::t::{
32+
// Before b::t::a
33+
a,
34+
b,
35+
};
36+
use b::s::{
37+
a,
38+
b, // After b::s::b
39+
};
40+
use b::v::{
41+
// Before b::v::a
42+
a,
43+
// Before b::v::b
44+
b,
45+
};
46+
use b::t::{/* Before b::t::self */ self};
47+
use b::c;

tests/source/imports_granularity_one.rs

+28
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,31 @@ use a::{
5858
};
5959
use b as x;
6060
use a::ad::ada;
61+
62+
use b::{f::g, h::{i, j} /* After b::h group */};
63+
use b::e;
64+
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
65+
use b::d;
66+
use b::r; // After b::r
67+
use b::q::{self /* After b::q::self */};
68+
use b::u::{
69+
a,
70+
b,
71+
};
72+
use b::t::{
73+
// Before b::t::a
74+
a,
75+
b,
76+
};
77+
use b::s::{
78+
a,
79+
b, // After b::s::b
80+
};
81+
use b::v::{
82+
// Before b::v::a
83+
a,
84+
// Before b::v::b
85+
b,
86+
};
87+
use b::t::{/* Before b::t::self */ self};
88+
use b::c;

tests/target/imports_granularity_crate.rs

+31
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,34 @@ use j::a::{self};
2626

2727
use k::{a, b, c, d};
2828
use l::{a, b, c, d};
29+
30+
use b::q::{self /* After b::q::self */};
31+
use b::r; // After b::r
32+
use b::s::{
33+
a,
34+
b, // After b::s::b
35+
};
36+
use b::t::{/* Before b::t::self */ self};
37+
use b::t::{
38+
// Before b::t::a
39+
a,
40+
b,
41+
};
42+
use b::v::{
43+
// Before b::v::a
44+
a,
45+
// Before b::v::b
46+
b,
47+
};
48+
use b::{
49+
c, d, e,
50+
u::{a, b},
51+
};
52+
use b::{
53+
f::g,
54+
h::{i, j}, /* After b::h group */
55+
};
56+
use b::{
57+
/* Before b::l group */ l::{self, m, n::o, p::*},
58+
q,
59+
};

tests/target/imports_granularity_item.rs

+32
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,35 @@ use a::l::n::o;
1111
use a::l::p::*;
1212
use a::l::{self};
1313
use a::q::{self};
14+
15+
use b::c;
16+
use b::d;
17+
use b::e;
18+
use b::q::{self /* After b::q::self */};
19+
use b::r; // After b::r
20+
use b::s::{
21+
a,
22+
b, // After b::s::b
23+
};
24+
use b::t::{/* Before b::t::self */ self};
25+
use b::t::{
26+
// Before b::t::a
27+
a,
28+
b,
29+
};
30+
use b::u::a;
31+
use b::u::b;
32+
use b::v::{
33+
// Before b::v::a
34+
a,
35+
// Before b::v::b
36+
b,
37+
};
38+
use b::{
39+
f::g,
40+
h::{i, j}, /* After b::h group */
41+
};
42+
use b::{
43+
/* Before b::l group */ l::{self, m, n::o, p::*},
44+
q,
45+
};

tests/target/imports_granularity_module.rs

+36-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,39 @@ use foo::e;
1717
#[cfg(test)]
1818
use foo::{a::b, c::d};
1919

20-
use bar::a::b;
21-
use bar::c::d;
22-
use bar::e::f;
20+
use bar::{
21+
// comment
22+
a::b,
23+
// more comment
24+
c::d,
25+
e::f,
26+
};
27+
28+
use b::q::{self /* After b::q::self */};
29+
use b::r; // After b::r
30+
use b::s::{
31+
a,
32+
b, // After b::s::b
33+
};
34+
use b::t::{/* Before b::t::self */ self};
35+
use b::t::{
36+
// Before b::t::a
37+
a,
38+
b,
39+
};
40+
use b::u::{a, b};
41+
use b::v::{
42+
// Before b::v::a
43+
a,
44+
// Before b::v::b
45+
b,
46+
};
47+
use b::{c, d, e};
48+
use b::{
49+
f::g,
50+
h::{i, j}, /* After b::h group */
51+
};
52+
use b::{
53+
/* Before b::l group */ l::{self, m, n::o, p::*},
54+
q,
55+
};

tests/target/imports_granularity_one.rs

+38-8
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,42 @@ use {
6868
c::{self, ca},
6969
};
7070

71-
use {
72-
a::{
73-
aa::{aaa, aab},
74-
ab,
75-
ac::aca,
76-
ad::ada,
77-
},
78-
b as x,
71+
use a::{
72+
// some comment
73+
aa::{aaa, aab},
74+
ab,
75+
// another comment
76+
ac::aca,
77+
};
78+
use {a::ad::ada, b as x};
79+
80+
use b::q::{self /* After b::q::self */};
81+
use b::r; // After b::r
82+
use b::s::{
83+
a,
84+
b, // After b::s::b
85+
};
86+
use b::t::{/* Before b::t::self */ self};
87+
use b::t::{
88+
// Before b::t::a
89+
a,
90+
b,
91+
};
92+
use b::v::{
93+
// Before b::v::a
94+
a,
95+
// Before b::v::b
96+
b,
97+
};
98+
use b::{
99+
c, d, e,
100+
u::{a, b},
101+
};
102+
use b::{
103+
f::g,
104+
h::{i, j}, /* After b::h group */
105+
};
106+
use b::{
107+
/* Before b::l group */ l::{self, m, n::o, p::*},
108+
q,
79109
};

0 commit comments

Comments
 (0)