From 102f2ecc91c4130b6d572698d87d11faa1f82eef Mon Sep 17 00:00:00 2001 From: Flora Hill Date: Thu, 19 Feb 2026 23:00:29 +0000 Subject: [PATCH] Perf + Test Case RE: ShoyuVanilla --- .../crates/ide-db/src/imports/insert_use/tests.rs | 10 ++++++++++ .../crates/ide-db/src/imports/merge_imports.rs | 10 +++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/tools/rust-analyzer/crates/ide-db/src/imports/insert_use/tests.rs b/src/tools/rust-analyzer/crates/ide-db/src/imports/insert_use/tests.rs index 7763d1e595d0..6c7b97458d20 100644 --- a/src/tools/rust-analyzer/crates/ide-db/src/imports/insert_use/tests.rs +++ b/src/tools/rust-analyzer/crates/ide-db/src/imports/insert_use/tests.rs @@ -1528,6 +1528,16 @@ fn merge_gated_imports_with_different_values() { assert_eq!(result, None); } +#[test] +fn merge_gated_imports_different_order() { + check_merge( + r#"#[cfg(a)] #[cfg(b)] use foo::bar;"#, + r#"#[cfg(b)] #[cfg(a)] use foo::baz;"#, + r#"#[cfg(a)] #[cfg(b)] use foo::{bar, baz};"#, + MergeBehavior::Crate, + ); +} + #[test] fn merge_into_existing_cfg_import() { check( diff --git a/src/tools/rust-analyzer/crates/ide-db/src/imports/merge_imports.rs b/src/tools/rust-analyzer/crates/ide-db/src/imports/merge_imports.rs index d63b239ff43c..3301719f5ce2 100644 --- a/src/tools/rust-analyzer/crates/ide-db/src/imports/merge_imports.rs +++ b/src/tools/rust-analyzer/crates/ide-db/src/imports/merge_imports.rs @@ -4,7 +4,7 @@ use itertools::{EitherOrBoth, Itertools}; use parser::T; use syntax::{ - Direction, SyntaxElement, algo, + Direction, SyntaxElement, ToSmolStr, algo, ast::{ self, AstNode, HasAttrs, HasName, HasVisibility, PathSegmentKind, edit_in_place::Removable, make, @@ -691,10 +691,10 @@ pub fn eq_attrs( attrs0: impl Iterator, attrs1: impl Iterator, ) -> bool { - let mut attrs0: Vec<_> = attrs0.map(|attr| attr.syntax().text().to_string()).collect(); - let mut attrs1: Vec<_> = attrs1.map(|attr| attr.syntax().text().to_string()).collect(); - attrs0.sort(); - attrs1.sort(); + let mut attrs0: Vec<_> = attrs0.map(|attr| attr.syntax().text().to_smolstr()).collect(); + let mut attrs1: Vec<_> = attrs1.map(|attr| attr.syntax().text().to_smolstr()).collect(); + attrs0.sort_unstable(); + attrs1.sort_unstable(); attrs0 == attrs1 }