From 721d7ca0f2432e93bf24149c1540307bb2d62a77 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 27 Jan 2024 18:18:06 -0300 Subject: [PATCH 01/15] feat: init astro-language-server --- Cargo.lock | 10 ++ Cargo.toml | 1 + crates/zed/Cargo.toml | 1 + crates/zed/src/languages.rs | 9 ++ crates/zed/src/languages/astro.rs | 133 +++++++++++++++++++++ crates/zed/src/languages/astro/config.toml | 16 +++ 6 files changed, 170 insertions(+) create mode 100644 crates/zed/src/languages/astro.rs create mode 100644 crates/zed/src/languages/astro/config.toml diff --git a/Cargo.lock b/Cargo.lock index 888506b09e4921..f15b24cca6b405 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8363,6 +8363,15 @@ dependencies = [ "regex", ] +[[package]] +name = "tree-sitter-astro" +version = "0.0.1" +source = "git+https://github.com/virchau13/tree-sitter-astro.git?rev=e924787e12e8a03194f36a113290ac11d6dc10f3#e924787e12e8a03194f36a113290ac11d6dc10f3" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-bash" version = "0.20.4" @@ -9719,6 +9728,7 @@ dependencies = [ "tiny_http", "toml", "tree-sitter", + "tree-sitter-astro", "tree-sitter-bash", "tree-sitter-c", "tree-sitter-cpp", diff --git a/Cargo.toml b/Cargo.toml index 94a9db8382d93b..21a50e5c17eb44 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -164,6 +164,7 @@ tree-sitter-nu = { git = "https://github.com/nushell/tree-sitter-nu", rev = "26b tree-sitter-vue = {git = "https://github.com/zed-industries/tree-sitter-vue", rev = "6608d9d60c386f19d80af7d8132322fa11199c42"} tree-sitter-uiua = {git = "https://github.com/shnarazk/tree-sitter-uiua", rev = "9260f11be5900beda4ee6d1a24ab8ddfaf5a19b2"} tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", rev = "0d08703e4c3f426ec61695d7617415fff97029bd" } +tree-sitter-astro = { git = "https://github.com/virchau13/tree-sitter-astro.git", rev = "e924787e12e8a03194f36a113290ac11d6dc10f3" } [patch.crates-io] tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "31c40449749c4263a91a43593831b82229049a4c" } diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 3ad3595044a199..a1720d709926f2 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -144,6 +144,7 @@ tree-sitter-nu.workspace = true tree-sitter-vue.workspace = true tree-sitter-uiua.workspace = true tree-sitter-zig.workspace = true +tree-sitter-astro.workspace = true url = "2.2" urlencoding = "2.1.2" diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 0e14c4ab9a6cf4..52c9be33b0c060 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -33,6 +33,7 @@ mod uiua; mod vue; mod yaml; mod zig; +mod astro; // 1. Add tree-sitter-{language} parser to zed crate // 2. Create a language directory in zed/crates/zed/src/languages and add the language to init function below @@ -249,6 +250,14 @@ pub fn init( Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), ], ); + language( + "astro", + tree_sitter_astro::language(), + vec![ + Arc::new(astro::AstroLspAdapter::new(node_runtime.clone())), + Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), + ] + ); language( "php", tree_sitter_php::language(), diff --git a/crates/zed/src/languages/astro.rs b/crates/zed/src/languages/astro.rs new file mode 100644 index 00000000000000..e57bcd846b6194 --- /dev/null +++ b/crates/zed/src/languages/astro.rs @@ -0,0 +1,133 @@ +use anyhow::{anyhow, Result}; +use async_trait::async_trait; +use futures::StreamExt; +use language::{LanguageServerName, LspAdapter, LspAdapterDelegate}; +use lsp::LanguageServerBinary; +use node_runtime::NodeRuntime; +use serde_json::json; +use smol::fs; +use std::{ + any::Any, + ffi::OsString, + path::{Path, PathBuf}, + sync::Arc, +}; +use util::ResultExt; + +const SERVER_PATH: &'static str = "node_modules/@astrojs/language-server/bin/nodeServer.js"; + +fn server_binary_arguments(server_path: &Path) -> Vec { + vec![server_path.into(), "--stdio".into()] +} + +pub struct AstroLspAdapter { + node: Arc, +} + +impl AstroLspAdapter { + pub fn new(node: Arc) -> Self { + AstroLspAdapter { node } + } +} + +#[async_trait] +impl LspAdapter for AstroLspAdapter { + fn name(&self) -> LanguageServerName { + LanguageServerName("astro-language-server".into()) + } + + fn short_name(&self) -> &'static str { + "astro" + } + + async fn fetch_latest_server_version( + &self, + _: &dyn LspAdapterDelegate, + ) -> Result> { + Ok(Box::new( + self.node + .npm_package_latest_version("@astrojs/language-server") + .await?, + ) as Box<_>) + } + + async fn fetch_server_binary( + &self, + version: Box, + container_dir: PathBuf, + _: &dyn LspAdapterDelegate, + ) -> Result { + let version = version.downcast::().unwrap(); + let server_path = container_dir.join(SERVER_PATH); + + if fs::metadata(&server_path).await.is_err() { + self.node + .npm_install_packages( + &container_dir, + &[("@astrojs/language-server", version.as_str())], + ) + .await?; + } + + Ok(LanguageServerBinary { + path: self.node.binary_path().await?, + 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 + } + + fn initialization_options(&self) -> Option { + Some(json!({ + "provideFormatter": true + })) + } + + fn prettier_plugins(&self) -> &[&'static str] { + &["prettier-plugin-astro"] + } +} + +async fn get_cached_server_binary( + container_dir: PathBuf, + node: &dyn NodeRuntime, +) -> Option { + (|| async move { + 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?, + arguments: server_binary_arguments(&server_path), + }) + } else { + Err(anyhow!( + "missing executable in directory {:?}", + last_version_dir + )) + } + })() + .await + .log_err() +} diff --git a/crates/zed/src/languages/astro/config.toml b/crates/zed/src/languages/astro/config.toml new file mode 100644 index 00000000000000..6b5a2b9c11e8e5 --- /dev/null +++ b/crates/zed/src/languages/astro/config.toml @@ -0,0 +1,16 @@ +name = "Astro" +path_suffixes = ["astro"] +line_comments = ["// "] +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 = 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 = ["#", "$", "-"] +prettier_parser_name = "astro" From fa85f1caf1460a26b5fe6cdc639d1991b444e4f3 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sun, 28 Jan 2024 14:34:30 -0300 Subject: [PATCH 02/15] feat: add typescript sdk and queries --- crates/zed/src/languages/astro.rs | 5 ++++- crates/zed/src/languages/astro/config.toml | 3 ++- crates/zed/src/languages/astro/highlights.scm | 12 ++++++++++++ crates/zed/src/languages/astro/injections.scm | 15 +++++++++++++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 crates/zed/src/languages/astro/highlights.scm create mode 100644 crates/zed/src/languages/astro/injections.scm diff --git a/crates/zed/src/languages/astro.rs b/crates/zed/src/languages/astro.rs index e57bcd846b6194..88fd30950b9dfa 100644 --- a/crates/zed/src/languages/astro.rs +++ b/crates/zed/src/languages/astro.rs @@ -92,7 +92,10 @@ impl LspAdapter for AstroLspAdapter { fn initialization_options(&self) -> Option { Some(json!({ - "provideFormatter": true + "provideFormatter": true, + "typescript": { + "tsdk": "node_modules/typescript/lib", + } })) } diff --git a/crates/zed/src/languages/astro/config.toml b/crates/zed/src/languages/astro/config.toml index 6b5a2b9c11e8e5..3d40a0ca5fd7b3 100644 --- a/crates/zed/src/languages/astro/config.toml +++ b/crates/zed/src/languages/astro/config.toml @@ -7,10 +7,11 @@ 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 = ["#", "$", "-"] +word_characters = ["#", "$", '-'] prettier_parser_name = "astro" diff --git a/crates/zed/src/languages/astro/highlights.scm b/crates/zed/src/languages/astro/highlights.scm new file mode 100644 index 00000000000000..2c70a9c3e6d567 --- /dev/null +++ b/crates/zed/src/languages/astro/highlights.scm @@ -0,0 +1,12 @@ +(tag_name) @tag +(erroneous_end_tag_name) @tag.error +(doctype) @constant +(attribute_name) @attribute +(attribute_value) @string +(comment) @comment + +[ + "<" + ">" + " Date: Sun, 28 Jan 2024 14:55:25 -0300 Subject: [PATCH 03/15] fix: add missing comma --- crates/zed/src/languages.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 52c9be33b0c060..27c732277289b5 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -256,7 +256,7 @@ pub fn init( vec![ Arc::new(astro::AstroLspAdapter::new(node_runtime.clone())), Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), - ] + ], ); language( "php", From 741479236ef484f075ad3993758187d20fd4996f Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sun, 28 Jan 2024 15:36:58 -0300 Subject: [PATCH 04/15] fix: amend injections --- crates/zed/src/languages/astro/injections.scm | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/zed/src/languages/astro/injections.scm b/crates/zed/src/languages/astro/injections.scm index b75fd43894b77a..3d23447f91753c 100644 --- a/crates/zed/src/languages/astro/injections.scm +++ b/crates/zed/src/languages/astro/injections.scm @@ -1,15 +1,15 @@ -((script_element - (raw_text) @injection.content) - (#set! injection.language "javascript")) +(script_element + (raw_text) @content + (#set! "language" "javascript")) -((style_element - (raw_text) @injection.content) - (#set! injection.language "css")) +(style_element + (raw_text) @content + (#set! "language" "css")) -((frontmatter - (raw_text) @injection.content) - (#set! injection.language "typescript")) +(frontmatter + (raw_text) @content + (#set! "language" "typescript")) -((interpolation - (raw_text) @injection.content) - (#set! injection.language "tsx")) +(interpolation + (raw_text) @content + (#set! "language" "tsx")) From 62068ba92dd061ab1edf865bd72ab41acdb556a6 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sun, 28 Jan 2024 16:19:50 -0300 Subject: [PATCH 05/15] fix: amend lint errors --- crates/zed/src/languages.rs | 2 +- crates/zed/src/languages/astro/injections.scm | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 27c732277289b5..ca1b8cabde9f48 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -9,6 +9,7 @@ use util::{asset_str, paths::PLUGINS_DIR}; use self::{deno::DenoSettings, elixir::ElixirSettings}; +mod astro; mod c; mod css; mod deno; @@ -33,7 +34,6 @@ mod uiua; mod vue; mod yaml; mod zig; -mod astro; // 1. Add tree-sitter-{language} parser to zed crate // 2. Create a language directory in zed/crates/zed/src/languages and add the language to init function below diff --git a/crates/zed/src/languages/astro/injections.scm b/crates/zed/src/languages/astro/injections.scm index 3d23447f91753c..2665561840f88f 100644 --- a/crates/zed/src/languages/astro/injections.scm +++ b/crates/zed/src/languages/astro/injections.scm @@ -7,9 +7,9 @@ (#set! "language" "css")) (frontmatter - (raw_text) @content - (#set! "language" "typescript")) + (raw_text) @content + (#set! "language" "typescript")) (interpolation - (raw_text) @content - (#set! "language" "tsx")) + (raw_text) @content + (#set! "language" "tsx")) From 570ffdd8a283226eb128371f107d450aae2dc999 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Mon, 29 Jan 2024 19:30:55 -0300 Subject: [PATCH 06/15] feat: add brackets, folds, indents and updates --- crates/zed/src/languages/astro/brackets.scm | 2 ++ crates/zed/src/languages/astro/config.toml | 7 +++++-- crates/zed/src/languages/astro/folds.scm | 9 +++++++++ crates/zed/src/languages/astro/highlights.scm | 8 +++++++- crates/zed/src/languages/astro/indents.scm | 5 +++++ 5 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 crates/zed/src/languages/astro/brackets.scm create mode 100644 crates/zed/src/languages/astro/folds.scm create mode 100644 crates/zed/src/languages/astro/indents.scm diff --git a/crates/zed/src/languages/astro/brackets.scm b/crates/zed/src/languages/astro/brackets.scm new file mode 100644 index 00000000000000..2d12b17daab82f --- /dev/null +++ b/crates/zed/src/languages/astro/brackets.scm @@ -0,0 +1,2 @@ +("<" @open ">" @close) +("\"" @open "\"" @close) diff --git a/crates/zed/src/languages/astro/config.toml b/crates/zed/src/languages/astro/config.toml index 3d40a0ca5fd7b3..a6dae179829434 100644 --- a/crates/zed/src/languages/astro/config.toml +++ b/crates/zed/src/languages/astro/config.toml @@ -1,6 +1,5 @@ name = "Astro" path_suffixes = ["astro"] -line_comments = ["// "] block_comment = [""] autoclose_before = ";:.,=}])>" brackets = [ @@ -13,5 +12,9 @@ brackets = [ { 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" + +[overrides.string] +word_characters = ["-"] +opt_into_language_servers = ["tailwindcss-language-server"] diff --git a/crates/zed/src/languages/astro/folds.scm b/crates/zed/src/languages/astro/folds.scm new file mode 100644 index 00000000000000..795c32fc4a3bdb --- /dev/null +++ b/crates/zed/src/languages/astro/folds.scm @@ -0,0 +1,9 @@ +[ + (style_element) + (script_element) + (element) + (if_statement) + (else_statement) + (each_statement) + (await_statement) +] @fold diff --git a/crates/zed/src/languages/astro/highlights.scm b/crates/zed/src/languages/astro/highlights.scm index 2c70a9c3e6d567..a801bd884ea2e0 100644 --- a/crates/zed/src/languages/astro/highlights.scm +++ b/crates/zed/src/languages/astro/highlights.scm @@ -5,8 +5,14 @@ (attribute_value) @string (comment) @comment +[ + "{" + "}" +] @punctuation.bracket + [ "<" ">" "" +] @tag.delimiter diff --git a/crates/zed/src/languages/astro/indents.scm b/crates/zed/src/languages/astro/indents.scm new file mode 100644 index 00000000000000..6836ed51573c88 --- /dev/null +++ b/crates/zed/src/languages/astro/indents.scm @@ -0,0 +1,5 @@ +[ + (element) + (script_element) + (style_element) +] @indent From a6b4c9fb910ae7ec1ba249d7819790be694195fd Mon Sep 17 00:00:00 2001 From: Alvaro Date: Thu, 8 Feb 2024 00:14:06 -0300 Subject: [PATCH 07/15] test: use nvim scheme files --- Cargo.lock | 10 ++++++++ Cargo.toml | 1 + crates/zed/Cargo.toml | 3 ++- crates/zed/src/languages/astro/brackets.scm | 2 -- crates/zed/src/languages/astro/folds.scm | 9 ------- crates/zed/src/languages/astro/highlights.scm | 24 +++++++++---------- crates/zed/src/languages/astro/indents.scm | 6 +---- crates/zed/src/languages/astro/injections.scm | 22 +++++++++++------ 8 files changed, 40 insertions(+), 37 deletions(-) delete mode 100644 crates/zed/src/languages/astro/brackets.scm delete mode 100644 crates/zed/src/languages/astro/folds.scm diff --git a/Cargo.lock b/Cargo.lock index 4033a4918ec6db..006b55e28088c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8686,6 +8686,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-scss" +version = "0.0.1" +source = "git+https://github.com/serenadeai/tree-sitter-scss?rev=c478c6868648eff49eb04a4df90d703dc45b312a#c478c6868648eff49eb04a4df90d703dc45b312a" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-svelte" version = "0.10.2" @@ -9844,6 +9853,7 @@ dependencies = [ "tree-sitter-ruby", "tree-sitter-rust", "tree-sitter-scheme", + "tree-sitter-scss", "tree-sitter-svelte", "tree-sitter-toml", "tree-sitter-typescript", diff --git a/Cargo.toml b/Cargo.toml index f43dff1d45b77b..8854caeaab6377 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -155,6 +155,7 @@ tree-sitter-typescript = { git = "https://github.com/tree-sitter/tree-sitter-typ tree-sitter-ruby = "0.20.0" tree-sitter-haskell = { git = "https://github.com/tree-sitter/tree-sitter-haskell", rev = "cf98de23e4285b8e6bcb57b050ef2326e2cc284b" } tree-sitter-html = "0.19.0" +tree-sitter-scss = { git = "https://github.com/serenadeai/tree-sitter-scss", rev = "c478c6868648eff49eb04a4df90d703dc45b312a" } tree-sitter-scheme = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "af0fd1fa452cb2562dc7b5c8a8c55551c39273b9" } tree-sitter-svelte = { git = "https://github.com/Himujjal/tree-sitter-svelte", rev = "697bb515471871e85ff799ea57a76298a71a9cca" } tree-sitter-racket = { git = "https://github.com/zed-industries/tree-sitter-racket", rev = "eb010cf2c674c6fd9a6316a84e28ef90190fe51a" } diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index b7558490c2238b..c1157a037134d1 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -113,6 +113,7 @@ thiserror.workspace = true tiny_http = "0.8" toml.workspace = true tree-sitter.workspace = true +tree-sitter-astro.workspace = true tree-sitter-bash.workspace = true tree-sitter-c.workspace = true tree-sitter-cpp.workspace = true @@ -135,6 +136,7 @@ tree-sitter-haskell.workspace = true tree-sitter-html.workspace = true tree-sitter-php.workspace = true tree-sitter-purescript.workspace = true +tree-sitter-scss.workspace = true tree-sitter-scheme.workspace = true tree-sitter-svelte.workspace = true tree-sitter-racket.workspace = true @@ -145,7 +147,6 @@ tree-sitter-nu.workspace = true tree-sitter-vue.workspace = true tree-sitter-uiua.workspace = true tree-sitter-zig.workspace = true -tree-sitter-astro.workspace = true url = "2.2" urlencoding = "2.1.2" diff --git a/crates/zed/src/languages/astro/brackets.scm b/crates/zed/src/languages/astro/brackets.scm deleted file mode 100644 index 2d12b17daab82f..00000000000000 --- a/crates/zed/src/languages/astro/brackets.scm +++ /dev/null @@ -1,2 +0,0 @@ -("<" @open ">" @close) -("\"" @open "\"" @close) diff --git a/crates/zed/src/languages/astro/folds.scm b/crates/zed/src/languages/astro/folds.scm deleted file mode 100644 index 795c32fc4a3bdb..00000000000000 --- a/crates/zed/src/languages/astro/folds.scm +++ /dev/null @@ -1,9 +0,0 @@ -[ - (style_element) - (script_element) - (element) - (if_statement) - (else_statement) - (each_statement) - (await_statement) -] @fold diff --git a/crates/zed/src/languages/astro/highlights.scm b/crates/zed/src/languages/astro/highlights.scm index a801bd884ea2e0..0acb1e05f0d20e 100644 --- a/crates/zed/src/languages/astro/highlights.scm +++ b/crates/zed/src/languages/astro/highlights.scm @@ -1,18 +1,16 @@ -(tag_name) @tag -(erroneous_end_tag_name) @tag.error -(doctype) @constant -(attribute_name) @attribute -(attribute_value) @string -(comment) @comment +; inherits: html +"---" @punctuation.delimiter [ "{" "}" -] @punctuation.bracket +] @punctuation.special -[ - "<" - ">" - "" -] @tag.delimiter +((start_tag + (tag_name) @type)) + +((end_tag + (tag_name) @type)) + +((erroneous_end_tag + (erroneous_end_tag_name) @type)) diff --git a/crates/zed/src/languages/astro/indents.scm b/crates/zed/src/languages/astro/indents.scm index 6836ed51573c88..1f2129cf998d01 100644 --- a/crates/zed/src/languages/astro/indents.scm +++ b/crates/zed/src/languages/astro/indents.scm @@ -1,5 +1 @@ -[ - (element) - (script_element) - (style_element) -] @indent +; inherits: html diff --git a/crates/zed/src/languages/astro/injections.scm b/crates/zed/src/languages/astro/injections.scm index 2665561840f88f..02bf4972625448 100644 --- a/crates/zed/src/languages/astro/injections.scm +++ b/crates/zed/src/languages/astro/injections.scm @@ -1,15 +1,23 @@ -(script_element +; inherits: html_tags +(frontmatter (raw_text) @content - (#set! "language" "javascript")) + (#set! "language" "typescript")) -(style_element +(interpolation (raw_text) @content - (#set! "language" "css")) + (#set! "language" "tsx")) -(frontmatter +(script_element (raw_text) @content (#set! "language" "typescript")) -(interpolation +(style_element + (start_tag + (attribute + (attribute_name) @_lang_attr + (quoted_attribute_value + (attribute_value) @_lang_value))) (raw_text) @content - (#set! "language" "tsx")) + (#eq? @_lang_attr "lang") + (#eq? @_lang_value "scss") + (#set! "language" "scss")) From 59391463f16fe2326c02b3a2ff6e46e3fd08e56a Mon Sep 17 00:00:00 2001 From: Alvaro Date: Thu, 8 Feb 2024 09:41:39 -0300 Subject: [PATCH 08/15] fix: adapt to new structure --- crates/zed/src/languages.rs | 16 ++++++++-------- crates/zed/src/languages/tailwind.rs | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index cc303d90e66da7..41c656efb2353c 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -64,6 +64,7 @@ pub fn init( DenoSettings::register(cx); languages.add_grammars([ + ("astro", tree_sitter_astro::language()), ("bash", tree_sitter_bash::language()), ("beancount", tree_sitter_beancount::language()), ("c", tree_sitter_c::language()), @@ -119,6 +120,13 @@ pub fn init( languages.register(name, load_config(name), adapters, load_queries) }; + language( + "astro", + vec![ + Arc::new(astro::AstroLspAdapter::new(node_runtime.clone())), + Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), + ], + ); language("bash", vec![]); language("beancount", vec![]); language("c", vec![Arc::new(c::CLspAdapter) as Arc]); @@ -257,14 +265,6 @@ pub fn init( Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), ], ); - language( - "astro", - tree_sitter_astro::language(), - vec![ - Arc::new(astro::AstroLspAdapter::new(node_runtime.clone())), - Arc::new(tailwind::TailwindLspAdapter::new(node_runtime.clone())), - ], - ); language( "php", vec![ diff --git a/crates/zed/src/languages/tailwind.rs b/crates/zed/src/languages/tailwind.rs index 6243db96eb3933..206e390e42ee3f 100644 --- a/crates/zed/src/languages/tailwind.rs +++ b/crates/zed/src/languages/tailwind.rs @@ -114,6 +114,7 @@ impl LspAdapter for TailwindLspAdapter { fn language_ids(&self) -> HashMap { HashMap::from_iter([ + ("Astro".to_string(), "astro".to_string()), ("HTML".to_string(), "html".to_string()), ("CSS".to_string(), "css".to_string()), ("JavaScript".to_string(), "javascript".to_string()), From 4e78c3003a7c2c52d7391e94a26ec730ae3fbcc4 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 20:15:22 -0300 Subject: [PATCH 09/15] fix: amend indentation and remove scss --- Cargo.lock | 10 --- Cargo.toml | 180 ++++++++++++++++++++++++++--------------------------- 2 files changed, 89 insertions(+), 101 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6da9431abb080f..2278e89ab26d0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9321,15 +9321,6 @@ dependencies = [ "tree-sitter", ] -[[package]] -name = "tree-sitter-scss" -version = "0.0.1" -source = "git+https://github.com/serenadeai/tree-sitter-scss?rev=c478c6868648eff49eb04a4df90d703dc45b312a#c478c6868648eff49eb04a4df90d703dc45b312a" -dependencies = [ - "cc", - "tree-sitter", -] - [[package]] name = "tree-sitter-svelte" version = "0.10.2" @@ -10726,7 +10717,6 @@ dependencies = [ "tree-sitter-ruby", "tree-sitter-rust", "tree-sitter-scheme", - "tree-sitter-scss", "tree-sitter-svelte", "tree-sitter-toml", "tree-sitter-typescript", diff --git a/Cargo.toml b/Cargo.toml index 9c4c4c4a3be685..bb818b6a798efc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,90 +1,90 @@ [workspace] members = [ - "crates/activity_indicator", - "crates/ai", - "crates/assets", - "crates/assistant", - "crates/audio", - "crates/auto_update", - "crates/breadcrumbs", - "crates/call", - "crates/channel", - "crates/cli", - "crates/client", - "crates/clock", - "crates/collab", - "crates/collab_ui", - "crates/collections", - "crates/command_palette", - "crates/copilot", - "crates/copilot_ui", - "crates/db", - "crates/diagnostics", - "crates/editor", - "crates/extension", - "crates/feature_flags", - "crates/feedback", - "crates/file_finder", - "crates/fs", - "crates/fsevent", - "crates/fuzzy", - "crates/git", - "crates/go_to_line", - "crates/gpui", - "crates/gpui_macros", - "crates/install_cli", - "crates/journal", - "crates/language", - "crates/language_selector", - "crates/language_tools", - "crates/live_kit_client", - "crates/live_kit_server", - "crates/lsp", - "crates/markdown_preview", - "crates/media", - "crates/menu", - "crates/multi_buffer", - "crates/node_runtime", - "crates/notifications", - "crates/outline", - "crates/picker", - "crates/plugin", - "crates/plugin_macros", - "crates/prettier", - "crates/project", - "crates/project_panel", - "crates/project_symbols", - "crates/quick_action_bar", - "crates/recent_projects", - "crates/refineable", - "crates/refineable/derive_refineable", - "crates/release_channel", - "crates/rich_text", - "crates/rope", - "crates/rpc", - "crates/search", - "crates/semantic_index", - "crates/settings", - "crates/snippet", - "crates/sqlez", - "crates/sqlez_macros", - "crates/story", - "crates/storybook", - "crates/sum_tree", - "crates/terminal", - "crates/terminal_view", - "crates/text", - "crates/theme", - "crates/theme_importer", - "crates/theme_selector", - "crates/ui", - "crates/util", - "crates/vcs_menu", - "crates/vim", - "crates/welcome", - "crates/workspace", - "crates/zed", - "crates/zed_actions", + "crates/activity_indicator", + "crates/ai", + "crates/assets", + "crates/assistant", + "crates/audio", + "crates/auto_update", + "crates/breadcrumbs", + "crates/call", + "crates/channel", + "crates/cli", + "crates/client", + "crates/clock", + "crates/collab", + "crates/collab_ui", + "crates/collections", + "crates/command_palette", + "crates/copilot", + "crates/copilot_ui", + "crates/db", + "crates/diagnostics", + "crates/editor", + "crates/extension", + "crates/feature_flags", + "crates/feedback", + "crates/file_finder", + "crates/fs", + "crates/fsevent", + "crates/fuzzy", + "crates/git", + "crates/go_to_line", + "crates/gpui", + "crates/gpui_macros", + "crates/install_cli", + "crates/journal", + "crates/language", + "crates/language_selector", + "crates/language_tools", + "crates/live_kit_client", + "crates/live_kit_server", + "crates/lsp", + "crates/markdown_preview", + "crates/media", + "crates/menu", + "crates/multi_buffer", + "crates/node_runtime", + "crates/notifications", + "crates/outline", + "crates/picker", + "crates/plugin", + "crates/plugin_macros", + "crates/prettier", + "crates/project", + "crates/project_panel", + "crates/project_symbols", + "crates/quick_action_bar", + "crates/recent_projects", + "crates/refineable", + "crates/refineable/derive_refineable", + "crates/release_channel", + "crates/rich_text", + "crates/rope", + "crates/rpc", + "crates/search", + "crates/semantic_index", + "crates/settings", + "crates/snippet", + "crates/sqlez", + "crates/sqlez_macros", + "crates/story", + "crates/storybook", + "crates/sum_tree", + "crates/terminal", + "crates/terminal_view", + "crates/text", + "crates/theme", + "crates/theme_importer", + "crates/theme_selector", + "crates/ui", + "crates/util", + "crates/vcs_menu", + "crates/vim", + "crates/welcome", + "crates/workspace", + "crates/zed", + "crates/zed_actions", ] default-members = ["crates/zed"] resolver = "2" @@ -188,8 +188,8 @@ globset = "0.4" indoc = "1" # We explicitly disable a http2 support in isahc. isahc = { version = "1.7.2", default-features = false, features = [ - "static-curl", - "text-decoding", + "static-curl", + "text-decoding", ] } lazy_static = "1.4.0" log = { version = "0.4.16", features = ["kv_unstable_serde"] } @@ -209,8 +209,8 @@ serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } serde_json = { version = "1.0", features = ["preserve_order", "raw_value"] } serde_json_lenient = { version = "0.1", features = [ - "preserve_order", - "raw_value", + "preserve_order", + "raw_value", ] } serde_repr = "0.1" smallvec = { version = "1.6", features = ["union"] } @@ -257,7 +257,6 @@ tree-sitter-python = "0.20.2" tree-sitter-racket = { git = "https://github.com/zed-industries/tree-sitter-racket", rev = "eb010cf2c674c6fd9a6316a84e28ef90190fe51a" } tree-sitter-ruby = "0.20.0" tree-sitter-rust = "0.20.3" -tree-sitter-scss = { git = "https://github.com/serenadeai/tree-sitter-scss", rev = "c478c6868648eff49eb04a4df90d703dc45b312a" } tree-sitter-scheme = { git = "https://github.com/6cdh/tree-sitter-scheme", rev = "af0fd1fa452cb2562dc7b5c8a8c55551c39273b9" } tree-sitter-svelte = { git = "https://github.com/Himujjal/tree-sitter-svelte", rev = "697bb515471871e85ff799ea57a76298a71a9cca" } tree-sitter-toml = { git = "https://github.com/tree-sitter/tree-sitter-toml", rev = "342d9be207c2dba869b9967124c679b5e6fd0ebe" } @@ -266,7 +265,6 @@ tree-sitter-uiua = { git = "https://github.com/shnarazk/tree-sitter-uiua", rev = tree-sitter-vue = { git = "https://github.com/zed-industries/tree-sitter-vue", rev = "6608d9d60c386f19d80af7d8132322fa11199c42" } tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml", rev = "f545a41f57502e1b5ddf2a6668896c1b0620f930" } tree-sitter-zig = { git = "https://github.com/maxxnino/tree-sitter-zig", rev = "0d08703e4c3f426ec61695d7617415fff97029bd" } - unindent = "0.1.7" url = "2.2" uuid = { version = "1.1.2", features = ["v4"] } From e0ecbbf496eebe6941b4ad621787105b2281107a Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 20:38:06 -0300 Subject: [PATCH 10/15] fix: update zed Cargo and astro scheme --- crates/zed/Cargo.toml | 1 - crates/zed/src/languages/astro/config.toml | 2 ++ crates/zed/src/languages/astro/highlights.scm | 31 ++++++++++++------- crates/zed/src/languages/astro/indents.scm | 1 - crates/zed/src/languages/astro/injections.scm | 9 +----- 5 files changed, 23 insertions(+), 21 deletions(-) delete mode 100644 crates/zed/src/languages/astro/indents.scm diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 679daf98721613..ef4a5a481f54d0 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -142,7 +142,6 @@ tree-sitter-python.workspace = true tree-sitter-racket.workspace = true tree-sitter-ruby.workspace = true tree-sitter-rust.workspace = true -tree-sitter-scss.workspace = true tree-sitter-scheme.workspace = true tree-sitter-svelte.workspace = true tree-sitter-toml.workspace = true diff --git a/crates/zed/src/languages/astro/config.toml b/crates/zed/src/languages/astro/config.toml index a6dae179829434..e9f4b3d043b4b5 100644 --- a/crates/zed/src/languages/astro/config.toml +++ b/crates/zed/src/languages/astro/config.toml @@ -1,4 +1,5 @@ name = "Astro" +grammar = "astro" path_suffixes = ["astro"] block_comment = [""] autoclose_before = ";:.,=}])>" @@ -12,6 +13,7 @@ brackets = [ { 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" diff --git a/crates/zed/src/languages/astro/highlights.scm b/crates/zed/src/languages/astro/highlights.scm index 0acb1e05f0d20e..491e8cc337c4ca 100644 --- a/crates/zed/src/languages/astro/highlights.scm +++ b/crates/zed/src/languages/astro/highlights.scm @@ -1,16 +1,25 @@ -; inherits: html -"---" @punctuation.delimiter +(tag_name) @tag +(erroneous_end_tag_name) @keyword +(doctype) @constant +(attribute_name) @property +(attribute_value) @string +(comment) @comment [ - "{" - "}" -] @punctuation.special + (attribute_value) + (quoted_attribute_value) +] @string -((start_tag - (tag_name) @type)) +"=" @operator -((end_tag - (tag_name) @type)) +[ + "{" + "}" +] @punctuation.bracket -((erroneous_end_tag - (erroneous_end_tag_name) @type)) +[ + "<" + ">" + "" +] @tag.delimiter diff --git a/crates/zed/src/languages/astro/indents.scm b/crates/zed/src/languages/astro/indents.scm deleted file mode 100644 index 1f2129cf998d01..00000000000000 --- a/crates/zed/src/languages/astro/indents.scm +++ /dev/null @@ -1 +0,0 @@ -; inherits: html diff --git a/crates/zed/src/languages/astro/injections.scm b/crates/zed/src/languages/astro/injections.scm index 02bf4972625448..109ccb9778ea1f 100644 --- a/crates/zed/src/languages/astro/injections.scm +++ b/crates/zed/src/languages/astro/injections.scm @@ -12,12 +12,5 @@ (#set! "language" "typescript")) (style_element - (start_tag - (attribute - (attribute_name) @_lang_attr - (quoted_attribute_value - (attribute_value) @_lang_value))) (raw_text) @content - (#eq? @_lang_attr "lang") - (#eq? @_lang_value "scss") - (#set! "language" "scss")) + (#set! "language" "css")) From 549e2b14b44a7f8d2c98c23996a16583cd2139ea Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 20:44:47 -0300 Subject: [PATCH 11/15] feat: add brackets --- crates/zed/src/languages/astro/brackets.scm | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 crates/zed/src/languages/astro/brackets.scm diff --git a/crates/zed/src/languages/astro/brackets.scm b/crates/zed/src/languages/astro/brackets.scm new file mode 100644 index 00000000000000..63395f81d84e64 --- /dev/null +++ b/crates/zed/src/languages/astro/brackets.scm @@ -0,0 +1,5 @@ +("(" @open ")" @close) +("[" @open "]" @close) +("{" @open "}" @close) +("<" @open ">" @close) +("\"" @open "\"" @close) From 87c95c39ab4e695c1acac28482e52398d406c4e4 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 21:00:22 -0300 Subject: [PATCH 12/15] fix: modify brackets --- crates/zed/src/languages/astro/brackets.scm | 2 -- 1 file changed, 2 deletions(-) diff --git a/crates/zed/src/languages/astro/brackets.scm b/crates/zed/src/languages/astro/brackets.scm index 63395f81d84e64..2221eda3582176 100644 --- a/crates/zed/src/languages/astro/brackets.scm +++ b/crates/zed/src/languages/astro/brackets.scm @@ -1,5 +1,3 @@ -("(" @open ")" @close) -("[" @open "]" @close) ("{" @open "}" @close) ("<" @open ">" @close) ("\"" @open "\"" @close) From 36f6c5aa4a82dacfc4f79b03c32cc389e71bfeea Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 21:44:04 -0300 Subject: [PATCH 13/15] feat: add file icon for astro --- assets/icons/file_icons/astro.svg | 4 ++++ assets/icons/file_icons/file_types.json | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 assets/icons/file_icons/astro.svg diff --git a/assets/icons/file_icons/astro.svg b/assets/icons/file_icons/astro.svg new file mode 100644 index 00000000000000..e52118199d56d8 --- /dev/null +++ b/assets/icons/file_icons/astro.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/file_icons/file_types.json b/assets/icons/file_icons/file_types.json index 50e450c4c2a380..304137680f7ed2 100644 --- a/assets/icons/file_icons/file_types.json +++ b/assets/icons/file_icons/file_types.json @@ -1,5 +1,6 @@ { "suffixes": { + "astro": "astro", "Emakefile": "erlang", "aac": "audio", "accdb": "storage", @@ -148,6 +149,9 @@ "zshrc": "terminal" }, "types": { + "astro": { + "icon": "icons/file_icons/astro.svg" + }, "audio": { "icon": "icons/file_icons/audio.svg" }, From f929f5e86a807d7a758c14e3a0584f806bf7d0b6 Mon Sep 17 00:00:00 2001 From: Alvaro Date: Sat, 10 Feb 2024 21:44:16 -0300 Subject: [PATCH 14/15] docs: update astro languages --- docs/src/languages/astro.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/src/languages/astro.md diff --git a/docs/src/languages/astro.md b/docs/src/languages/astro.md new file mode 100644 index 00000000000000..6ce15792b368ab --- /dev/null +++ b/docs/src/languages/astro.md @@ -0,0 +1,4 @@ +# Astro + +- Tree Sitter: [tree-sitter-astro](https://github.com/virchau13/tree-sitter-astro) +- Language Server: [astro](https://github.com/withastro/language-tools/tree/main/packages/language-server) From 2411eb3e60b241f50063c8f1f16a8be820b99a93 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Mon, 12 Feb 2024 12:34:56 -0500 Subject: [PATCH 15/15] Update Astro file icon to closer align with other file icons --- assets/icons/file_icons/astro.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/icons/file_icons/astro.svg b/assets/icons/file_icons/astro.svg index e52118199d56d8..9b7815938db3d5 100644 --- a/assets/icons/file_icons/astro.svg +++ b/assets/icons/file_icons/astro.svg @@ -1,4 +1,4 @@ - - - + + +