aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml14
-rw-r--r--runtime/queries/gotmpl/highlights.scm76
-rw-r--r--runtime/queries/gotmpl/injections.scm2
4 files changed, 93 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index a5d286d7..6b938def 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -34,6 +34,7 @@
| glsl | ✓ | ✓ | ✓ | |
| go | ✓ | ✓ | ✓ | `gopls` |
| gomod | ✓ | | | `gopls` |
+| gotmpl | ✓ | | | `gopls` |
| gowork | ✓ | | | `gopls` |
| graphql | ✓ | | | |
| hare | ✓ | | ✓ | |
diff --git a/languages.toml b/languages.toml
index c2e0549f..1eaec8dd 100644
--- a/languages.toml
+++ b/languages.toml
@@ -286,6 +286,20 @@ name = "gomod"
source = { git = "https://github.com/camdencheek/tree-sitter-go-mod", rev = "e8f51f8e4363a3d9a427e8f63f4c1bbc5ef5d8d0" }
[[language]]
+name = "gotmpl"
+scope = "source.gotmpl"
+injection-regex = "gotmpl"
+file-types = ["gotmpl"]
+roots = []
+comment-token = "//"
+language-server = { command = "gopls" }
+indent = { tab-width = 2, unit = " " }
+
+[[grammar]]
+name = "gotmpl"
+source = { git = "https://github.com/dannylongeuay/tree-sitter-go-template", rev = "395a33e08e69f4155156f0b90138a6c86764c979" }
+
+[[language]]
name = "gowork"
scope = "source.gowork"
injection-regex = "gowork"
diff --git a/runtime/queries/gotmpl/highlights.scm b/runtime/queries/gotmpl/highlights.scm
new file mode 100644
index 00000000..5921d161
--- /dev/null
+++ b/runtime/queries/gotmpl/highlights.scm
@@ -0,0 +1,76 @@
+; Identifiers
+
+[
+ (field)
+ (field_identifier)
+] @variable.other.member
+
+(variable) @variable
+
+; Function calls
+
+(function_call
+ function: (identifier) @function)
+
+(method_call
+ method: (selector_expression
+ field: (field_identifier) @function))
+
+; Operators
+
+"|" @operator
+":=" @operator
+
+; Builtin functions
+
+((identifier) @function.builtin
+ (#match? @function.builtin "^(and|call|html|index|slice|js|len|not|or|print|printf|println|urlquery|eq|ne|lt|ge|gt|ge)$"))
+
+; Delimiters
+
+"." @punctuation.delimiter
+"," @punctuation.delimiter
+
+"{{" @punctuation.bracket
+"}}" @punctuation.bracket
+"{{-" @punctuation.bracket
+"-}}" @punctuation.bracket
+")" @punctuation.bracket
+"(" @punctuation.bracket
+
+; Keywords
+
+"else" @keyword
+"if" @keyword
+"range" @keyword
+"with" @keyword
+"end" @keyword
+"template" @keyword
+"define" @keyword
+"block" @keyword
+
+; Literals
+
+[
+ (interpreted_string_literal)
+ (raw_string_literal)
+ (rune_literal)
+] @string
+
+(escape_sequence) @string.special
+
+[
+ (int_literal)
+ (float_literal)
+ (imaginary_literal)
+] @constant.numeric.integer
+
+[
+ (true)
+ (false)
+] @constant.builtin.boolean
+
+(nil) @constant.builtin
+
+(comment) @comment
+(ERROR) @error
diff --git a/runtime/queries/gotmpl/injections.scm b/runtime/queries/gotmpl/injections.scm
new file mode 100644
index 00000000..321c90ad
--- /dev/null
+++ b/runtime/queries/gotmpl/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))