diff --git a/Cargo.lock b/Cargo.lock index 9a4285a443..1b28ac7362 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16339,13 +16339,6 @@ dependencies = [ "zed_extension_api 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "zed_elm" -version = "0.0.1" -dependencies = [ - "zed_extension_api 0.1.0", -] - [[package]] name = "zed_emmet" version = "0.0.3" diff --git a/Cargo.toml b/Cargo.toml index 5e23de0df0..9ee3bcb4bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -152,7 +152,6 @@ members = [ "extensions/csharp", "extensions/deno", "extensions/elixir", - "extensions/elm", "extensions/emmet", "extensions/erlang", "extensions/glsl", diff --git a/docs/src/languages/elm.md b/docs/src/languages/elm.md index 5da5dd1248..ee351f14ee 100644 --- a/docs/src/languages/elm.md +++ b/docs/src/languages/elm.md @@ -1,6 +1,6 @@ # Elm -Elm support is available through the [Elm extension](https://github.com/zed-industries/zed/tree/main/extensions/elm). +Elm support is available through the [Elm extension](https://github.com/zed-extensions/elm). - Tree Sitter: [elm-tooling/tree-sitter-elm](https://github.com/elm-tooling/tree-sitter-elm) - Language Server: [elm-tooling/elm-language-server](https://github.com/elm-tooling/elm-language-server) diff --git a/extensions/elm/Cargo.toml b/extensions/elm/Cargo.toml deleted file mode 100644 index f28fc70311..0000000000 --- a/extensions/elm/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "zed_elm" -version = "0.0.1" -edition = "2021" -publish = false -license = "Apache-2.0" - -[lints] -workspace = true - -[lib] -path = "src/elm.rs" -crate-type = ["cdylib"] - -[dependencies] -zed_extension_api = "0.1.0" diff --git a/extensions/elm/LICENSE-APACHE b/extensions/elm/LICENSE-APACHE deleted file mode 120000 index 1cd601d0a3..0000000000 --- a/extensions/elm/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE-APACHE \ No newline at end of file diff --git a/extensions/elm/extension.toml b/extensions/elm/extension.toml deleted file mode 100644 index 0c77cf6478..0000000000 --- a/extensions/elm/extension.toml +++ /dev/null @@ -1,15 +0,0 @@ -id = "elm" -name = "Elm" -description = "Elm support." -version = "0.0.1" -schema_version = 1 -authors = ["Quinn Wilton ", "Andrey Kuzmin "] -repository = "https://github.com/zed-industries/zed" - -[language_servers.elm-language-server] -name = "elm-language-server" -language = "Elm" - -[grammars.elm] -repository = "https://github.com/elm-tooling/tree-sitter-elm" -commit = "09dbf221d7491dc8d8839616b27c21b9c025c457" diff --git a/extensions/elm/languages/elm/config.toml b/extensions/elm/languages/elm/config.toml deleted file mode 100644 index a142035cc0..0000000000 --- a/extensions/elm/languages/elm/config.toml +++ /dev/null @@ -1,13 +0,0 @@ -name = "Elm" -grammar = "elm" -path_suffixes = ["elm"] -line_comments = ["-- "] -block_comment = ["{- ", " -}"] -brackets = [ - { start = "{", end = "}", close = true, newline = true }, - { start = "[", end = "]", close = true, newline = true }, - { start = "(", end = ")", close = true, newline = true }, - { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, - { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, -] -tab_size = 2 diff --git a/extensions/elm/languages/elm/highlights.scm b/extensions/elm/languages/elm/highlights.scm deleted file mode 100644 index 5723c7eecb..0000000000 --- a/extensions/elm/languages/elm/highlights.scm +++ /dev/null @@ -1,72 +0,0 @@ -[ - "if" - "then" - "else" - "let" - "in" - (case) - (of) - (backslash) - (as) - (port) - (exposing) - (alias) - (import) - (module) - (type) - (arrow) - ] @keyword - -[ - (eq) - (operator_identifier) - (colon) -] @operator - -(type_annotation(lower_case_identifier) @function) -(port_annotation(lower_case_identifier) @function) -(function_declaration_left(lower_case_identifier) @function.definition) - -(function_call_expr - target: (value_expr - name: (value_qid (lower_case_identifier) @function))) - -(exposed_value(lower_case_identifier) @function) -(exposed_type(upper_case_identifier) @type) - -(field_access_expr(value_expr(value_qid)) @identifier) -(lower_pattern) @variable -(record_base_identifier) @identifier - -[ - "(" - ")" -] @punctuation.bracket - -[ - "|" - "," -] @punctuation.delimiter - -(number_constant_expr) @constant - -(type_declaration(upper_case_identifier) @type) -(type_ref) @type -(type_alias_declaration name: (upper_case_identifier) @type) - -(value_expr(upper_case_qid(upper_case_identifier)) @type) - -[ - (line_comment) - (block_comment) -] @comment - -(string_escape) @string.escape - -[ - (open_quote) - (close_quote) - (regular_string_part) - (open_char) - (close_char) -] @string diff --git a/extensions/elm/languages/elm/injections.scm b/extensions/elm/languages/elm/injections.scm deleted file mode 100644 index 0567320675..0000000000 --- a/extensions/elm/languages/elm/injections.scm +++ /dev/null @@ -1,2 +0,0 @@ -((glsl_content) @content - (#set! "language" "glsl")) diff --git a/extensions/elm/languages/elm/outline.scm b/extensions/elm/languages/elm/outline.scm deleted file mode 100644 index 1d7d5a70b0..0000000000 --- a/extensions/elm/languages/elm/outline.scm +++ /dev/null @@ -1,22 +0,0 @@ -(type_declaration - (type) @context - (upper_case_identifier) @name) @item - -(type_alias_declaration - (type) @context - (alias) @context - name: (upper_case_identifier) @name) @item - -(type_alias_declaration - typeExpression: - (type_expression - part: (record_type - (field_type - name: (lower_case_identifier) @name) @item))) - -(union_variant - name: (upper_case_identifier) @name) @item - -(value_declaration - functionDeclarationLeft: - (function_declaration_left(lower_case_identifier) @name)) @item diff --git a/extensions/elm/src/elm.rs b/extensions/elm/src/elm.rs deleted file mode 100644 index b2c3d404ab..0000000000 --- a/extensions/elm/src/elm.rs +++ /dev/null @@ -1,113 +0,0 @@ -use std::{env, fs}; -use zed::{ - serde_json::{self, Value}, - settings::LspSettings, -}; -use zed_extension_api::{self as zed, Result}; - -const SERVER_PATH: &str = "node_modules/@elm-tooling/elm-language-server/out/node/index.js"; -const PACKAGE_NAME: &str = "@elm-tooling/elm-language-server"; - -struct ElmExtension { - did_find_server: bool, -} - -impl ElmExtension { - fn server_exists(&self) -> bool { - fs::metadata(SERVER_PATH).map_or(false, |stat| stat.is_file()) - } - - fn server_script_path(&mut self, server_id: &zed::LanguageServerId) -> Result { - let server_exists = self.server_exists(); - if self.did_find_server && server_exists { - return Ok(SERVER_PATH.to_string()); - } - - zed::set_language_server_installation_status( - server_id, - &zed::LanguageServerInstallationStatus::CheckingForUpdate, - ); - let version = zed::npm_package_latest_version(PACKAGE_NAME)?; - - if !server_exists - || zed::npm_package_installed_version(PACKAGE_NAME)?.as_ref() != Some(&version) - { - zed::set_language_server_installation_status( - server_id, - &zed::LanguageServerInstallationStatus::Downloading, - ); - let result = zed::npm_install_package(PACKAGE_NAME, &version); - match result { - Ok(()) => { - if !self.server_exists() { - Err(format!( - "installed package '{PACKAGE_NAME}' did not contain expected path '{SERVER_PATH}'", - ))?; - } - } - Err(error) => { - if !self.server_exists() { - Err(error)?; - } - } - } - } - - self.did_find_server = true; - Ok(SERVER_PATH.to_string()) - } -} - -impl zed::Extension for ElmExtension { - fn new() -> Self { - Self { - did_find_server: false, - } - } - - fn language_server_command( - &mut self, - server_id: &zed::LanguageServerId, - _worktree: &zed::Worktree, - ) -> Result { - let server_path = self.server_script_path(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 language_server_workspace_configuration( - &mut self, - server_id: &zed::LanguageServerId, - worktree: &zed::Worktree, - ) -> Result> { - // elm-language-server expects workspace didChangeConfiguration notification - // params to be the same as lsp initialization_options - let initialization_options = LspSettings::for_worktree(server_id.as_ref(), worktree)? - .initialization_options - .clone() - .unwrap_or_default(); - - Ok(Some(match initialization_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(), initialization_options); - serde_json::to_value(op).unwrap_or_default() - } - None => initialization_options, - })) - } -} - -zed::register_extension!(ElmExtension);