diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-04-17 21:40:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-17 21:40:42 +0100 |
commit | 24fa5c784a7a4731ba8864e52977857959c580ed (patch) | |
tree | 692fea409e70e5b4e0885ee4acab27b7d37ca07e /cli/lsp/language_server.rs | |
parent | 2dc3f6f57a5e0fe68f3265c6a3a89cc37661ff32 (diff) |
perf(lsp): release unused documents (#23398)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 86d7d65c5..cba8eb01c 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -364,14 +364,11 @@ impl LanguageServer { .client .show_message(MessageType::WARNING, err); } - { - let mut inner = self.0.write().await; - let lockfile = inner.config.tree.root_lockfile().cloned(); - inner.documents.refresh_lockfile(lockfile); - inner.refresh_npm_specifiers().await; - } - // now refresh the data in a read - self.0.read().await.post_cache(result.mark).await; + let mut inner = self.0.write().await; + let lockfile = inner.config.tree.root_lockfile().cloned(); + inner.documents.refresh_lockfile(lockfile); + inner.refresh_npm_specifiers().await; + inner.post_cache(result.mark).await; } Ok(Some(json!(true))) } @@ -1421,7 +1418,16 @@ impl Inner { self.recreate_npm_services_if_necessary().await; self.refresh_documents_config().await; self.diagnostics_server.invalidate_all(); - self.ts_server.restart(self.snapshot()).await; + self + .project_changed( + &changes + .iter() + .map(|(s, _)| (s, ChangeKind::Modified)) + .collect::<Vec<_>>(), + false, + ) + .await; + self.ts_server.cleanup_semantic_cache(self.snapshot()).await; self.send_diagnostics_update(); self.send_testing_update(); } @@ -3544,13 +3550,14 @@ impl Inner { })) } - async fn post_cache(&self, mark: PerformanceMark) { + async fn post_cache(&mut self, mark: PerformanceMark) { // Now that we have dependencies loaded, we need to re-analyze all the files. // For that we're invalidating all the existing diagnostics and restarting // the language server for TypeScript (as it might hold to some stale // documents). self.diagnostics_server.invalidate_all(); - self.ts_server.restart(self.snapshot()).await; + self.project_changed(&[], false).await; + self.ts_server.cleanup_semantic_cache(self.snapshot()).await; self.send_diagnostics_update(); self.send_testing_update(); |