about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/imports.rs17
-rw-r--r--tests/source/imports_granularity_crate.rs28
-rw-r--r--tests/source/imports_granularity_item.rs28
-rw-r--r--tests/source/imports_granularity_module.rs28
-rw-r--r--tests/source/imports_granularity_one.rs28
-rw-r--r--tests/target/imports_granularity_crate.rs31
-rw-r--r--tests/target/imports_granularity_item.rs32
-rw-r--r--tests/target/imports_granularity_module.rs39
-rw-r--r--tests/target/imports_granularity_one.rs46
9 files changed, 264 insertions, 13 deletions
diff --git a/src/imports.rs b/src/imports.rs
index efe4e9498c9..962f2126c66 100644
--- a/src/imports.rs
+++ b/src/imports.rs
@@ -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() {
diff --git a/tests/source/imports_granularity_crate.rs b/tests/source/imports_granularity_crate.rs
index d16681b01b5..f6f7761e82e 100644
--- a/tests/source/imports_granularity_crate.rs
+++ b/tests/source/imports_granularity_crate.rs
@@ -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;
diff --git a/tests/source/imports_granularity_item.rs b/tests/source/imports_granularity_item.rs
index d0e94df66ae..b82c0d33caf 100644
--- a/tests/source/imports_granularity_item.rs
+++ b/tests/source/imports_granularity_item.rs
@@ -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;
diff --git a/tests/source/imports_granularity_module.rs b/tests/source/imports_granularity_module.rs
index 2d7bb299aaa..c7f68cea6d4 100644
--- a/tests/source/imports_granularity_module.rs
+++ b/tests/source/imports_granularity_module.rs
@@ -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;
diff --git a/tests/source/imports_granularity_one.rs b/tests/source/imports_granularity_one.rs
index c21707df395..4d5a4795641 100644
--- a/tests/source/imports_granularity_one.rs
+++ b/tests/source/imports_granularity_one.rs
@@ -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;
diff --git a/tests/target/imports_granularity_crate.rs b/tests/target/imports_granularity_crate.rs
index d75906d30f1..36e01558ff0 100644
--- a/tests/target/imports_granularity_crate.rs
+++ b/tests/target/imports_granularity_crate.rs
@@ -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,
+};
diff --git a/tests/target/imports_granularity_item.rs b/tests/target/imports_granularity_item.rs
index eace785e670..d2f5496fdac 100644
--- a/tests/target/imports_granularity_item.rs
+++ b/tests/target/imports_granularity_item.rs
@@ -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,
+};
diff --git a/tests/target/imports_granularity_module.rs b/tests/target/imports_granularity_module.rs
index e4e1a299e58..14f341016ff 100644
--- a/tests/target/imports_granularity_module.rs
+++ b/tests/target/imports_granularity_module.rs
@@ -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,
+};
diff --git a/tests/target/imports_granularity_one.rs b/tests/target/imports_granularity_one.rs
index 78ec5e7325c..da4c6678db1 100644
--- a/tests/target/imports_granularity_one.rs
+++ b/tests/target/imports_granularity_one.rs
@@ -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,
 };