From c19e71f51e47de02b25adf6146e41aab9e1d9ccd Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Thu, 18 Jul 2024 12:41:18 -0400 Subject: [PATCH] languages: Remove lingering Elm file (#14754) This PR removes a leftover file from when Elm support was done natively. Elm was extracted into an extension in #10432. Release Notes: - N/A --- crates/languages/src/elm.rs | 155 ------------------------------------ 1 file changed, 155 deletions(-) delete mode 100644 crates/languages/src/elm.rs diff --git a/crates/languages/src/elm.rs b/crates/languages/src/elm.rs deleted file mode 100644 index 924f43c5df..0000000000 --- a/crates/languages/src/elm.rs +++ /dev/null @@ -1,155 +0,0 @@ -use anyhow::{anyhow, Result}; -use async_trait::async_trait; -use futures::StreamExt; -use gpui::AsyncAppContext; -use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; -use lsp::LanguageServerBinary; -use node_runtime::NodeRuntime; -use project::project_settings::ProjectSettings; -use serde_json::Value; -use settings::Settings; -use smol::fs; -use std::{ - any::Any, - ffi::OsString, - path::{Path, PathBuf}, - sync::Arc, -}; -use util::{maybe, ResultExt}; - -const SERVER_NAME: &str = "elm-language-server"; -const SERVER_PATH: &str = "node_modules/@elm-tooling/elm-language-server/out/node/index.js"; - -fn server_binary_arguments(server_path: &Path) -> Vec { - vec![server_path.into(), "--stdio".into()] -} - -pub struct ElmLspAdapter { - node: Arc, -} - -impl ElmLspAdapter { - pub fn new(node: Arc) -> Self { - ElmLspAdapter { node } - } -} - -#[async_trait(?Send)] -impl LspAdapter for ElmLspAdapter { - fn name(&self) -> LanguageServerName { - LanguageServerName(SERVER_NAME.into()) - } - - async fn fetch_latest_server_version( - &self, - _: &dyn LspAdapterDelegate, - ) -> Result> { - Ok(Box::new( - self.node - .npm_package_latest_version("@elm-tooling/elm-language-server") - .await?, - ) as Box<_>) - } - - async fn fetch_server_binary( - &self, - latest_version: Box, - container_dir: PathBuf, - _: &dyn LspAdapterDelegate, - ) -> Result { - let latest_version = latest_version.downcast::().unwrap(); - let server_path = container_dir.join(SERVER_PATH); - let package_name = "@elm-tooling/elm-language-server"; - - let should_install_language_server = self - .node - .should_install_npm_package(package_name, &server_path, &container_dir, &latest_version) - .await; - - if should_install_language_server { - self.node - .npm_install_packages(&container_dir, &[(package_name, latest_version.as_str())]) - .await?; - } - - Ok(LanguageServerBinary { - path: self.node.binary_path().await?, - env: None, - arguments: server_binary_arguments(&server_path), - }) - } - - async fn cached_server_binary( - &self, - container_dir: PathBuf, - _: &dyn LspAdapterDelegate, - ) -> Option { - get_cached_server_binary(container_dir, &*self.node).await - } - - async fn installation_test_binary( - &self, - container_dir: PathBuf, - ) -> Option { - get_cached_server_binary(container_dir, &*self.node).await - } - - async fn workspace_configuration( - self: Arc, - _: &Arc, - cx: &mut AsyncAppContext, - ) -> Result { - // elm-language-server expects workspace didChangeConfiguration notification - // params to be the same as lsp initialization_options - let override_options = cx.update(|cx| { - ProjectSettings::get_global(cx) - .lsp - .get(SERVER_NAME) - .and_then(|s| s.initialization_options.clone()) - .unwrap_or_default() - })?; - - Ok(match override_options.clone().as_object_mut() { - Some(op) => { - // elm-language-server requests workspace configuration - // for the `elmLS` section, so we have to nest - // another copy of initialization_options there - op.insert("elmLS".into(), override_options); - serde_json::to_value(op).unwrap_or_default() - } - None => override_options, - }) - } -} - -async fn get_cached_server_binary( - container_dir: PathBuf, - node: &dyn NodeRuntime, -) -> Option { - maybe!(async { - let mut last_version_dir = None; - let mut entries = fs::read_dir(&container_dir).await?; - while let Some(entry) = entries.next().await { - let entry = entry?; - if entry.file_type().await?.is_dir() { - last_version_dir = Some(entry.path()); - } - } - let last_version_dir = last_version_dir.ok_or_else(|| anyhow!("no cached binary"))?; - let server_path = last_version_dir.join(SERVER_PATH); - if server_path.exists() { - Ok(LanguageServerBinary { - path: node.binary_path().await?, - env: None, - arguments: server_binary_arguments(&server_path), - }) - } else { - Err(anyhow!( - "missing executable in directory {:?}", - last_version_dir - )) - } - }) - .await - .log_err() -}