summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/templ/highlights.scm99
-rw-r--r--runtime/queries/templ/injections.scm4
4 files changed, 118 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 429f54f5..6fdc6f11 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -155,6 +155,7 @@
| t32 | ✓ | | | |
| tablegen | ✓ | ✓ | ✓ | |
| task | ✓ | | | |
+| templ | ✓ | | | `templ` |
| tfvars | ✓ | | ✓ | `terraform-ls` |
| todotxt | ✓ | | | |
| toml | ✓ | | | `taplo` |
diff --git a/languages.toml b/languages.toml
index cf2783de..77c629e4 100644
--- a/languages.toml
+++ b/languages.toml
@@ -74,6 +74,7 @@ svlangserver = { command = "svlangserver", args = [] }
swipl = { command = "swipl", args = [ "-g", "use_module(library(lsp_server))", "-g", "lsp_server:main", "-t", "halt", "--", "stdio" ] }
tailwindcss-ls = { command = "tailwindcss-language-server", args = ["--stdio"] }
taplo = { command = "taplo", args = ["lsp", "stdio"] }
+templ = { command = "templ", args = ["lsp"] }
terraform-ls = { command = "terraform-ls", args = ["serve"] }
texlab = { command = "texlab" }
vala-language-server = { command = "vala-language-server" }
@@ -2998,3 +2999,16 @@ roots = []
[[grammar]]
name = "gemini"
source = { git = "https://git.sr.ht/~sfr/tree-sitter-gemini", rev = "3cc5e4bdf572d5df4277fc2e54d6299bd59a54b3" }
+
+[[language]]
+name = "templ"
+scope = "source.templ"
+file-types = ["templ"]
+roots = ["go.work", "go.mod"]
+comment-token = "//"
+indent = { tab-width = 2, unit = " " }
+language-servers = [ "templ" ]
+
+[[grammar]]
+name = "templ"
+source = { git = "https://github.com/vrischmann/tree-sitter-templ", rev = "ea56ac0655243490a4929a988f4eaa91dfccc995" }
diff --git a/runtime/queries/templ/highlights.scm b/runtime/queries/templ/highlights.scm
new file mode 100644
index 00000000..e5b2ede0
--- /dev/null
+++ b/runtime/queries/templ/highlights.scm
@@ -0,0 +1,99 @@
+(package_identifier) @namespace
+
+(parameter_declaration (identifier) @variable.parameter)
+(variadic_parameter_declaration (identifier) @variable.parameter)
+
+(function_declaration
+ name: (identifier) @function)
+
+(type_spec name: (type_identifier) @type)
+(type_identifier) @type
+(field_identifier) @variable.other.member
+(identifier) @variable
+
+; Function calls
+
+(call_expression
+ function: (identifier) @function)
+
+(call_expression
+ function: (selector_expression
+ field: (field_identifier) @function))
+
+;
+; These are Templ specific
+;
+
+(component_declaration
+ name: (component_identifier) @function)
+
+(tag_start) @tag
+(tag_end) @tag
+(self_closing_tag) @tag
+(style_element) @tag
+
+(attribute
+ name: (attribute_name) @attribute)
+(attribute
+ value: (quoted_attribute_value) @string)
+
+(element_text) @string.special
+(style_element_text) @string.special
+
+(css_property
+ name: (css_property_name) @attribute)
+
+(expression) @function.method
+(dynamic_class_attribute_value) @function.method
+
+(component_import
+ name: (component_identifier) @function)
+
+(component_render) @function
+
+[
+ "@"
+] @operator
+
+[
+ "func"
+ "var"
+ "const"
+ "templ"
+ "css"
+ "type"
+ "struct"
+ "range"
+ "script"
+] @keyword.storage.type
+
+[
+ "return"
+] @keyword.control.return
+
+[
+ "import"
+ "package"
+] @keyword.control.import
+
+[
+ "else"
+ "case"
+ "switch"
+ "if"
+ "default"
+] @keyword.control.conditional
+
+"for" @keyword.control.repeat
+
+[
+ (interpreted_string_literal)
+ (raw_string_literal)
+ (rune_literal)
+] @string
+
+; Comments
+
+(comment) @comment
+
+(element_comment) @comment
diff --git a/runtime/queries/templ/injections.scm b/runtime/queries/templ/injections.scm
new file mode 100644
index 00000000..4dd5a630
--- /dev/null
+++ b/runtime/queries/templ/injections.scm
@@ -0,0 +1,4 @@
+((script_block_text) @injection.content (#set! injection.language "javascript"))
+((script_element_text) @injection.content (#set! injection.language "javascript"))
+
+((style_element_text) @injection.content (#set! injection.language "css"))