summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r--cli/lsp/language_server.rs45
1 files changed, 43 insertions, 2 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 17c8cc5ba..2e1386fd0 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -84,6 +84,7 @@ use super::text;
use super::tsc;
use super::tsc::Assets;
use super::tsc::AssetsSnapshot;
+use super::tsc::ChangeKind;
use super::tsc::GetCompletionDetailsArgs;
use super::tsc::TsServer;
use super::urls;
@@ -1183,13 +1184,23 @@ impl Inner {
// refresh the npm specifiers because it might have discovered
// a @types/node package and now's a good time to do that anyway
self.refresh_npm_specifiers().await;
+
+ self
+ .ts_server
+ .project_changed(
+ self.snapshot(),
+ &[],
+ self.documents.project_version(),
+ true,
+ )
+ .await;
}
fn shutdown(&self) -> LspResult<()> {
Ok(())
}
- fn did_open(
+ async fn did_open(
&mut self,
specifier: &ModuleSpecifier,
params: DidOpenTextDocumentParams,
@@ -1217,6 +1228,16 @@ impl Inner {
params.text_document.language_id.parse().unwrap(),
params.text_document.text.into(),
);
+ let version = self.documents.project_version();
+ self
+ .ts_server
+ .project_changed(
+ self.snapshot(),
+ &[(document.specifier(), ChangeKind::Opened)],
+ version,
+ false,
+ )
+ .await;
self.performance.measure(mark);
document
@@ -1234,6 +1255,16 @@ impl Inner {
) {
Ok(document) => {
if document.is_diagnosable() {
+ let version = self.documents.project_version();
+ self
+ .ts_server
+ .project_changed(
+ self.snapshot(),
+ &[(document.specifier(), ChangeKind::Modified)],
+ version,
+ false,
+ )
+ .await;
self.refresh_npm_specifiers().await;
self.diagnostics_server.invalidate(&[specifier]);
self.send_diagnostics_update();
@@ -1284,6 +1315,16 @@ impl Inner {
if let Err(err) = self.documents.close(&specifier) {
error!("{:#}", err);
}
+ let version = self.documents.project_version();
+ self
+ .ts_server
+ .project_changed(
+ self.snapshot(),
+ &[(&specifier, ChangeKind::Closed)],
+ version,
+ false,
+ )
+ .await;
self.performance.measure(mark);
}
@@ -3174,7 +3215,7 @@ impl tower_lsp::LanguageServer for LanguageServer {
let specifier = inner
.url_map
.normalize_url(&params.text_document.uri, LspUrlKind::File);
- let document = inner.did_open(&specifier, params);
+ let document = inner.did_open(&specifier, params).await;
if document.is_diagnosable() {
inner.refresh_npm_specifiers().await;
inner.diagnostics_server.invalidate(&[specifier]);