Reuse already running default prettiers

This commit is contained in:
Kirill Bulatov 2023-11-02 23:01:05 +02:00
parent cf95f9b082
commit 244c693968

View file

@ -8440,31 +8440,43 @@ impl Project {
.await .await
{ {
Ok(None) => { Ok(None) => {
project.update(&mut cx, |project, _| { let started_default_prettier =
project project.update(&mut cx, |project, _| {
.prettiers_per_worktree project
.entry(worktree_id) .prettiers_per_worktree
.or_default() .entry(worktree_id)
.insert(None) .or_default()
}); .insert(None);
let new_task = project.update(&mut cx, |project, cx| { project.default_prettier.as_ref().and_then(
let new_task = start_prettier( |default_prettier| default_prettier.instance.clone(),
node, )
DEFAULT_PRETTIER_DIR.clone(), });
Some(worktree_id), match started_default_prettier {
cx, Some(old_task) => return Some((None, old_task)),
); None => {
project let new_task = project.update(&mut cx, |project, cx| {
.default_prettier let new_task = start_prettier(
.get_or_insert_with(|| DefaultPrettier { node,
instance: None, DEFAULT_PRETTIER_DIR.clone(),
#[cfg(not(any(test, feature = "test-support")))] Some(worktree_id),
installed_plugins: HashSet::default(), cx,
}) );
.instance = Some(new_task.clone()); project
new_task .default_prettier
}); .get_or_insert_with(|| DefaultPrettier {
return Some((None, new_task)); instance: None,
#[cfg(not(any(
test,
feature = "test-support"
)))]
installed_plugins: HashSet::default(),
})
.instance = Some(new_task.clone());
new_task
});
return Some((None, new_task));
}
}
} }
Ok(Some(prettier_dir)) => { Ok(Some(prettier_dir)) => {
project.update(&mut cx, |project, _| { project.update(&mut cx, |project, _| {
@ -8479,6 +8491,9 @@ impl Project {
project.prettier_instances.get(&prettier_dir).cloned() project.prettier_instances.get(&prettier_dir).cloned()
}) })
{ {
log::debug!(
"Found already started prettier in {prettier_dir:?}"
);
return Some((Some(prettier_dir), existing_prettier)); return Some((Some(prettier_dir), existing_prettier));
} }
@ -8510,15 +8525,25 @@ impl Project {
}); });
} }
None => { None => {
let new_task = start_prettier(node, DEFAULT_PRETTIER_DIR.clone(), None, cx); let started_default_prettier = self
self.default_prettier .default_prettier
.get_or_insert_with(|| DefaultPrettier { .as_ref()
instance: None, .and_then(|default_prettier| default_prettier.instance.clone());
#[cfg(not(any(test, feature = "test-support")))] match started_default_prettier {
installed_plugins: HashSet::default(), Some(old_task) => return Task::ready(Some((None, old_task))),
}) None => {
.instance = Some(new_task.clone()); let new_task =
return Task::ready(Some((None, new_task))); start_prettier(node, DEFAULT_PRETTIER_DIR.clone(), None, cx);
self.default_prettier
.get_or_insert_with(|| DefaultPrettier {
instance: None,
#[cfg(not(any(test, feature = "test-support")))]
installed_plugins: HashSet::default(),
})
.instance = Some(new_task.clone());
return Task::ready(Some((None, new_task)));
}
}
} }
} }
} else if self.remote_id().is_some() { } else if self.remote_id().is_some() {