diff options
author | kjeremy <[email protected]> | 2020-07-21 19:18:22 +0100 |
---|---|---|
committer | kjeremy <[email protected]> | 2020-07-21 19:18:22 +0100 |
commit | 79a3dd085c2e9b906c33a1ae1194449d02832036 (patch) | |
tree | 5c5bf030798d9076aa18095dad587eea1a4a76a7 | |
parent | 97927146dbdcd17a1569f0bb8a4b56fcf347f03c (diff) |
Clear diagnostics for known file version on close
-rw-r--r-- | crates/rust-analyzer/src/main_loop.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs index 00ae6b900..d8d10ba99 100644 --- a/crates/rust-analyzer/src/main_loop.rs +++ b/crates/rust-analyzer/src/main_loop.rs | |||
@@ -432,19 +432,26 @@ impl GlobalState { | |||
432 | Ok(()) | 432 | Ok(()) |
433 | })? | 433 | })? |
434 | .on::<lsp_types::notification::DidCloseTextDocument>(|this, params| { | 434 | .on::<lsp_types::notification::DidCloseTextDocument>(|this, params| { |
435 | let mut version = None; | ||
435 | if let Ok(path) = from_proto::vfs_path(¶ms.text_document.uri) { | 436 | if let Ok(path) = from_proto::vfs_path(¶ms.text_document.uri) { |
436 | if this.mem_docs.remove(&path).is_none() { | 437 | match this.mem_docs.remove(&path) { |
437 | log::error!("orphan DidCloseTextDocument: {}", path) | 438 | Some(entry) => version = entry, |
439 | None => log::error!("orphan DidCloseTextDocument: {}", path), | ||
438 | } | 440 | } |
441 | |||
439 | if let Some(path) = path.as_path() { | 442 | if let Some(path) = path.as_path() { |
440 | this.loader.handle.invalidate(path.to_path_buf()); | 443 | this.loader.handle.invalidate(path.to_path_buf()); |
441 | } | 444 | } |
442 | } | 445 | } |
446 | |||
447 | // Clear the diagnostics for the previously known version of the file. | ||
448 | // This prevents stale "cargo check" diagnostics if the file is | ||
449 | // closed, "cargo check" is run and then the file is reopened. | ||
443 | this.send_notification::<lsp_types::notification::PublishDiagnostics>( | 450 | this.send_notification::<lsp_types::notification::PublishDiagnostics>( |
444 | lsp_types::PublishDiagnosticsParams { | 451 | lsp_types::PublishDiagnosticsParams { |
445 | uri: params.text_document.uri, | 452 | uri: params.text_document.uri, |
446 | diagnostics: Vec::new(), | 453 | diagnostics: Vec::new(), |
447 | version: None, | 454 | version, |
448 | }, | 455 | }, |
449 | ); | 456 | ); |
450 | Ok(()) | 457 | Ok(()) |