lsp: Send DidOpen notifications when changing selections in multi buffer (#22958)

Fixes #22773

Release Notes:

- Fixed an edge case with multibuffers that could break language
features within them.
This commit is contained in:
Piotr Osiewicz 2025-02-07 12:33:35 +01:00 committed by GitHub
parent f700268029
commit b6b06cf6d8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 54 additions and 34 deletions

View file

@ -1793,7 +1793,7 @@ impl Editor {
self.collapse_matches = collapse_matches;
}
pub fn register_buffers_with_language_servers(&mut self, cx: &mut Context<Self>) {
fn register_buffers_with_language_servers(&mut self, cx: &mut Context<Self>) {
let buffers = self.buffer.read(cx).all_buffers();
let Some(lsp_store) = self.lsp_store(cx) else {
return;
@ -2020,6 +2020,21 @@ impl Editor {
None
}
};
if let Some(buffer_id) = new_cursor_position.buffer_id {
if !self.registered_buffers.contains_key(&buffer_id) {
if let Some(lsp_store) = self.lsp_store(cx) {
lsp_store.update(cx, |lsp_store, cx| {
let Some(buffer) = self.buffer.read(cx).buffer(buffer_id) else {
return;
};
self.registered_buffers.insert(
buffer_id,
lsp_store.register_buffer_with_language_servers(&buffer, cx),
);
})
}
}
}
if let Some(completion_menu) = completion_menu {
let cursor_position = new_cursor_position.to_offset(buffer);