VC: hopfully fixed
This commit is contained in:
+45
-41
@@ -805,54 +805,58 @@ async fn handle_ra_notifications(
|
|||||||
|
|
||||||
let mist_uri = rust_uri_to_mist_uri(&rust_uri);
|
let mist_uri = rust_uri_to_mist_uri(&rust_uri);
|
||||||
|
|
||||||
let mapped_diagnostics: Vec<Diagnostic> = if let Some(ref _mist_uri) = mist_uri
|
let mapped_diagnostics: Vec<Diagnostic> =
|
||||||
{
|
if let Some(ref _mist_uri) = mist_uri {
|
||||||
let rust_path = rust_uri.to_file_path().ok();
|
let rust_path = rust_uri.to_file_path().ok();
|
||||||
let map_data =
|
let map_data = match rust_path {
|
||||||
rust_path.and_then(|p| mapping.blocking_lock().get(&p).cloned());
|
Some(ref p) => mapping.lock().await.get(p).cloned(),
|
||||||
|
None => None,
|
||||||
|
};
|
||||||
|
|
||||||
diagnostics
|
diagnostics
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|diag| {
|
.filter_map(|diag| {
|
||||||
let map = map_data.clone()?;
|
let map = map_data.clone()?;
|
||||||
|
|
||||||
let rust_start = lsp_pos_to_rust_map(&diag.range.start);
|
let rust_start = lsp_pos_to_rust_map(&diag.range.start);
|
||||||
let rust_end = lsp_pos_to_rust_map(&diag.range.end);
|
let rust_end = lsp_pos_to_rust_map(&diag.range.end);
|
||||||
|
|
||||||
let (_, mist_start) = map.find(&rust_start)?;
|
let (_, mist_start) = map.find(&rust_start)?;
|
||||||
let (_, mist_end) = map.find(&rust_end)?;
|
let (_, mist_end) = map.find(&rust_end)?;
|
||||||
|
|
||||||
let mist_start_pos = mist_map_to_lsp_pos(&mist_start);
|
let mist_start_pos = mist_map_to_lsp_pos(&mist_start);
|
||||||
let mist_end_pos = mist_map_to_lsp_pos(&mist_end);
|
let mist_end_pos = mist_map_to_lsp_pos(&mist_end);
|
||||||
|
|
||||||
let final_end = Position {
|
let final_end = Position {
|
||||||
line: mist_end_pos.line.max(mist_start_pos.line),
|
line: mist_end_pos.line.max(mist_start_pos.line),
|
||||||
character: if mist_end_pos.line == mist_start_pos.line {
|
character: if mist_end_pos.line == mist_start_pos.line {
|
||||||
mist_end_pos.character.max(mist_start_pos.character + 1)
|
mist_end_pos
|
||||||
} else {
|
.character
|
||||||
mist_end_pos.character.max(1)
|
.max(mist_start_pos.character + 1)
|
||||||
},
|
} else {
|
||||||
};
|
mist_end_pos.character.max(1)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
Some(Diagnostic {
|
Some(Diagnostic {
|
||||||
range: Range {
|
range: Range {
|
||||||
start: mist_start_pos,
|
start: mist_start_pos,
|
||||||
end: final_end,
|
end: final_end,
|
||||||
},
|
},
|
||||||
severity: diag.severity,
|
severity: diag.severity,
|
||||||
code: diag.code,
|
code: diag.code,
|
||||||
code_description: diag.code_description,
|
code_description: diag.code_description,
|
||||||
source: diag.source,
|
source: diag.source,
|
||||||
message: diag.message,
|
message: diag.message,
|
||||||
related_information: diag.related_information,
|
related_information: diag.related_information,
|
||||||
tags: diag.tags,
|
tags: diag.tags,
|
||||||
data: diag.data,
|
data: diag.data,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
.collect()
|
||||||
.collect()
|
} else {
|
||||||
} else {
|
diagnostics
|
||||||
diagnostics
|
};
|
||||||
};
|
|
||||||
|
|
||||||
if let Some(mist_uri) = mist_uri.or(Some(rust_uri.clone())) {
|
if let Some(mist_uri) = mist_uri.or(Some(rust_uri.clone())) {
|
||||||
let prev = previous_diagnostics.lock().await.get(&mist_uri).cloned();
|
let prev = previous_diagnostics.lock().await.get(&mist_uri).cloned();
|
||||||
|
|||||||
Reference in New Issue
Block a user