diff options
| author | qvalentin <valentin.theodor@web.de> | 2024-02-04 11:23:23 +0100 |
|---|---|---|
| committer | Christian Clason <c.clason@uni-graz.at> | 2024-03-03 13:09:20 +0100 |
| commit | 9e1f3c336940e77adee81ca340e1bf0635e655f3 (patch) | |
| tree | 3c783bccab8ef3e024d8fb6b5ab7c1536e0853ed | |
| parent | bot(lockfile): update arduino, gpg, sourcepawn, ssh_config, vue, wing (diff) | |
| download | nvim-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.md | 2 | ||||
| -rw-r--r-- | lockfile.json | 6 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 17 | ||||
| -rw-r--r-- | queries/gotmpl/highlights.scm | 108 | ||||
| -rw-r--r-- | queries/gotmpl/injections.scm | 34 | ||||
| -rw-r--r-- | queries/helm/highlights.scm | 46 | ||||
| -rw-r--r-- | queries/helm/injections.scm | 39 |
7 files changed, 252 insertions, 0 deletions
@@ -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")) |
