import_granularity: Don't normalize imports with comments

This commit is contained in:
David Lattimore 2022-04-30 15:12:06 +10:00 committed by Caleb Cartwright
parent b08b2daeb6
commit 95837832f4
9 changed files with 264 additions and 13 deletions

@ -181,6 +181,14 @@ impl UseSegment {
}
})
}
fn contains_comment(&self) -> bool {
if let UseSegment::List(list) = self {
list.iter().any(|subtree| subtree.contains_comment())
} else {
false
}
}
}
pub(crate) fn normalize_use_trees_with_granularity(
@ -197,7 +205,7 @@ pub(crate) fn normalize_use_trees_with_granularity(
let mut result = Vec::with_capacity(use_trees.len());
for use_tree in use_trees {
if use_tree.has_comment() || use_tree.attrs.is_some() {
if use_tree.contains_comment() || use_tree.attrs.is_some() {
result.push(use_tree);
continue;
}
@ -556,6 +564,10 @@ impl UseTree {
self.list_item.as_ref().map_or(false, ListItem::has_comment)
}
fn contains_comment(&self) -> bool {
self.has_comment() || self.path.iter().any(|path| path.contains_comment())
}
fn same_visibility(&self, other: &UseTree) -> bool {
match (&self.visibility, &other.visibility) {
(
@ -582,6 +594,7 @@ impl UseTree {
if self.path.is_empty()
|| other.path.is_empty()
|| self.attrs.is_some()
|| self.contains_comment()
|| !self.same_visibility(other)
{
false
@ -597,7 +610,7 @@ impl UseTree {
}
fn flatten(self, import_granularity: ImportGranularity) -> Vec<UseTree> {
if self.path.is_empty() {
if self.path.is_empty() || self.contains_comment() {
return vec![self];
}
match self.path.clone().last().unwrap() {

@ -35,3 +35,31 @@ use j::{a::{self}};
use {k::{a, b}, l::{a, b}};
use {k::{c, d}, l::{c, d}};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;

@ -4,3 +4,31 @@ use a::{b, c, d};
use a::{f::g, h::{i, j}};
use a::{l::{self, m, n::o, p::*}};
use a::q::{self};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;

@ -17,3 +17,31 @@ use bar::{
c::d,
e::f,
};
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;

@ -58,3 +58,31 @@ use a::{
};
use b as x;
use a::ad::ada;
use b::{f::g, h::{i, j} /* After b::h group */};
use b::e;
use b::{/* Before b::l group */ l::{self, m, n::o, p::*}, q};
use b::d;
use b::r; // After b::r
use b::q::{self /* After b::q::self */};
use b::u::{
a,
b,
};
use b::t::{
// Before b::t::a
a,
b,
};
use b::s::{
a,
b, // After b::s::b
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::t::{/* Before b::t::self */ self};
use b::c;

@ -26,3 +26,34 @@ use j::a::{self};
use k::{a, b, c, d};
use l::{a, b, c, d};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
c, d, e,
u::{a, b},
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};

@ -11,3 +11,35 @@ use a::l::n::o;
use a::l::p::*;
use a::l::{self};
use a::q::{self};
use b::c;
use b::d;
use b::e;
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::u::a;
use b::u::b;
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};

@ -17,6 +17,39 @@ use foo::e;
#[cfg(test)]
use foo::{a::b, c::d};
use bar::a::b;
use bar::c::d;
use bar::e::f;
use bar::{
// comment
a::b,
// more comment
c::d,
e::f,
};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::u::{a, b};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{c, d, e};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};

@ -68,12 +68,42 @@ use {
c::{self, ca},
};
use {
a::{
aa::{aaa, aab},
ab,
ac::aca,
ad::ada,
},
b as x,
use a::{
// some comment
aa::{aaa, aab},
ab,
// another comment
ac::aca,
};
use {a::ad::ada, b as x};
use b::q::{self /* After b::q::self */};
use b::r; // After b::r
use b::s::{
a,
b, // After b::s::b
};
use b::t::{/* Before b::t::self */ self};
use b::t::{
// Before b::t::a
a,
b,
};
use b::v::{
// Before b::v::a
a,
// Before b::v::b
b,
};
use b::{
c, d, e,
u::{a, b},
};
use b::{
f::g,
h::{i, j}, /* After b::h group */
};
use b::{
/* Before b::l group */ l::{self, m, n::o, p::*},
q,
};