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,13 +8440,20 @@ impl Project {
.await .await
{ {
Ok(None) => { Ok(None) => {
let started_default_prettier =
project.update(&mut cx, |project, _| { project.update(&mut cx, |project, _| {
project project
.prettiers_per_worktree .prettiers_per_worktree
.entry(worktree_id) .entry(worktree_id)
.or_default() .or_default()
.insert(None) .insert(None);
project.default_prettier.as_ref().and_then(
|default_prettier| default_prettier.instance.clone(),
)
}); });
match started_default_prettier {
Some(old_task) => return Some((None, old_task)),
None => {
let new_task = project.update(&mut cx, |project, cx| { let new_task = project.update(&mut cx, |project, cx| {
let new_task = start_prettier( let new_task = start_prettier(
node, node,
@ -8458,7 +8465,10 @@ impl Project {
.default_prettier .default_prettier
.get_or_insert_with(|| DefaultPrettier { .get_or_insert_with(|| DefaultPrettier {
instance: None, instance: None,
#[cfg(not(any(test, feature = "test-support")))] #[cfg(not(any(
test,
feature = "test-support"
)))]
installed_plugins: HashSet::default(), installed_plugins: HashSet::default(),
}) })
.instance = Some(new_task.clone()); .instance = Some(new_task.clone());
@ -8466,6 +8476,8 @@ impl Project {
}); });
return Some((None, 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, _| {
project 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,7 +8525,15 @@ impl Project {
}); });
} }
None => { None => {
let new_task = start_prettier(node, DEFAULT_PRETTIER_DIR.clone(), None, cx); let started_default_prettier = self
.default_prettier
.as_ref()
.and_then(|default_prettier| default_prettier.instance.clone());
match started_default_prettier {
Some(old_task) => return Task::ready(Some((None, old_task))),
None => {
let new_task =
start_prettier(node, DEFAULT_PRETTIER_DIR.clone(), None, cx);
self.default_prettier self.default_prettier
.get_or_insert_with(|| DefaultPrettier { .get_or_insert_with(|| DefaultPrettier {
instance: None, instance: None,
@ -8521,6 +8544,8 @@ impl Project {
return Task::ready(Some((None, new_task))); return Task::ready(Some((None, new_task)));
} }
} }
}
}
} else if self.remote_id().is_some() { } else if self.remote_id().is_some() {
return Task::ready(None); return Task::ready(None);
} else { } else {