Skip to content

Commit 1943362

Browse files
committed
reorder: use versionsort for use statements
1 parent 2e59e4e commit 1943362

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

src/imports.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::config::{Edition, IndentStyle};
1212
use crate::lists::{
1313
definitive_tactic, itemize_list, write_list, ListFormatting, ListItem, Separator,
1414
};
15+
use crate::reorder::{compare_as_opt_versions, compare_as_versions};
1516
use crate::rewrite::{Rewrite, RewriteContext};
1617
use crate::shape::Shape;
1718
use crate::source_map::SpanUtils;
@@ -660,17 +661,7 @@ impl Ord for UseSegment {
660661
if !is_upper_snake_case(ia) && is_upper_snake_case(ib) {
661662
return Ordering::Less;
662663
}
663-
let ident_ord = ia.cmp(ib);
664-
if ident_ord != Ordering::Equal {
665-
return ident_ord;
666-
}
667-
if aa.is_none() && ab.is_some() {
668-
return Ordering::Less;
669-
}
670-
if aa.is_some() && ab.is_none() {
671-
return Ordering::Greater;
672-
}
673-
aa.cmp(ab)
664+
compare_as_versions(&ia, &ib).then_with(|| compare_as_opt_versions(&aa, &ab))
674665
}
675666
(&List(ref a), &List(ref b)) => {
676667
for (a, b) in a.iter().zip(b.iter()) {

src/reorder.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,18 @@ pub(crate) fn compare_as_versions(left: &str, right: &str) -> Ordering {
116116
}
117117
}
118118

119+
pub(crate) fn compare_as_opt_versions<S>(left: &Option<S>, right: &Option<S>) -> Ordering
120+
where
121+
S: AsRef<str>,
122+
{
123+
match (left, right) {
124+
(None, None) => Ordering::Equal,
125+
(None, Some(_)) => Ordering::Less,
126+
(Some(_), None) => Ordering::Greater,
127+
(Some(left), Some(right)) => compare_as_versions(left.as_ref(), right.as_ref()),
128+
}
129+
}
130+
119131
/// Choose the ordering between the given two items.
120132
fn compare_items(a: &ast::Item, b: &ast::Item) -> Ordering {
121133
match (&a.node, &b.node) {

tests/source/imports-reorder.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
use path::{C,/*A*/ A, B /* B */, self /* self */};
44

55
use {ab, ac, aa, Z, b};
6+
7+
// The sort order shall follow versionsort
8+
use {u8, u128, u64, u16, u32};
9+
use {v1, v0200, v0030, v0002, v02000, v02001};

tests/target/imports-reorder.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,7 @@
33
use path::{self /* self */, /* A */ A, B /* B */, C};
44

55
use {aa, ab, ac, b, Z};
6+
7+
// The sort order shall follow versionsort
8+
use {u8, u16, u32, u64, u128};
9+
use {v0002, v0030, v0200, v02000, v02001, v1};

0 commit comments

Comments
 (0)