aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Megzari2021-09-17 02:04:55 +0000
committerGitHub2021-09-17 02:04:55 +0000
commitb2195e08b54d9e01411e3b67c87c93711415884c (patch)
tree8119287eb5ee3aacec3c726342bc41c05ac57407
parent64e8f0017c9d8d8fd02b3e86378522974f6437b3 (diff)
languages: add svelte support (#733)
* languages: add svelte support * languages: add svelte injections
-rw-r--r--.gitmodules4
-rw-r--r--languages.toml9
-rw-r--r--runtime/queries/svelte/highlights.scm68
-rw-r--r--runtime/queries/svelte/indents.toml18
-rw-r--r--runtime/queries/svelte/injections.scm30
5 files changed, 129 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules
index f905b8c7..d1fc1517 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -118,3 +118,7 @@
path = helix-syntax/languages/tree-sitter-zig
url = https://github.com/maxxnino/tree-sitter-zig
shallow = true
+[submodule "helix-syntax/languages/tree-sitter-svelte"]
+ path = helix-syntax/languages/tree-sitter-svelte
+ url = https://github.com/Himujjal/tree-sitter-svelte
+ shallow = true
diff --git a/languages.toml b/languages.toml
index 5c147770..fe473f89 100644
--- a/languages.toml
+++ b/languages.toml
@@ -278,6 +278,15 @@ comment-token = "--"
indent = { tab-width = 2, unit = " " }
[[language]]
+name = "svelte"
+scope = "source.svelte"
+injection-regex = "svelte"
+file-types = ["svelte"]
+roots = []
+indent = { tab-width = 2, unit = " " }
+language-server = { command = "svelteserver", args = ["--stdio"] }
+
+[[language]]
name = "yaml"
scope = "source.yaml"
file-types = ["yml", "yaml"]
diff --git a/runtime/queries/svelte/highlights.scm b/runtime/queries/svelte/highlights.scm
new file mode 100644
index 00000000..4c6f5f35
--- /dev/null
+++ b/runtime/queries/svelte/highlights.scm
@@ -0,0 +1,68 @@
+; Special identifiers
+;--------------------
+
+; TODO:
+((element (start_tag (tag_name) @_tag) (text) @markup.heading)
+ (#match? @_tag "^(h[0-9]|title)$"))
+
+((element (start_tag (tag_name) @_tag) (text) @markup.bold)
+ (#match? @_tag "^(strong|b)$"))
+
+((element (start_tag (tag_name) @_tag) (text) @markup.italic)
+ (#match? @_tag "^(em|i)$"))
+
+; ((element (start_tag (tag_name) @_tag) (text) @markup.strike)
+; (#match? @_tag "^(s|del)$"))
+
+((element (start_tag (tag_name) @_tag) (text) @markup.underline)
+ (#eq? @_tag "u"))
+
+((element (start_tag (tag_name) @_tag) (text) @markup.inline)
+ (#match? @_tag "^(code|kbd)$"))
+
+((element (start_tag (tag_name) @_tag) (text) @markup.underline.link)
+ (#eq? @_tag "a"))
+
+((attribute
+ (attribute_name) @_attr
+ (quoted_attribute_value (attribute_value) @markup.undeline.link))
+ (#match? @_attr "^(href|src)$"))
+
+(tag_name) @tag
+(attribute_name) @property
+(erroneous_end_tag_name) @error
+(comment) @comment
+
+[
+ (attribute_value)
+ (quoted_attribute_value)
+] @string
+
+[
+ (text)
+ (raw_text_expr)
+] @none
+
+[
+ (special_block_keyword)
+ (then)
+ (as)
+] @keyword
+
+[
+ "{"
+ "}"
+] @punctuation.brackets
+
+"=" @operator
+
+[
+ "<"
+ ">"
+ "</"
+ "/>"
+ "#"
+ ":"
+ "/"
+ "@"
+] @punctuation.definition.tag
diff --git a/runtime/queries/svelte/indents.toml b/runtime/queries/svelte/indents.toml
new file mode 100644
index 00000000..693db8e3
--- /dev/null
+++ b/runtime/queries/svelte/indents.toml
@@ -0,0 +1,18 @@
+indent = [
+ "element"
+ "if_statement"
+ "each_statement"
+ "await_statement"
+]
+
+outdent = [
+ "end_tag"
+ "else_statement"
+ "if_end_expr"
+ "each_end_expr"
+ "await_end_expr"
+ ">"
+ "/>"
+]
+
+ignore = "comment"
diff --git a/runtime/queries/svelte/injections.scm b/runtime/queries/svelte/injections.scm
new file mode 100644
index 00000000..266f4701
--- /dev/null
+++ b/runtime/queries/svelte/injections.scm
@@ -0,0 +1,30 @@
+; injections.scm
+; --------------
+((style_element
+ (raw_text) @injection.content)
+ (#set! injection.language "css"))
+
+((attribute
+ (attribute_name) @_attr
+ (quoted_attribute_value (attribute_value) @css))
+ (#eq? @_attr "style"))
+
+((script_element
+ (raw_text) @injection.content)
+ (#set! injection.language "javascript"))
+
+((raw_text_expr) @injection.content
+ (#set! injection.language "javascript"))
+
+(
+ (script_element
+ (start_tag
+ (attribute
+ (quoted_attribute_value (attribute_value) @_lang)))
+ (raw_text) @injection.content)
+ (#match? @_lang "(ts|typescript)")
+ (#set! injection.language "typescript")
+)
+
+(comment) @comment
+