aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorqvalentin <valentin.theodor@web.de>2024-02-04 11:23:23 +0100
committerChristian Clason <c.clason@uni-graz.at>2024-03-03 13:09:20 +0100
commit9e1f3c336940e77adee81ca340e1bf0635e655f3 (patch)
tree3c783bccab8ef3e024d8fb6b5ab7c1536e0853ed
parentbot(lockfile): update arduino, gpg, sourcepawn, ssh_config, vue, wing (diff)
downloadnvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar.gz
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar.bz2
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar.lz
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar.xz
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.tar.zst
nvim-treesitter-9e1f3c336940e77adee81ca340e1bf0635e655f3.zip
feat: add gotemplate and helm parser support
-rw-r--r--README.md2
-rw-r--r--lockfile.json6
-rw-r--r--lua/nvim-treesitter/parsers.lua17
-rw-r--r--queries/gotmpl/highlights.scm108
-rw-r--r--queries/gotmpl/injections.scm34
-rw-r--r--queries/helm/highlights.scm46
-rw-r--r--queries/helm/injections.scm39
7 files changed, 252 insertions, 0 deletions
diff --git a/README.md b/README.md
index eff088f50..a529d4ea3 100644
--- a/README.md
+++ b/README.md
@@ -254,6 +254,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [gomod](https://github.com/camdencheek/tree-sitter-go-mod) (maintained by @camdencheek)
- [x] [gosum](https://github.com/amaanq/tree-sitter-go-sum) (maintained by @amaanq)
- [x] [gowork](https://github.com/omertuc/tree-sitter-go-work) (maintained by @omertuc)
+- [x] [gotmpl](https://github.com/ngalaiko/tree-sitter-go-template) (maintained by @qvalentin)
- [x] [gpg](https://github.com/ObserverOfTime/tree-sitter-gpg-config) (maintained by @ObserverOfTime)
- [x] [graphql](https://github.com/bkegley/tree-sitter-graphql) (maintained by @bkegley)
- [x] [groovy](https://github.com/murtaza64/tree-sitter-groovy) (maintained by @murtaza64)
@@ -264,6 +265,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [haskell_persistent](https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent) (maintained by @lykahb)
- [x] [hcl](https://github.com/MichaHoffmann/tree-sitter-hcl) (maintained by @MichaHoffmann)
- [x] [heex](https://github.com/connorlay/tree-sitter-heex) (maintained by @connorlay)
+- [x] [helm](https://github.com/ngalaiko/tree-sitter-go-template) (maintained by @qvalentin)
- [x] [hjson](https://github.com/winston0410/tree-sitter-hjson) (maintained by @winston0410)
- [x] [hlsl](https://github.com/theHamsta/tree-sitter-hlsl) (maintained by @theHamsta)
- [x] [hlsplaylist](https://github.com/Freed-Wu/tree-sitter-hlsplaylist) (maintained by @Freed-Wu)
diff --git a/lockfile.json b/lockfile.json
index 1161173ba..5f2257f34 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -242,6 +242,9 @@
"gowork": {
"revision": "949a8a470559543857a62102c84700d291fc984c"
},
+ "gotmpl": {
+ "revision": "17144a77be0acdecebd9d557398883569fed41de"
+ },
"gpg": {
"revision": "f99323fb8f3f10b6c69db0c2f6d0a14bd7330675"
},
@@ -272,6 +275,9 @@
"heex": {
"revision": "4a36c9a388505180da6ee0eda1d8afb8c83481c8"
},
+ "helm": {
+ "revision": "17144a77be0acdecebd9d557398883569fed41de"
+ },
"hjson": {
"revision": "02fa3b79b3ff9a296066da6277adfc3f26cbc9e0"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 12c935034..bbd07e17a 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -758,6 +758,14 @@ list.gowork = {
maintainers = { "@omertuc" },
}
+list.gotmpl = {
+ install_info = {
+ url = "https://github.com/ngalaiko/tree-sitter-go-template",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@qvalentin" },
+}
+
list.gpg = {
install_info = {
url = "https://github.com/ObserverOfTime/tree-sitter-gpg-config",
@@ -838,6 +846,15 @@ list.heex = {
maintainers = { "@connorlay" },
}
+list.helm = {
+ install_info = {
+ url = "https://github.com/ngalaiko/tree-sitter-go-template",
+ location = "dialects/helm",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@qvalentin" },
+}
+
list.hjson = {
install_info = {
url = "https://github.com/winston0410/tree-sitter-hjson",
diff --git a/queries/gotmpl/highlights.scm b/queries/gotmpl/highlights.scm
new file mode 100644
index 000000000..e1629f816
--- /dev/null
+++ b/queries/gotmpl/highlights.scm
@@ -0,0 +1,108 @@
+; Identifiers
+[
+ (field)
+ (field_identifier)
+] @variable.member
+
+(variable) @variable
+
+; Function calls
+(function_call
+ function: (identifier) @function)
+
+(method_call
+ method:
+ (selector_expression
+ field: (field_identifier) @function))
+
+; Builtin functions
+(function_call
+ function: (identifier) @function.builtin
+ (#any-of? @function.builtin
+ "and" "call" "html" "index" "slice" "js" "len" "not" "or" "print" "printf" "println" "urlquery"
+ "eq" "ne" "lt" "ge" "gt" "ge"))
+
+; Operators
+[
+ "|"
+ ":="
+] @operator
+
+; Delimiters
+[
+ "."
+ ","
+] @punctuation.delimiter
+
+[
+ "{{"
+ "}}"
+ "{{-"
+ "-}}"
+ ")"
+ "("
+] @punctuation.bracket
+
+; Actions
+(if_action
+ [
+ "if"
+ "else"
+ "else if"
+ "end"
+ ] @keyword.conditional)
+
+(range_action
+ [
+ "range"
+ "else"
+ "end"
+ ] @keyword.repeat)
+
+(template_action
+ "template" @function.builtin)
+
+(block_action
+ [
+ "block"
+ "end"
+ ] @keyword.directive)
+
+(define_action
+ [
+ "define"
+ "end"
+ ] @keyword.directive.define)
+
+(with_action
+ [
+ "with"
+ "else"
+ "end"
+ ] @keyword.conditional)
+
+; Literals
+[
+ (interpreted_string_literal)
+ (raw_string_literal)
+] @string
+
+(rune_literal) @string.special.symbol
+
+(escape_sequence) @string.escape
+
+[
+ (int_literal)
+ (imaginary_literal)
+] @number
+
+(float_literal) @number.float
+
+[
+ (true)
+ (false)
+] @boolean
+
+(nil) @constant.builtin
+
+(comment) @comment @spell
diff --git a/queries/gotmpl/injections.scm b/queries/gotmpl/injections.scm
new file mode 100644
index 000000000..787ca9925
--- /dev/null
+++ b/queries/gotmpl/injections.scm
@@ -0,0 +1,34 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+; {{"put" | printf "%s%s" "out" | printf "%q"}}
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#eq? @_function "printf")
+ (#set! injection.language "printf"))
+
+; {{ js "var a = 1 + 1" }}
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#eq? @_function "js")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "javascript"))
+
+; {{ html "<h1>hello</h1>" }}
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#eq? @_function "html")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "html"))
diff --git a/queries/helm/highlights.scm b/queries/helm/highlights.scm
new file mode 100644
index 000000000..ab5803a8a
--- /dev/null
+++ b/queries/helm/highlights.scm
@@ -0,0 +1,46 @@
+; inherits: gotmpl
+
+; Builtin functions
+(function_call
+ function: (identifier) @function.builtin
+ (#any-of? @function.builtin
+ "and" "or" "not" "eq" "ne" "lt" "le" "gt" "ge" "default" "required" "empty" "fail" "coalesce"
+ "ternary" "print" "println" "printf" "trim" "trimAll" "trimPrefix" "trimSuffix" "lower" "upper"
+ "title" "untitle" "repeat" "substr" "nospace" "trunc" "abbrev" "abbrevboth" "initials"
+ "randAlphaNum" "randAlpha" "randNumeric" "randAscii" "wrap" "wrapWith" "contains" "hasPrefix"
+ "hasSuffix" "quote" "squote" "cat" "indent" "nindent" "replace" "plural" "snakecase" "camelcase"
+ "kebabcase" "swapcase" "shuffle" "toStrings" "toDecimal" "toJson" "mustToJson" "toPrettyJson"
+ "mustToPrettyJson" "toRawJson" "mustToRawJson" "fromYaml" "fromJson" "fromJsonArray"
+ "fromYamlArray" "toYaml" "regexMatch" "mustRegexMatch" "regexFindAll" "mustRegexFinDall"
+ "regexFind" "mustRegexFind" "regexReplaceAll" "mustRegexReplaceAll" "regexReplaceAllLiteral"
+ "mustRegexReplaceAllLiteral" "regexSplit" "mustRegexSplit" "sha1sum" "sha256sum" "adler32sum"
+ "htpasswd" "derivePassword" "genPrivateKey" "buildCustomCert" "genCA" "genSelfSignedCert"
+ "genSignedCert" "encryptAES" "decryptAES" "now" "ago" "date" "dateInZone" "duration"
+ "durationRound" "unixEpoch" "dateModify" "mustDateModify" "htmlDate" "htmlDateInZone" "toDate"
+ "mustToDate" "dict" "get" "set" "unset" "hasKey" "pluck" "dig" "merge" "mustMerge"
+ "mergeOverwrite" "mustMergeOverwrite" "keys" "pick" "omit" "values" "deepCopy" "mustDeepCopy"
+ "b64enc" "b64dec" "b32enc" "b32dec" "list" "first" "mustFirst" "rest" "mustRest" "last"
+ "mustLast" "initial" "mustInitial" "append" "mustAppend" "prepend" "mustPrepend" "concat"
+ "reverse" "mustReverse" "uniq" "mustUniq" "without" "mustWithout" "has" "mustHas" "compact"
+ "mustCompact" "index" "slice" "mustSlice" "until" "untilStep" "seq" "add" "add1" "sub" "div"
+ "mod" "mul" "max" "min" "len" "addf" "add1f" "subf" "divf" "mulf" "maxf" "minf" "floor" "ceil"
+ "round" "getHostByName" "base" "dir" "clean" "ext" "isAbs" "kindOf" "kindIs" "typeOf" "typeIs"
+ "typeIsLike" "deepequal" "semver" "semverCompare" "urlParse" "urlJoin" "urlquery" "lookup"
+ "include")
+ )
+
+; {{ .Values.test }}
+(selector_expression
+ operand:
+ (field
+ name: (identifier) @constant.builtin
+ (#any-of? @constant.builtin
+ "Values" "Chart" "Release" "Capabilities" "Files" "Subcharts" "Template"))
+ (field_identifier))
+
+; {{ $.Values.test }}
+(selector_expression
+ operand: (variable)
+ field: (field_identifier) @constant.builtin
+ (#any-of? @constant.builtin
+ "Values" "Chart" "Release" "Capabilities" "Files" "Subcharts" "Template"))
diff --git a/queries/helm/injections.scm b/queries/helm/injections.scm
new file mode 100644
index 000000000..12f1b7cc7
--- /dev/null
+++ b/queries/helm/injections.scm
@@ -0,0 +1,39 @@
+; inherits: gotmpl
+
+((text) @injection.content
+ (#set! injection.language "yaml")
+ (#set! injection.combined))
+
+; {{ regexFind "[a-zA-Z][1-9]" "abcd1234" }}
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#any-of? @_function
+ "regexMatch" "mustRegexMatch" "regexFindAll" "mustRegexFinDall" "regexFind" "mustRegexFind"
+ "regexReplaceAll" "mustRegexReplaceAll" "regexReplaceAllLiteral" "mustRegexReplaceAllLiteral"
+ "regexSplit" "mustRegexSplit")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "regex"))
+
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#any-of? @_function "fromYaml" "fromYamlArray")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "yaml"))
+
+(function_call
+ function: (identifier) @_function
+ arguments:
+ (argument_list
+ .
+ (interpreted_string_literal) @injection.content)
+ (#any-of? @_function "fromJson" "fromJsonArray")
+ (#offset! @injection.content 0 1 0 -1)
+ (#set! injection.language "json"))