lsp: Serialize LSP notifications on background threads (#39403)

This should reduce hiccups when opening large files.

Release Notes:

- N/A
This commit is contained in:
Piotr Osiewicz
2025-10-08 19:48:40 +00:00
committed by GitHub
parent cd656485c8
commit ef423148fc
14 changed files with 186 additions and 147 deletions
+18 -12
View File
@@ -270,7 +270,7 @@ impl RegisteredBuffer {
server
.lsp
.notify::<lsp::notification::DidChangeTextDocument>(
&lsp::DidChangeTextDocumentParams {
lsp::DidChangeTextDocumentParams {
text_document: lsp::VersionedTextDocumentIdentifier::new(
buffer.uri.clone(),
buffer.snapshot_version,
@@ -744,7 +744,7 @@ impl Copilot {
let snapshot = buffer.read(cx).snapshot();
server
.notify::<lsp::notification::DidOpenTextDocument>(
&lsp::DidOpenTextDocumentParams {
lsp::DidOpenTextDocumentParams {
text_document: lsp::TextDocumentItem {
uri: uri.clone(),
language_id: language_id.clone(),
@@ -792,13 +792,14 @@ impl Copilot {
server
.lsp
.notify::<lsp::notification::DidSaveTextDocument>(
&lsp::DidSaveTextDocumentParams {
lsp::DidSaveTextDocumentParams {
text_document: lsp::TextDocumentIdentifier::new(
registered_buffer.uri.clone(),
),
text: None,
},
)?;
)
.ok();
}
language::BufferEvent::FileHandleChanged
| language::BufferEvent::LanguageChanged => {
@@ -814,14 +815,15 @@ impl Copilot {
server
.lsp
.notify::<lsp::notification::DidCloseTextDocument>(
&lsp::DidCloseTextDocumentParams {
lsp::DidCloseTextDocumentParams {
text_document: lsp::TextDocumentIdentifier::new(old_uri),
},
)?;
)
.ok();
server
.lsp
.notify::<lsp::notification::DidOpenTextDocument>(
&lsp::DidOpenTextDocumentParams {
lsp::DidOpenTextDocumentParams {
text_document: lsp::TextDocumentItem::new(
registered_buffer.uri.clone(),
registered_buffer.language_id.clone(),
@@ -829,7 +831,8 @@ impl Copilot {
registered_buffer.snapshot.text(),
),
},
)?;
)
.ok();
}
}
_ => {}
@@ -846,7 +849,7 @@ impl Copilot {
server
.lsp
.notify::<lsp::notification::DidCloseTextDocument>(
&lsp::DidCloseTextDocumentParams {
lsp::DidCloseTextDocumentParams {
text_document: lsp::TextDocumentIdentifier::new(buffer.uri),
},
)
@@ -1151,9 +1154,12 @@ fn notify_did_change_config_to_server(
}
});
server.notify::<lsp::notification::DidChangeConfiguration>(&lsp::DidChangeConfigurationParams {
settings,
})
server
.notify::<lsp::notification::DidChangeConfiguration>(lsp::DidChangeConfigurationParams {
settings,
})
.ok();
Ok(())
}
async fn clear_copilot_dir() {