diff --git a/crates/oxc_diagnostics/src/lib.rs b/crates/oxc_diagnostics/src/lib.rs index 497c580e94347..3cc9e56776d6f 100644 --- a/crates/oxc_diagnostics/src/lib.rs +++ b/crates/oxc_diagnostics/src/lib.rs @@ -91,7 +91,7 @@ impl DerefMut for OxcDiagnostic { } } -#[derive(Debug, Default, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Clone, Eq, PartialEq, PartialOrd, Ord)] pub struct OxcCode { pub scope: Option>, pub number: Option>, diff --git a/crates/oxc_linter/src/lib.rs b/crates/oxc_linter/src/lib.rs index 0fa9f532c56d4..81b93090087a9 100644 --- a/crates/oxc_linter/src/lib.rs +++ b/crates/oxc_linter/src/lib.rs @@ -276,7 +276,15 @@ impl Linter { optimized_diagnostics.len(), unoptimized_diagnostics.len() ); - for (opt_diag, unopt_diag) in optimized_diagnostics.iter().zip(unoptimized_diagnostics.iter()){ + + + let mut sorted_optimized = optimized_diagnostics.to_vec(); + let mut sorted_unoptimized = unoptimized_diagnostics.to_vec(); + let sort = |m: &Message| { (m.error.labels.as_ref().and_then(|l| l.first()).map(|l| (l.offset(), l.len())), m.error.code.clone()) }; + sorted_optimized.sort_unstable_by_key(sort); + sorted_unoptimized.sort_unstable_by_key(sort); + + for (opt_diag, unopt_diag) in sorted_optimized.iter().zip(sorted_unoptimized.iter()){ assert_eq!( opt_diag, unopt_diag,