From 038bb85d191724c3f577ff5c2a5d44d1fd0eafb0 Mon Sep 17 00:00:00 2001 From: Arcticae Date: Tue, 1 Oct 2024 19:23:07 +0200 Subject: [PATCH] Fix diagnostics deduplicating. Add check for file relevance. --- crates/cairo-lang-diagnostics/src/diagnostics.rs | 8 ++++---- .../src/lang/diagnostics/lsp.rs | 7 ++++++- crates/cairo-lang-language-server/src/lib.rs | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/crates/cairo-lang-diagnostics/src/diagnostics.rs b/crates/cairo-lang-diagnostics/src/diagnostics.rs index 2c4b335273b..23150b0638b 100644 --- a/crates/cairo-lang-diagnostics/src/diagnostics.rs +++ b/crates/cairo-lang-diagnostics/src/diagnostics.rs @@ -331,10 +331,10 @@ impl Diagnostics { return diagnostic_with_dup; } let files_db = db.upcast(); - let mut indexed_dup_diagnostic = diagnostic_with_dup - .iter() - .enumerate() - .sorted_by_key(|(idx, diag)| (diag.location(db).user_location(files_db).span, *idx)); + let mut indexed_dup_diagnostic = + diagnostic_with_dup.iter().enumerate().sorted_by_cached_key(|(idx, diag)| { + (diag.location(db).user_location(files_db).span, diag.format(db), *idx) + }); let mut prev_diagnostic_indexed = indexed_dup_diagnostic.next().unwrap(); let mut diagnostic_without_dup = vec![prev_diagnostic_indexed]; diff --git a/crates/cairo-lang-language-server/src/lang/diagnostics/lsp.rs b/crates/cairo-lang-language-server/src/lang/diagnostics/lsp.rs index 0799a0e1438..ef11281f562 100644 --- a/crates/cairo-lang-language-server/src/lang/diagnostics/lsp.rs +++ b/crates/cairo-lang-language-server/src/lang/diagnostics/lsp.rs @@ -15,6 +15,7 @@ pub fn map_cairo_diagnostics_to_lsp( db: &T::DbType, diags: &mut Vec, diagnostics: &Diagnostics, + processed_file_id: &FileId, trace_macro_diagnostics: bool, ) { for diagnostic in if trace_macro_diagnostics { @@ -43,7 +44,7 @@ pub fn map_cairo_diagnostics_to_lsp( } } - let Some((range, _)) = get_mapped_range_and_add_mapping_note( + let Some((range, mapped_file_id)) = get_mapped_range_and_add_mapping_note( db, &diagnostic.location(db), trace_macro_diagnostics.then_some(&mut related_information), @@ -51,6 +52,10 @@ pub fn map_cairo_diagnostics_to_lsp( ) else { continue; }; + + if mapped_file_id != *processed_file_id { + continue; + } diags.push(Diagnostic { range, message, diff --git a/crates/cairo-lang-language-server/src/lib.rs b/crates/cairo-lang-language-server/src/lib.rs index dc91f7c0439..1190cc57d60 100644 --- a/crates/cairo-lang-language-server/src/lib.rs +++ b/crates/cairo-lang-language-server/src/lib.rs @@ -534,18 +534,21 @@ impl Backend { (*db).upcast(), &mut diags, &new_file_diagnostics.parser, + file, trace_macro_diagnostics, ); map_cairo_diagnostics_to_lsp( (*db).upcast(), &mut diags, &new_file_diagnostics.semantic, + file, trace_macro_diagnostics, ); map_cairo_diagnostics_to_lsp( (*db).upcast(), &mut diags, &new_file_diagnostics.lowering, + file, trace_macro_diagnostics, );