aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorObserverOfTime <chronobserver@disroot.org>2022-09-20 02:03:08 +0300
committerChristian Clason <christian.clason@uni-due.de>2022-11-18 18:17:52 +0100
commit8a261e32ec50979c367448598844af2be0ed05f7 (patch)
treef56f1636e65a4a1430b5f612e295420f0f9cd1d9
parentdocs: remove readme png from version control (diff)
downloadnvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar.gz
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar.bz2
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar.lz
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar.xz
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.tar.zst
nvim-treesitter-8a261e32ec50979c367448598844af2be0ed05f7.zip
feat: add jq
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua7
-rw-r--r--queries/jq/highlights.scm329
-rw-r--r--queries/jq/injections.scm31
5 files changed, 371 insertions, 0 deletions
diff --git a/README.md b/README.md
index bf09b69f0..f06792b93 100644
--- a/README.md
+++ b/README.md
@@ -231,6 +231,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [http](https://github.com/rest-nvim/tree-sitter-http) (maintained by @NTBBloodbath)
- [x] [java](https://github.com/tree-sitter/tree-sitter-java) (maintained by @p00f)
- [x] [javascript](https://github.com/tree-sitter/tree-sitter-javascript) (maintained by @steelsojka)
+- [ ] [jq](https://github.com/flurie/tree-sitter-jq)
- [x] [jsdoc](https://github.com/tree-sitter/tree-sitter-jsdoc) (maintained by @steelsojka)
- [x] [json](https://github.com/tree-sitter/tree-sitter-json) (maintained by @steelsojka)
- [x] [json5](https://github.com/Joakker/tree-sitter-json5) (maintained by @Joakker)
diff --git a/lockfile.json b/lockfile.json
index 20c60faae..64e349d59 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -176,6 +176,9 @@
"javascript": {
"revision": "936d976a782e75395d9b1c8c7c7bf4ba6fe0d86b"
},
+ "jq": {
+ "revision": "13990f530e8e6709b7978503da9bc8701d366791"
+ },
"jsdoc": {
"revision": "189a6a4829beb9cdbe837260653b4a3dfb0cc3db"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 2860dee53..0ba47880e 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1307,6 +1307,13 @@ list.arduino = {
maintainers = { "@ObserverOfTime" },
}
+list.jq = {
+ install_info = {
+ url = "https://github.com/flurie/tree-sitter-jq",
+ files = { "src/parser.c" },
+ },
+}
+
local M = {
list = list,
filetype_to_parsername = filetype_to_parsername,
diff --git a/queries/jq/highlights.scm b/queries/jq/highlights.scm
new file mode 100644
index 000000000..0793e159e
--- /dev/null
+++ b/queries/jq/highlights.scm
@@ -0,0 +1,329 @@
+; Variables
+
+(variable) @variable
+
+((variable) @constant.builtin
+ (#eq? @constant.builtin "$ENV"))
+
+((variable) @constant.macro
+ (#eq? @constant.macro "$__loc__"))
+
+; Properties
+
+(index
+ (identifier) @property)
+
+; Labels
+
+(query
+ label: (variable) @label)
+
+(query
+ break_statement: (variable) @label)
+
+; Literals
+
+(number) @number
+
+(string) @string
+
+[
+ "true"
+ "false"
+] @boolean
+
+("null") @type.builtin
+
+; Interpolation
+
+["\\(" ")"] @character.special
+
+; Format
+
+(format) @attribute
+
+; Functions
+
+(funcdef
+ (identifier) @function)
+
+(funcdefargs
+ (identifier) @parameter)
+
+[
+ "reduce"
+ "foreach"
+] @function.builtin
+
+; jq -n 'builtins | map(split("/")[0]) | unique | .[]'
+((funcname) @function.builtin
+ (#any-of? @function.builtin
+ "IN"
+ "INDEX"
+ "JOIN"
+ "acos"
+ "acosh"
+ "add"
+ "all"
+ "any"
+ "arrays"
+ "ascii_downcase"
+ "ascii_upcase"
+ "asin"
+ "asinh"
+ "atan"
+ "atan2"
+ "atanh"
+ "booleans"
+ "bsearch"
+ "builtins"
+ "capture"
+ "cbrt"
+ "ceil"
+ "combinations"
+ "contains"
+ "copysign"
+ "cos"
+ "cosh"
+ "debug"
+ "del"
+ "delpaths"
+ "drem"
+ "empty"
+ "endswith"
+ "env"
+ "erf"
+ "erfc"
+ "error"
+ "exp"
+ "exp10"
+ "exp2"
+ "explode"
+ "expm1"
+ "fabs"
+ "fdim"
+ "finites"
+ "first"
+ "flatten"
+ "floor"
+ "fma"
+ "fmax"
+ "fmin"
+ "fmod"
+ "format"
+ "frexp"
+ "from_entries"
+ "fromdate"
+ "fromdateiso8601"
+ "fromjson"
+ "fromstream"
+ "gamma"
+ "get_jq_origin"
+ "get_prog_origin"
+ "get_search_list"
+ "getpath"
+ "gmtime"
+ "group_by"
+ "gsub"
+ "halt"
+ "halt_error"
+ "has"
+ "hypot"
+ "implode"
+ "in"
+ "index"
+ "indices"
+ "infinite"
+ "input"
+ "input_filename"
+ "input_line_number"
+ "inputs"
+ "inside"
+ "isempty"
+ "isfinite"
+ "isinfinite"
+ "isnan"
+ "isnormal"
+ "iterables"
+ "j0"
+ "j1"
+ "jn"
+ "join"
+ "keys"
+ "keys_unsorted"
+ "last"
+ "ldexp"
+ "leaf_paths"
+ "length"
+ "lgamma"
+ "lgamma_r"
+ "limit"
+ "localtime"
+ "log"
+ "log10"
+ "log1p"
+ "log2"
+ "logb"
+ "ltrimstr"
+ "map"
+ "map_values"
+ "match"
+ "max"
+ "max_by"
+ "min"
+ "min_by"
+ "mktime"
+ "modf"
+ "modulemeta"
+ "nan"
+ "nearbyint"
+ "nextafter"
+ "nexttoward"
+ "normals"
+ "not"
+ "now"
+ "nth"
+ "nulls"
+ "numbers"
+ "objects"
+ "path"
+ "paths"
+ "pow"
+ "pow10"
+ "range"
+ "recurse"
+ "recurse_down"
+ "remainder"
+ "repeat"
+ "reverse"
+ "rindex"
+ "rint"
+ "round"
+ "rtrimstr"
+ "scalars"
+ "scalars_or_empty"
+ "scalb"
+ "scalbln"
+ "scan"
+ "select"
+ "setpath"
+ "significand"
+ "sin"
+ "sinh"
+ "sort"
+ "sort_by"
+ "split"
+ "splits"
+ "sqrt"
+ "startswith"
+ "stderr"
+ "strflocaltime"
+ "strftime"
+ "strings"
+ "strptime"
+ "sub"
+ "tan"
+ "tanh"
+ "test"
+ "tgamma"
+ "to_entries"
+ "todate"
+ "todateiso8601"
+ "tojson"
+ "tonumber"
+ "tostream"
+ "tostring"
+ "transpose"
+ "trunc"
+ "truncate_stream"
+ "type"
+ "unique"
+ "unique_by"
+ "until"
+ "utf8bytelength"
+ "values"
+ "walk"
+ "while"
+ "with_entries"
+ "y0"
+ "y1"
+ "yn"))
+
+; Keywords
+
+[
+ "def"
+ "as"
+ "label"
+ "module"
+ "break"
+] @keyword
+
+[
+ "import"
+ "include"
+] @include
+
+[
+ "if"
+ "then"
+ "else"
+ "end"
+] @conditional
+
+[
+ "try"
+ "catch"
+] @exception
+
+[
+ "or"
+ "and"
+] @keyword.operator
+
+; Operators
+
+[
+ "."
+ "=="
+ "!="
+ ">"
+ ">="
+ "<="
+ "<"
+ "="
+ "+"
+ "-"
+ "*"
+ "/"
+ "%"
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ "//="
+ "|"
+ "?"
+ "//"
+ "?//"
+ (recurse) ; ".."
+] @operator
+
+; Punctuation
+
+[
+ ";"
+ ","
+ ":"
+] @punctuation.delimiter
+
+[
+ "[" "]"
+ "{" "}"
+ "(" ")"
+] @punctuation.bracket
+
+; Comments
+
+(comment) @comment @spell
diff --git a/queries/jq/injections.scm b/queries/jq/injections.scm
new file mode 100644
index 000000000..5b3913967
--- /dev/null
+++ b/queries/jq/injections.scm
@@ -0,0 +1,31 @@
+(comment) @comment
+
+; test(val)
+(query
+ ((funcname) @_function
+ (#any-of? @_function
+ "test"
+ "match"
+ "capture"
+ "scan"
+ "split"
+ "splits"
+ "sub"
+ "gsub"))
+ (args . (query (string) @regex)))
+
+
+; test(regex; flags)
+(query
+ ((funcname) @_function
+ (#any-of? @_function
+ "test"
+ "match"
+ "capture"
+ "scan"
+ "split"
+ "splits"
+ "sub"
+ "gsub"))
+ (args . (args
+ (query (string) @regex))))