From ff144def6343bb2776a120ee80d9bdbd8d7ebf40 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Thu, 2 Nov 2023 21:42:33 +0200 Subject: [PATCH] Fix the bugs --- crates/prettier/src/prettier.rs | 11 ++++- crates/project/src/project.rs | 72 ++++++++++++++++++--------------- 2 files changed, 50 insertions(+), 33 deletions(-) diff --git a/crates/prettier/src/prettier.rs b/crates/prettier/src/prettier.rs index 3e846db66e..685a3ae7a5 100644 --- a/crates/prettier/src/prettier.rs +++ b/crates/prettier/src/prettier.rs @@ -63,6 +63,15 @@ impl Prettier { .components() .take_while(|component| !is_node_modules(component)) .collect::(); + let path_to_check_metadata = fs + .metadata(&path_to_check) + .await + .with_context(|| format!("failed to get metadata for initial path {path_to_check:?}"))? + .with_context(|| format!("empty metadata for initial path {path_to_check:?}"))?; + if !path_to_check_metadata.is_dir { + path_to_check.pop(); + } + let mut project_path_with_prettier_dependency = None; loop { if installed_prettiers.contains(&path_to_check) { @@ -361,7 +370,7 @@ async fn read_package_json( if let Some(package_json_metadata) = fs .metadata(&possible_package_json) .await - .with_context(|| format!("Fetching metadata for {possible_package_json:?}"))? + .with_context(|| format!("fetching metadata for package json {possible_package_json:?}"))? { if !package_json_metadata.is_dir && !package_json_metadata.is_symlink { let package_json_contents = fs diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index a5c26bbb41..b861291338 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -8464,9 +8464,9 @@ impl Project { Err(e) => { return Some(( None, - Task::ready(Err(Arc::new(e.context( - "determining prettier path for worktree {worktree_path:?}", - )))) + Task::ready(Err(Arc::new( + e.context("determining prettier path"), + ))) .shared(), )); } @@ -8481,7 +8481,7 @@ impl Project { log::info!("Found prettier in {prettier_dir:?}, starting."); let task_prettier_dir = prettier_dir.clone(); - let weak_project = project.downgrade(); + let task_project = project.clone(); let new_server_id = project.update(&mut cx, |this, _| { this.languages.next_language_server_id() }); @@ -8496,33 +8496,12 @@ impl Project { .await .context("prettier start") .map_err(Arc::new)?; - log::info!( - "Started prettier in {:?}", - prettier.prettier_dir() + register_new_prettier( + &task_project, + &prettier, + new_server_id, + &mut cx, ); - - if let Some((project, prettier_server)) = - weak_project.upgrade(&mut cx).zip(prettier.server()) - { - project.update(&mut cx, |project, cx| { - let name = if prettier.is_default() { - LanguageServerName(Arc::from( - "prettier (default)", - )) - } else { - LanguageServerName(Arc::from(format!( - "prettier ({})", - prettier.prettier_dir().display(), - ))) - }; - - project.supplementary_language_servers.insert( - new_server_id, - (name, Arc::clone(prettier_server)), - ); - cx.emit(Event::LanguageServerAdded(new_server_id)); - }); - } Ok(Arc::new(prettier)).map_err(Arc::new) }) .shared(); @@ -8678,6 +8657,31 @@ impl Project { } } +fn register_new_prettier( + project: &ModelHandle, + prettier: &Prettier, + new_server_id: LanguageServerId, + cx: &mut AsyncAppContext, +) { + log::info!("Started prettier in {:?}", prettier.prettier_dir()); + if let Some(prettier_server) = prettier.server() { + project.update(cx, |project, cx| { + let name = if prettier.is_default() { + LanguageServerName(Arc::from("prettier (default)")) + } else { + LanguageServerName(Arc::from(format!( + "prettier ({})", + prettier.prettier_dir().display(), + ))) + }; + project + .supplementary_language_servers + .insert(new_server_id, (name, Arc::clone(prettier_server))); + cx.emit(Event::LanguageServerAdded(new_server_id)); + }); + } +} + fn spawn_default_prettier( node: Arc, cx: &mut ModelContext<'_, Project>, @@ -8686,7 +8690,7 @@ fn spawn_default_prettier( let new_server_id = project.update(&mut cx, |project, _| { project.languages.next_language_server_id() }); - Prettier::start( + let new_prettier = Prettier::start( new_server_id, DEFAULT_PRETTIER_DIR.clone(), node, @@ -8695,7 +8699,11 @@ fn spawn_default_prettier( .await .context("default prettier spawn") .map(Arc::new) - .map_err(Arc::new) + .map_err(Arc::new)?; + + register_new_prettier(&project, &new_prettier, new_server_id, &mut cx); + + Ok(new_prettier) }) .shared() }