diff --git a/extensions/php/src/language_servers/intelephense.rs b/extensions/php/src/language_servers/intelephense.rs index 900571d9a4..4224165ac8 100644 --- a/extensions/php/src/language_servers/intelephense.rs +++ b/extensions/php/src/language_servers/intelephense.rs @@ -1,4 +1,4 @@ -use std::fs; +use std::{env, fs}; use zed_extension_api::{self as zed, LanguageServerId, Result}; @@ -18,11 +18,39 @@ impl Intelephense { } } + pub fn language_server_command( + &mut self, + language_server_id: &LanguageServerId, + worktree: &zed::Worktree, + ) -> Result { + if let Some(path) = worktree.which("intelephense") { + return Ok(zed::Command { + command: path, + args: vec!["--stdio".to_string()], + env: Default::default(), + }); + } + + let server_path = self.server_script_path(language_server_id)?; + Ok(zed::Command { + command: zed::node_binary_path()?, + args: vec![ + env::current_dir() + .unwrap() + .join(&server_path) + .to_string_lossy() + .to_string(), + "--stdio".to_string(), + ], + env: Default::default(), + }) + } + fn server_exists(&self) -> bool { fs::metadata(SERVER_PATH).map_or(false, |stat| stat.is_file()) } - pub fn server_script_path(&mut self, language_server_id: &LanguageServerId) -> Result { + fn server_script_path(&mut self, language_server_id: &LanguageServerId) -> Result { let server_exists = self.server_exists(); if self.did_find_server && server_exists { return Ok(SERVER_PATH.to_string()); diff --git a/extensions/php/src/php.rs b/extensions/php/src/php.rs index b9388f9187..331cc162da 100644 --- a/extensions/php/src/php.rs +++ b/extensions/php/src/php.rs @@ -1,7 +1,5 @@ mod language_servers; -use std::env; - use zed_extension_api::{self as zed, LanguageServerId, Result}; use crate::language_servers::{Intelephense, Phpactor}; @@ -27,20 +25,7 @@ impl zed::Extension for PhpExtension { match language_server_id.as_ref() { Intelephense::LANGUAGE_SERVER_ID => { let intelephense = self.intelephense.get_or_insert_with(|| Intelephense::new()); - - let server_path = intelephense.server_script_path(language_server_id)?; - Ok(zed::Command { - command: zed::node_binary_path()?, - args: vec![ - env::current_dir() - .unwrap() - .join(&server_path) - .to_string_lossy() - .to_string(), - "--stdio".to_string(), - ], - env: Default::default(), - }) + intelephense.language_server_command(language_server_id, worktree) } Phpactor::LANGUAGE_SERVER_ID => { let phpactor = self.phpactor.get_or_insert_with(|| Phpactor::new());