diff --git a/Cargo.lock b/Cargo.lock index 73780bd73db9ffcfb6b1723c5d42786edce3224a..dd37b6a6264cb7138e0f3dbfd6673abda9cd8af1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16324,14 +16324,6 @@ dependencies = [ "serde", ] -[[package]] -name = "zed_astro" -version = "0.1.2" -dependencies = [ - "serde", - "zed_extension_api 0.1.0", -] - [[package]] name = "zed_clojure" version = "0.0.3" diff --git a/Cargo.toml b/Cargo.toml index 96563fda0dd7af2dfd72e972e2b977678d480936..a08cd8efa97d4d49e6e3aabb6b8f0b03803bc074 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -149,7 +149,6 @@ members = [ # Extensions # - "extensions/astro", "extensions/clojure", "extensions/csharp", "extensions/deno", diff --git a/docs/src/languages/astro.md b/docs/src/languages/astro.md index 8553369c702f2e6096baa351b4facb1c8921b6df..e140832e89978ef7d4f056c34192fafcdd715ba1 100644 --- a/docs/src/languages/astro.md +++ b/docs/src/languages/astro.md @@ -1,6 +1,6 @@ # Astro -Astro support is available through the [Astro extension](https://github.com/zed-industries/zed/tree/main/extensions/astro). +Astro support is available through the [Astro extension](https://github.com/zed-extensions/astro). - Tree Sitter: [virchau13/tree-sitter-astro](https://github.com/virchau13/tree-sitter-astro) - Language Server: [withastro/language-tools](https://github.com/withastro/language-tools) diff --git a/extensions/astro/Cargo.toml b/extensions/astro/Cargo.toml deleted file mode 100644 index 979308ea5ff2e8e7938317703fab3b959e77b33e..0000000000000000000000000000000000000000 --- a/extensions/astro/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "zed_astro" -version = "0.1.2" -edition = "2021" -publish = false -license = "Apache-2.0" - -[lints] -workspace = true - -[lib] -path = "src/astro.rs" -crate-type = ["cdylib"] - -[dependencies] -serde = { version = "1.0", features = ["derive"] } -zed_extension_api = "0.1.0" diff --git a/extensions/astro/LICENSE-APACHE b/extensions/astro/LICENSE-APACHE deleted file mode 120000 index 1cd601d0a3affae83854be02a0afdec3b7a9ec4d..0000000000000000000000000000000000000000 --- a/extensions/astro/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE-APACHE \ No newline at end of file diff --git a/extensions/astro/extension.toml b/extensions/astro/extension.toml deleted file mode 100644 index 5c2d65f7140af7baecdafbb1a39db21c24984dcb..0000000000000000000000000000000000000000 --- a/extensions/astro/extension.toml +++ /dev/null @@ -1,15 +0,0 @@ -id = "astro" -name = "Astro" -description = "Astro support." -version = "0.1.2" -schema_version = 1 -authors = ["Alvaro Gaona ", "0xk1f0 "] -repository = "https://github.com/zed-industries/zed" - -[language_servers.astro-language-server] -name = "Astro Language Server" -language = "Astro" - -[grammars.astro] -repository = "https://github.com/virchau13/tree-sitter-astro" -commit = "4be180759ec13651f72bacee65fa477c64222a1a" diff --git a/extensions/astro/languages/astro/brackets.scm b/extensions/astro/languages/astro/brackets.scm deleted file mode 100644 index 2221eda3582176a20fa0aa6c05a17b89968d15af..0000000000000000000000000000000000000000 --- a/extensions/astro/languages/astro/brackets.scm +++ /dev/null @@ -1,3 +0,0 @@ -("{" @open "}" @close) -("<" @open ">" @close) -("\"" @open "\"" @close) diff --git a/extensions/astro/languages/astro/config.toml b/extensions/astro/languages/astro/config.toml deleted file mode 100644 index 4e949ca5151fddddc9b067b10e59a866ff1c7353..0000000000000000000000000000000000000000 --- a/extensions/astro/languages/astro/config.toml +++ /dev/null @@ -1,23 +0,0 @@ -name = "Astro" -grammar = "astro" -path_suffixes = ["astro"] -block_comment = [""] -autoclose_before = ";:.,=}])>" -brackets = [ - { start = "{", end = "}", close = true, newline = true }, - { start = "[", end = "]", close = true, newline = true }, - { start = "(", end = ")", close = true, newline = true }, - { start = "<", end = ">", close = false, newline = true, not_in = ["string", "comment"] }, - { start = "\"", end = "\"", close = true, newline = false, not_in = ["string", "comment"] }, - { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, - { start = "`", end = "`", close = true, newline = false, not_in = ["string"] }, - { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, -] -word_characters = ["#", "$", "-"] -scope_opt_in_language_servers = ["tailwindcss-language-server"] -prettier_parser_name = "astro" -prettier_plugins = ["prettier-plugin-astro"] - -[overrides.string] -word_characters = ["-"] -opt_into_language_servers = ["tailwindcss-language-server"] diff --git a/extensions/astro/languages/astro/highlights.scm b/extensions/astro/languages/astro/highlights.scm deleted file mode 100644 index a565e22b6e227530f1da2cb8cc7d936b14d9af4f..0000000000000000000000000000000000000000 --- a/extensions/astro/languages/astro/highlights.scm +++ /dev/null @@ -1,25 +0,0 @@ -(tag_name) @tag -(erroneous_end_tag_name) @keyword -(doctype) @tag.doctype -(attribute_name) @property -(attribute_value) @string -(comment) @comment - -[ - (attribute_value) - (quoted_attribute_value) -] @string - -"=" @operator - -[ - "{" - "}" -] @punctuation.bracket - -[ - "<" - ">" - "" -] @tag.delimiter diff --git a/extensions/astro/languages/astro/injections.scm b/extensions/astro/languages/astro/injections.scm deleted file mode 100644 index 4647715e2bef6a56a72617765df5077b19607d85..0000000000000000000000000000000000000000 --- a/extensions/astro/languages/astro/injections.scm +++ /dev/null @@ -1,21 +0,0 @@ -(frontmatter - (frontmatter_js_block) @content - (#set! "language" "typescript")) - -(attribute_interpolation - (attribute_js_expr) @content - (#set! "language" "typescript")) - -(html_interpolation - (permissible_text) @content - (#set! "language" "typescript")) - -(script_element - (raw_text) @content - (#set! "language" "typescript")) - -; TODO: add scss/less or more injections -; https://github.com/virchau13/tree-sitter-astro/blob/4be180759ec13651f72bacee65fa477c64222a1a/queries/injections.scm#L18-L27 -(style_element - (raw_text) @content - (#set! "language" "css")) diff --git a/extensions/astro/languages/astro/overrides.scm b/extensions/astro/languages/astro/overrides.scm deleted file mode 100644 index e84d1a3e604246b9a2f07e5d5c837c928493dbee..0000000000000000000000000000000000000000 --- a/extensions/astro/languages/astro/overrides.scm +++ /dev/null @@ -1,6 +0,0 @@ -[ - (attribute_value) - (quoted_attribute_value) -] @string - -(comment) @comment.inclusive diff --git a/extensions/astro/src/astro.rs b/extensions/astro/src/astro.rs deleted file mode 100644 index 72c3646246a6f5668e7422c69c17bf44d44dae6b..0000000000000000000000000000000000000000 --- a/extensions/astro/src/astro.rs +++ /dev/null @@ -1,168 +0,0 @@ -use std::collections::HashMap; -use std::{env, fs}; - -use serde::Deserialize; -use zed_extension_api::{self as zed, serde_json, Result}; - -const SERVER_PATH: &str = "node_modules/@astrojs/language-server/bin/nodeServer.js"; -const PACKAGE_NAME: &str = "@astrojs/language-server"; - -const TYPESCRIPT_PACKAGE_NAME: &str = "typescript"; - -/// The relative path to TypeScript's SDK. -const TYPESCRIPT_TSDK_PATH: &str = "node_modules/typescript/lib"; - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -struct PackageJson { - #[serde(default)] - dependencies: HashMap, - #[serde(default)] - dev_dependencies: HashMap, -} - -struct AstroExtension { - did_find_server: bool, - typescript_tsdk_path: String, -} - -impl AstroExtension { - fn server_exists(&self) -> bool { - fs::metadata(SERVER_PATH).map_or(false, |stat| stat.is_file()) - } - - fn server_script_path( - &mut self, - language_server_id: &zed::LanguageServerId, - worktree: &zed::Worktree, - ) -> Result { - let server_exists = self.server_exists(); - if self.did_find_server && server_exists { - self.install_typescript_if_needed(worktree)?; - return Ok(SERVER_PATH.to_string()); - } - - zed::set_language_server_installation_status( - language_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( - language_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.install_typescript_if_needed(worktree)?; - self.did_find_server = true; - Ok(SERVER_PATH.to_string()) - } - - /// Returns whether a local copy of TypeScript exists in the worktree. - fn typescript_exists_for_worktree(&self, worktree: &zed::Worktree) -> Result { - let package_json = worktree.read_text_file("package.json")?; - let package_json: PackageJson = serde_json::from_str(&package_json) - .map_err(|err| format!("failed to parse package.json: {err}"))?; - - let dev_dependencies = &package_json.dev_dependencies; - let dependencies = &package_json.dependencies; - - // Since the extension is not allowed to read the filesystem within the project - // except through the worktree (which does not contains `node_modules`), we check - // the `package.json` to see if `typescript` is listed in the dependencies. - Ok(dev_dependencies.contains_key(TYPESCRIPT_PACKAGE_NAME) - || dependencies.contains_key(TYPESCRIPT_PACKAGE_NAME)) - } - - fn install_typescript_if_needed(&mut self, worktree: &zed::Worktree) -> Result<()> { - if self - .typescript_exists_for_worktree(worktree) - .unwrap_or_default() - { - println!("found local TypeScript installation at '{TYPESCRIPT_TSDK_PATH}'"); - return Ok(()); - } - - let installed_typescript_version = - zed::npm_package_installed_version(TYPESCRIPT_PACKAGE_NAME)?; - let latest_typescript_version = zed::npm_package_latest_version(TYPESCRIPT_PACKAGE_NAME)?; - - if installed_typescript_version.as_ref() != Some(&latest_typescript_version) { - println!("installing {TYPESCRIPT_PACKAGE_NAME}@{latest_typescript_version}"); - zed::npm_install_package(TYPESCRIPT_PACKAGE_NAME, &latest_typescript_version)?; - } else { - println!("typescript already installed"); - } - - self.typescript_tsdk_path = env::current_dir() - .unwrap() - .join(TYPESCRIPT_TSDK_PATH) - .to_string_lossy() - .to_string(); - - Ok(()) - } -} - -impl zed::Extension for AstroExtension { - fn new() -> Self { - Self { - did_find_server: false, - typescript_tsdk_path: TYPESCRIPT_TSDK_PATH.to_owned(), - } - } - - fn language_server_command( - &mut self, - language_server_id: &zed::LanguageServerId, - worktree: &zed::Worktree, - ) -> Result { - let server_path = self.server_script_path(language_server_id, worktree)?; - 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_initialization_options( - &mut self, - _language_server_id: &zed::LanguageServerId, - _worktree: &zed::Worktree, - ) -> Result> { - Ok(Some(serde_json::json!({ - "provideFormatter": true, - "typescript": { - "tsdk": self.typescript_tsdk_path - } - }))) - } -} - -zed::register_extension!(AstroExtension);