diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index a3294acd..3accd33f 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -277,7 +277,7 @@ | strictdoc | ✓ | | | ✓ | | | | styx | ✓ | ✓ | ✓ | | ✓ | `styx` | | supercollider | ✓ | | | | | | -| svelte | ✓ | ✓ | ✓ | | ✓ | `svelteserver` | +| svelte | ✓ | ✓ | ✓ | ✓ | ✓ | `svelteserver` | | sway | ✓ | ✓ | ✓ | | | `forc` | | swift | ✓ | ✓ | ✓ | | ✓ | `sourcekit-lsp` | | systemd | ✓ | | | ✓ | | `systemd-lsp` | diff --git a/languages.toml b/languages.toml index 9de6c04e..edbf7f6b 100644 --- a/languages.toml +++ b/languages.toml @@ -1649,7 +1649,7 @@ language-servers = [ "svelteserver" ] [[grammar]] name = "svelte" -source = { git = "https://github.com/tree-sitter-grammars/tree-sitter-svelte", rev = "ae5199db47757f785e43a14b332118a5474de1a2" } +source = { git = "https://github.com/themixednuts/tree-sitter-htmlx", rev = "3be6db3dc94478b089a64e59e4d855fc3041a7be", subpath = "crates/tree-sitter-svelte" } [[language]] name = "vue" diff --git a/runtime/queries/svelte/folds.scm b/runtime/queries/svelte/folds.scm index 6440301a..e50b368b 100644 --- a/runtime/queries/svelte/folds.scm +++ b/runtime/queries/svelte/folds.scm @@ -1,13 +1,11 @@ -; inherits: html - [ - (if_statement) - (else_if_block) - (else_block) - (each_statement) - (await_statement) - (then_block) - (catch_block) - (key_statement) - (snippet_statement) + (element) + (if_block) + (else_if_clause) + (else_clause) + (each_block) + (await_block) + (await_branch) + (key_block) + (snippet_block) ] @fold diff --git a/runtime/queries/svelte/highlights.scm b/runtime/queries/svelte/highlights.scm index 12e1bcd0..141cbb89 100644 --- a/runtime/queries/svelte/highlights.scm +++ b/runtime/queries/svelte/highlights.scm @@ -1,40 +1,139 @@ -; inherits: html +; Tag names +(tag_name) @tag +; Erroneous/mismatched end tags +(erroneous_end_tag_name) @error + +; DOCTYPE declaration +(doctype) @constant + +; Attribute names +(attribute_name) @attribute + +; Attribute values +(attribute_value) @string +(quoted_attribute_value) @string + +; Comments +(comment) @comment + +; Character entities +(entity) @string.special.symbol + +; Text content +(text) @text + +; Raw text in script/style (raw_text) @none +; HTML punctuation [ - "as" - "key" - "html" - "debug" - "snippet" - "render" -] @keyword + "<" + ">" + "" + "" + "" + (block_open) + (block_close) + "{" + "}" +] @rainbow.bracket diff --git a/runtime/queries/svelte/tags.scm b/runtime/queries/svelte/tags.scm new file mode 100644 index 00000000..c2fcb1c2 --- /dev/null +++ b/runtime/queries/svelte/tags.scm @@ -0,0 +1,11 @@ +; Snippet declarations +(snippet_block + name: (snippet_name) @name) @definition.function + +; Component references +((tag_name) @name @reference.class + (#match? @name "^[A-Z]")) + +(tag_name + object: (tag_member) @name + property: (tag_member) @name) @reference.class diff --git a/runtime/queries/svelte/textobjects.scm b/runtime/queries/svelte/textobjects.scm index 1f2129cf..12fa8b77 100644 --- a/runtime/queries/svelte/textobjects.scm +++ b/runtime/queries/svelte/textobjects.scm @@ -1 +1,10 @@ -; inherits: html +(element (start_tag) (_)* @xml-element.inside (end_tag)) + +(element) @xml-element.around + +(comment) @comment.around + +(snippet_block + parameters: (snippet_parameters) @parameter.inside) @function.around + +(snippet_name) @function.inside