Fix on_settings_changed, need to review that impl is correct
This commit is contained in:
parent
4dad2eb7d7
commit
db7b863d8c
1 changed files with 31 additions and 26 deletions
|
@ -713,25 +713,28 @@ impl Project {
|
||||||
|
|
||||||
fn on_settings_changed(&mut self, cx: &mut ModelContext<'_, Self>) {
|
fn on_settings_changed(&mut self, cx: &mut ModelContext<'_, Self>) {
|
||||||
let settings = cx.global::<Settings>();
|
let settings = cx.global::<Settings>();
|
||||||
self.lsp_settings_changed = Some(cx.spawn(|_, _| async {
|
self.lsp_settings_changed = Some(cx.spawn(|project, cx| async {
|
||||||
let mut language_servers_to_start = Vec::new();
|
let language_servers_to_start = project.update(&mut cx, |project, cx| {
|
||||||
for buffer in self.opened_buffers.values() {
|
let mut language_servers_to_start = Vec::new();
|
||||||
if let Some(buffer) = buffer.upgrade(cx) {
|
for buffer in self.opened_buffers.values() {
|
||||||
let buffer = buffer.read(cx);
|
if let Some(buffer) = buffer.upgrade(cx) {
|
||||||
if let Some((file, language)) =
|
let buffer = buffer.read(cx);
|
||||||
File::from_dyn(buffer.file()).zip(buffer.language())
|
if let Some((file, language)) =
|
||||||
{
|
File::from_dyn(buffer.file()).zip(buffer.language())
|
||||||
if settings.enable_language_server(Some(&language.name())) {
|
{
|
||||||
let worktree = file.worktree.read(cx);
|
if settings.enable_language_server(Some(&language.name())) {
|
||||||
language_servers_to_start.push((
|
let worktree = file.worktree.read(cx);
|
||||||
worktree.id(),
|
language_servers_to_start.push((
|
||||||
worktree.as_local().unwrap().abs_path().clone(),
|
worktree.id(),
|
||||||
language.clone(),
|
worktree.as_local().unwrap().abs_path().clone(),
|
||||||
));
|
language.clone(),
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
language_servers_to_start
|
||||||
|
});
|
||||||
|
|
||||||
let mut language_servers_to_stop = Vec::new();
|
let mut language_servers_to_stop = Vec::new();
|
||||||
for language in self.languages.to_vec() {
|
for language in self.languages.to_vec() {
|
||||||
|
@ -749,18 +752,20 @@ impl Project {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stop all newly-disabled language servers.
|
project.update(&mut cx, |project, cx| {
|
||||||
for (worktree_id, adapter_name) in language_servers_to_stop {
|
// Stop all newly-disabled language servers.
|
||||||
self.stop_language_server(worktree_id, adapter_name, cx)
|
for (worktree_id, adapter_name) in language_servers_to_stop {
|
||||||
.detach();
|
self.stop_language_server(worktree_id, adapter_name, cx)
|
||||||
}
|
.detach();
|
||||||
|
}
|
||||||
|
|
||||||
// Start all the newly-enabled language servers.
|
// Start all the newly-enabled language servers.
|
||||||
for (worktree_id, worktree_path, language) in language_servers_to_start {
|
for (worktree_id, worktree_path, language) in language_servers_to_start {
|
||||||
self.start_language_server(worktree_id, worktree_path, language, cx);
|
self.start_language_server(worktree_id, worktree_path, language, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
cx.notify();
|
cx.notify();
|
||||||
|
});
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue