From ffc7558a1d48f9fd164c698e0ac7a75251bf074a Mon Sep 17 00:00:00 2001 From: Matthew Penner Date: Wed, 19 Feb 2025 12:46:38 -0700 Subject: [PATCH] Enable `package-version-server` lookup in PATH (#23849) Release Notes: - Added support for checking for `package-version-server` on the `$PATH`. --------- Signed-off-by: Matthew Penner Co-authored-by: Marshall Bowers --- crates/languages/src/json.rs | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/crates/languages/src/json.rs b/crates/languages/src/json.rs index 02a818bce93d79021bd27fba48be70c07b165d67..5be02583f53582bde70a0a0130130f98a622d4ca 100644 --- a/crates/languages/src/json.rs +++ b/crates/languages/src/json.rs @@ -321,12 +321,17 @@ fn schema_file_match(path: &Path) -> String { .replace('\\', "/") } -pub(super) struct NodeVersionAdapter; +pub struct NodeVersionAdapter; + +impl NodeVersionAdapter { + const SERVER_NAME: LanguageServerName = + LanguageServerName::new_static("package-version-server"); +} #[async_trait(?Send)] impl LspAdapter for NodeVersionAdapter { fn name(&self) -> LanguageServerName { - LanguageServerName("package-version-server".into()) + Self::SERVER_NAME.clone() } async fn fetch_latest_server_version( @@ -351,7 +356,7 @@ impl LspAdapter for NodeVersionAdapter { } else { ".tar.gz" }; - let asset_name = format!("package-version-server-{}-{os}{suffix}", consts::ARCH); + let asset_name = format!("{}-{}-{os}{suffix}", Self::SERVER_NAME, consts::ARCH); let asset = release .assets .iter() @@ -363,6 +368,20 @@ impl LspAdapter for NodeVersionAdapter { })) } + async fn check_if_user_installed( + &self, + delegate: &dyn LspAdapterDelegate, + _: Arc, + _: &AsyncApp, + ) -> Option { + let path = delegate.which(Self::SERVER_NAME.as_ref()).await?; + Some(LanguageServerBinary { + path, + env: None, + arguments: Default::default(), + }) + } + async fn fetch_server_binary( &self, latest_version: Box, @@ -371,12 +390,13 @@ impl LspAdapter for NodeVersionAdapter { ) -> Result { let version = latest_version.downcast::().unwrap(); let destination_path = container_dir.join(format!( - "package-version-server-{}{}", + "{}-{}{}", + Self::SERVER_NAME, version.name, std::env::consts::EXE_SUFFIX )); let destination_container_path = - container_dir.join(format!("package-version-server-{}-tmp", version.name)); + container_dir.join(format!("{}-{}-tmp", Self::SERVER_NAME, version.name)); if fs::metadata(&destination_path).await.is_err() { let mut response = delegate .http_client() @@ -397,7 +417,8 @@ impl LspAdapter for NodeVersionAdapter { fs::copy( destination_container_path.join(format!( - "package-version-server{}", + "{}{}", + Self::SERVER_NAME, std::env::consts::EXE_SUFFIX )), &destination_path,