//! Installs language servers (non-interactive, via package managers or //! direct download). /// Install a language server for the given language. /// /// Returns a success message or an error describing why installation failed. pub fn install_language_server(language: &str) -> anyhow::Result { match language { "rust" => { // rust-analyzer is typically installed via rustup let output = std::process::Command::new("rustup") .args(["component", "add", "rust-analyzer"]) .output()?; if output.status.success() { Ok("rust-analyzer installed via rustup".to_string()) } else { anyhow::bail!("failed to install rust-analyzer: {}", String::from_utf8_lossy(&output.stderr)) } } "python" => { let output = std::process::Command::new("npm") .args(["install", "-g", "pyright"]) .output()?; if output.status.success() { Ok("pyright installed via npm".to_string()) } else { anyhow::bail!("failed to install pyright: {}", String::from_utf8_lossy(&output.stderr)) } } lang => anyhow::bail!("no install method known for language '{lang}'"), } }