From d5cf952778e1c62b51df73b72052249b7b2a8050 Mon Sep 17 00:00:00 2001 From: wsdjeg Date: Thu, 14 Apr 2022 12:01:23 +0800 Subject: [PATCH] chore(treesitter): use bundle treesitter --- autoload/SpaceVim/layers/treesitter.vim | 8 +- bundle/nvim-treesitter/.editorconfig | 20 + bundle/nvim-treesitter/.github/CODEOWNERS | 7 + bundle/nvim-treesitter/.github/FUNDING.yml | 1 + .../.github/ISSUE_TEMPLATE/bug_report.yml | 58 + .../.github/ISSUE_TEMPLATE/feature_request.md | 20 + .../ISSUE_TEMPLATE/highlighting_issue.yml | 98 ++ .../ISSUE_TEMPLATE/language-request.md | 12 + bundle/nvim-treesitter/.github/mergify.yml | 37 + .../.github/workflows/lint.yml | 33 + .../.github/workflows/test-queries.yml | 92 ++ .../.github/workflows/tests.yml | 63 + .../.github/workflows/update-lockfile.yml | 55 + .../.github/workflows/update-readme.yml | 40 + bundle/nvim-treesitter/.gitignore | 4 + bundle/nvim-treesitter/.luacheckrc | 21 + bundle/nvim-treesitter/.stylua.toml | 6 + bundle/nvim-treesitter/.styluaignore | 1 + bundle/nvim-treesitter/CONTRIBUTING.md | 299 +++++ bundle/nvim-treesitter/LICENSE | 201 +++ bundle/nvim-treesitter/README.md | 569 +++++++++ .../nvim-treesitter/after/ftplugin/elixir.vim | 1 + .../after/ftplugin/graphql.vim | 1 + .../nvim-treesitter/after/ftplugin/heex.vim | 1 + .../nvim-treesitter/after/ftplugin/query.vim | 1 + .../after/ftplugin/surface.vim | 1 + bundle/nvim-treesitter/assets/example-cpp.png | Bin 0 -> 874960 bytes bundle/nvim-treesitter/assets/logo.png | Bin 0 -> 26664 bytes .../autoload/health/nvim_treesitter.vim | 3 + .../autoload/nvim_treesitter.vim | 27 + .../nvim-treesitter/doc/nvim-treesitter.txt | 775 +++++++++++ bundle/nvim-treesitter/ftdetect/cooklang.vim | 1 + bundle/nvim-treesitter/ftdetect/fusion.vim | 1 + .../nvim-treesitter/ftdetect/gdresource.vim | 2 + bundle/nvim-treesitter/ftdetect/gdscript.vim | 1 + bundle/nvim-treesitter/ftdetect/glimmer.vim | 1 + bundle/nvim-treesitter/ftdetect/glsl.vim | 1 + bundle/nvim-treesitter/ftdetect/gowork.vim | 1 + bundle/nvim-treesitter/ftdetect/graphql.vim | 1 + bundle/nvim-treesitter/ftdetect/hack.vim | 1 + bundle/nvim-treesitter/ftdetect/hcl.vim | 2 + bundle/nvim-treesitter/ftdetect/heex.vim | 1 + bundle/nvim-treesitter/ftdetect/hjson.vim | 1 + bundle/nvim-treesitter/ftdetect/json5.vim | 1 + bundle/nvim-treesitter/ftdetect/ledger.vim | 1 + bundle/nvim-treesitter/ftdetect/nix.vim | 1 + bundle/nvim-treesitter/ftdetect/prisma.vim | 1 + bundle/nvim-treesitter/ftdetect/pug.vim | 1 + bundle/nvim-treesitter/ftdetect/ql.vim | 1 + bundle/nvim-treesitter/ftdetect/query.vim | 11 + bundle/nvim-treesitter/ftdetect/surface.vim | 1 + bundle/nvim-treesitter/ftdetect/teal.vim | 1 + bundle/nvim-treesitter/ftdetect/tlaplus.vim | 1 + bundle/nvim-treesitter/ftdetect/yang.vim | 1 + bundle/nvim-treesitter/lockfile.json | 332 +++++ .../nvim-treesitter/lua/nvim-treesitter.lua | 88 ++ .../lua/nvim-treesitter/caching.lua | 48 + .../lua/nvim-treesitter/configs.lua | 559 ++++++++ .../lua/nvim-treesitter/fold.lua | 112 ++ .../lua/nvim-treesitter/health.lua | 168 +++ .../lua/nvim-treesitter/highlight.lua | 159 +++ .../nvim-treesitter/incremental_selection.lua | 148 +++ .../lua/nvim-treesitter/indent.lua | 205 +++ .../lua/nvim-treesitter/info.lua | 174 +++ .../lua/nvim-treesitter/install.lua | 600 +++++++++ .../lua/nvim-treesitter/locals.lua | 349 +++++ .../lua/nvim-treesitter/parsers.lua | 1129 +++++++++++++++++ .../lua/nvim-treesitter/query.lua | 390 ++++++ .../lua/nvim-treesitter/query_predicates.lua | 130 ++ .../shell_command_selectors.lua | 264 ++++ .../lua/nvim-treesitter/ts_utils.lua | 392 ++++++ .../lua/nvim-treesitter/tsrange.lua | 154 +++ .../lua/nvim-treesitter/utils.lua | 236 ++++ bundle/nvim-treesitter/parser-info/.gitignore | 2 + bundle/nvim-treesitter/parser/.gitignore | 2 + .../plugin/nvim-treesitter.vim | 106 ++ .../nvim-treesitter/queries/astro/folds.scm | 1 + .../queries/astro/highlights.scm | 5 + .../nvim-treesitter/queries/astro/indents.scm | 1 + .../queries/astro/injections.scm | 7 + .../nvim-treesitter/queries/astro/locals.scm | 1 + bundle/nvim-treesitter/queries/bash/folds.scm | 8 + .../queries/bash/highlights.scm | 131 ++ .../queries/bash/injections.scm | 1 + .../nvim-treesitter/queries/bash/locals.scm | 13 + .../queries/beancount/folds.scm | 4 + .../queries/beancount/highlights.scm | 26 + .../nvim-treesitter/queries/bibtex/folds.scm | 3 + .../queries/bibtex/highlights.scm | 49 + .../queries/bibtex/indents.scm | 10 + bundle/nvim-treesitter/queries/c/folds.scm | 19 + .../nvim-treesitter/queries/c/highlights.scm | 187 +++ bundle/nvim-treesitter/queries/c/indents.scm | 49 + .../nvim-treesitter/queries/c/injections.scm | 3 + bundle/nvim-treesitter/queries/c/locals.scm | 53 + .../nvim-treesitter/queries/c_sharp/folds.scm | 15 + .../queries/c_sharp/highlights.scm | 390 ++++++ .../queries/c_sharp/injections.scm | 1 + .../queries/c_sharp/locals.scm | 41 + .../nvim-treesitter/queries/clojure/folds.scm | 1 + .../queries/clojure/highlights.scm | 338 +++++ .../queries/clojure/injections.scm | 1 + .../queries/clojure/locals.scm | 1 + .../nvim-treesitter/queries/cmake/folds.scm | 7 + .../queries/cmake/highlights.scm | 125 ++ .../queries/comment/highlights.scm | 25 + .../queries/commonlisp/folds.scm | 1 + .../queries/commonlisp/highlights.scm | 187 +++ .../queries/commonlisp/locals.scm | 72 ++ .../queries/cooklang/highlights.scm | 22 + bundle/nvim-treesitter/queries/cpp/folds.scm | 14 + .../queries/cpp/highlights.scm | 184 +++ .../nvim-treesitter/queries/cpp/indents.scm | 10 + .../queries/cpp/injections.scm | 3 + bundle/nvim-treesitter/queries/cpp/locals.scm | 71 ++ bundle/nvim-treesitter/queries/css/folds.scm | 3 + .../queries/css/highlights.scm | 90 ++ .../nvim-treesitter/queries/css/indents.scm | 9 + .../queries/css/injections.scm | 1 + bundle/nvim-treesitter/queries/cuda/folds.scm | 1 + .../queries/cuda/highlights.scm | 14 + .../nvim-treesitter/queries/cuda/indents.scm | 1 + .../queries/cuda/injections.scm | 3 + .../nvim-treesitter/queries/cuda/locals.scm | 1 + bundle/nvim-treesitter/queries/d/folds.scm | 1 + .../nvim-treesitter/queries/d/highlights.scm | 267 ++++ bundle/nvim-treesitter/queries/d/indents.scm | 17 + .../nvim-treesitter/queries/d/injections.scm | 7 + .../queries/dart/highlights.scm | 259 ++++ .../nvim-treesitter/queries/dart/indents.scm | 27 + .../queries/dart/injections.scm | 1 + .../nvim-treesitter/queries/dart/locals.scm | 8 + .../queries/devicetree/folds.scm | 1 + .../queries/devicetree/highlights.scm | 35 + .../queries/devicetree/indents.scm | 14 + .../queries/devicetree/injections.scm | 1 + .../queries/devicetree/locals.scm | 4 + .../queries/dockerfile/highlights.scm | 50 + .../queries/dockerfile/injections.scm | 3 + .../queries/dot/highlights.scm | 45 + .../queries/dot/injections.scm | 2 + bundle/nvim-treesitter/queries/ecma/folds.scm | 21 + .../queries/ecma/highlights.scm | 255 ++++ .../nvim-treesitter/queries/ecma/indents.scm | 53 + .../queries/ecma/injections.scm | 58 + .../nvim-treesitter/queries/ecma/locals.scm | 33 + .../queries/eex/highlights.scm | 15 + .../queries/eex/injections.scm | 5 + .../nvim-treesitter/queries/elixir/folds.scm | 9 + .../queries/elixir/highlights.scm | 225 ++++ .../queries/elixir/indents.scm | 23 + .../queries/elixir/injections.scm | 48 + .../nvim-treesitter/queries/elixir/locals.scm | 164 +++ .../queries/elm/highlights.scm | 90 ++ .../queries/elm/injections.scm | 3 + .../queries/elvish/highlights.scm | 70 + .../queries/elvish/injections.scm | 1 + .../queries/fennel/highlights.scm | 121 ++ .../queries/fennel/injections.scm | 1 + .../nvim-treesitter/queries/fennel/locals.scm | 26 + bundle/nvim-treesitter/queries/fish/folds.scm | 8 + .../queries/fish/highlights.scm | 160 +++ .../nvim-treesitter/queries/fish/indents.scm | 16 + .../queries/fish/injections.scm | 1 + .../nvim-treesitter/queries/fish/locals.scm | 18 + bundle/nvim-treesitter/queries/foam/folds.scm | 7 + .../queries/foam/highlights.scm | 69 + .../nvim-treesitter/queries/foam/indents.scm | 11 + .../queries/foam/injections.scm | 12 + .../nvim-treesitter/queries/foam/locals.scm | 6 + .../nvim-treesitter/queries/fortran/folds.scm | 11 + .../queries/fortran/highlights.scm | 176 +++ .../queries/fortran/indents.scm | 27 + .../nvim-treesitter/queries/fusion/folds.scm | 6 + .../queries/fusion/highlights.scm | 117 ++ .../queries/fusion/indents.scm | 19 + .../nvim-treesitter/queries/fusion/locals.scm | 21 + .../queries/gdscript/highlights.scm | 125 ++ .../queries/gdscript/indents.scm | 24 + .../queries/gdscript/injections.scm | 1 + .../queries/gdscript/locals.scm | 10 + .../nvim-treesitter/queries/gleam/folds.scm | 11 + .../queries/gleam/highlights.scm | 163 +++ .../nvim-treesitter/queries/gleam/indents.scm | 33 + .../queries/gleam/injections.scm | 6 + .../nvim-treesitter/queries/gleam/locals.scm | 24 + .../queries/glimmer/highlights.scm | 88 ++ bundle/nvim-treesitter/queries/glsl/folds.scm | 1 + .../queries/glsl/highlights.scm | 37 + .../nvim-treesitter/queries/glsl/indents.scm | 1 + .../queries/glsl/injections.scm | 3 + .../nvim-treesitter/queries/glsl/locals.scm | 1 + bundle/nvim-treesitter/queries/go/folds.scm | 13 + .../nvim-treesitter/queries/go/highlights.scm | 201 +++ bundle/nvim-treesitter/queries/go/indents.scm | 23 + .../nvim-treesitter/queries/go/injections.scm | 6 + bundle/nvim-treesitter/queries/go/locals.scm | 79 ++ .../queries/godot_resource/folds.scm | 3 + .../queries/godot_resource/highlights.scm | 28 + .../queries/godot_resource/locals.scm | 3 + .../queries/gomod/highlights.scm | 17 + .../queries/gomod/injections.scm | 1 + .../queries/gowork/highlights.scm | 14 + .../queries/gowork/injections.scm | 1 + .../queries/graphql/highlights.scm | 164 +++ .../queries/graphql/indents.scm | 9 + .../queries/graphql/injections.scm | 1 + .../queries/hack/highlights.scm | 302 +++++ .../queries/haskell/highlights.scm | 139 ++ .../queries/haskell/injections.scm | 58 + bundle/nvim-treesitter/queries/hcl/folds.scm | 6 + .../queries/hcl/highlights.scm | 102 ++ .../nvim-treesitter/queries/hcl/indents.scm | 13 + .../queries/hcl/injections.scm | 1 + bundle/nvim-treesitter/queries/heex/folds.scm | 6 + .../queries/heex/highlights.scm | 56 + .../nvim-treesitter/queries/heex/indents.scm | 20 + .../queries/heex/injections.scm | 11 + .../nvim-treesitter/queries/heex/locals.scm | 13 + .../queries/help/highlights.scm | 14 + .../nvim-treesitter/queries/hjson/folds.scm | 1 + .../queries/hjson/highlights.scm | 16 + .../nvim-treesitter/queries/hjson/indents.scm | 3 + .../queries/hjson/injections.scm | 1 + .../nvim-treesitter/queries/hjson/locals.scm | 1 + .../queries/hocon/highlights.scm | 37 + .../queries/hocon/injections.scm | 1 + bundle/nvim-treesitter/queries/html/folds.scm | 5 + .../queries/html/highlights.scm | 5 + .../nvim-treesitter/queries/html/indents.scm | 1 + .../queries/html/injections.scm | 12 + .../nvim-treesitter/queries/html/locals.scm | 1 + .../queries/html_tags/highlights.scm | 42 + .../queries/html_tags/indents.scm | 11 + .../queries/html_tags/injections.scm | 7 + .../queries/http/highlights.scm | 19 + .../queries/http/injections.scm | 1 + .../queries/java/highlights.scm | 260 ++++ .../nvim-treesitter/queries/java/indents.scm | 34 + .../queries/java/injections.scm | 1 + .../nvim-treesitter/queries/java/locals.scm | 77 ++ .../queries/javascript/folds.scm | 1 + .../queries/javascript/highlights.scm | 33 + .../queries/javascript/indents.scm | 1 + .../queries/javascript/injections.scm | 1 + .../queries/javascript/locals.scm | 33 + .../queries/jsdoc/highlights.scm | 2 + bundle/nvim-treesitter/queries/json/folds.scm | 5 + .../queries/json/highlights.scm | 16 + .../nvim-treesitter/queries/json/indents.scm | 9 + .../nvim-treesitter/queries/json/locals.scm | 4 + .../queries/json5/highlights.scm | 17 + .../queries/json5/injections.scm | 1 + .../nvim-treesitter/queries/jsonc/folds.scm | 1 + .../queries/jsonc/highlights.scm | 3 + .../nvim-treesitter/queries/jsonc/indents.scm | 3 + .../queries/jsonc/injections.scm | 1 + .../nvim-treesitter/queries/jsonc/locals.scm | 1 + bundle/nvim-treesitter/queries/jsx/folds.scm | 1 + .../queries/jsx/highlights.scm | 36 + .../nvim-treesitter/queries/jsx/indents.scm | 12 + .../nvim-treesitter/queries/julia/folds.scm | 17 + .../queries/julia/highlights.scm | 190 +++ .../nvim-treesitter/queries/julia/indents.scm | 42 + .../queries/julia/injections.scm | 8 + .../nvim-treesitter/queries/julia/locals.scm | 59 + .../nvim-treesitter/queries/kotlin/folds.scm | 17 + .../queries/kotlin/highlights.scm | 409 ++++++ .../queries/kotlin/injections.scm | 32 + .../nvim-treesitter/queries/kotlin/locals.scm | 83 ++ .../queries/lalrpop/highlights.scm | 57 + .../queries/lalrpop/locals.scm | 5 + .../nvim-treesitter/queries/latex/folds.scm | 13 + .../queries/latex/highlights.scm | 255 ++++ .../queries/latex/injections.scm | 22 + .../nvim-treesitter/queries/ledger/folds.scm | 3 + .../queries/ledger/highlights.scm | 38 + .../queries/ledger/indents.scm | 3 + .../queries/ledger/injections.scm | 2 + .../queries/llvm/highlights.scm | 156 +++ bundle/nvim-treesitter/queries/lua/folds.scm | 10 + .../queries/lua/highlights.scm | 192 +++ .../nvim-treesitter/queries/lua/indents.scm | 40 + .../queries/lua/injections.scm | 19 + bundle/nvim-treesitter/queries/lua/locals.scm | 51 + .../queries/make/highlights.scm | 120 ++ .../queries/make/injections.scm | 4 + .../queries/markdown/folds.scm | 5 + .../queries/markdown/highlights.scm | 74 ++ .../queries/markdown/injections.scm | 9 + .../nvim-treesitter/queries/ninja/folds.scm | 1 + .../queries/ninja/highlights.scm | 98 ++ .../nvim-treesitter/queries/ninja/indents.scm | 6 + bundle/nvim-treesitter/queries/nix/folds.scm | 11 + .../queries/nix/highlights.scm | 120 ++ .../queries/nix/injections.scm | 1 + bundle/nvim-treesitter/queries/nix/locals.scm | 15 + .../nvim-treesitter/queries/ocaml/folds.scm | 30 + .../queries/ocaml/highlights.scm | 173 +++ .../queries/ocaml/injections.scm | 1 + .../nvim-treesitter/queries/ocaml/locals.scm | 77 ++ .../queries/ocaml_interface/folds.scm | 1 + .../queries/ocaml_interface/highlights.scm | 1 + .../queries/ocaml_interface/injections.scm | 1 + .../queries/ocaml_interface/locals.scm | 1 + .../queries/ocamllex/highlights.scm | 29 + .../queries/ocamllex/injections.scm | 3 + .../nvim-treesitter/queries/pascal/folds.scm | 33 + .../queries/pascal/highlights.scm | 389 ++++++ .../queries/pascal/indents.scm | 32 + .../queries/pascal/injections.scm | 4 + .../nvim-treesitter/queries/pascal/locals.scm | 25 + bundle/nvim-treesitter/queries/perl/folds.scm | 12 + .../queries/perl/highlights.scm | 182 +++ bundle/nvim-treesitter/queries/php/folds.scm | 6 + .../queries/php/highlights.scm | 284 +++++ .../nvim-treesitter/queries/php/indents.scm | 21 + .../queries/php/injections.scm | 3 + bundle/nvim-treesitter/queries/php/locals.scm | 87 ++ .../queries/phpdoc/highlights.scm | 42 + .../queries/pioasm/highlights.scm | 30 + .../queries/pioasm/injections.scm | 10 + .../queries/prisma/highlights.scm | 39 + .../queries/pug/highlights.scm | 30 + .../queries/pug/injections.scm | 7 + .../nvim-treesitter/queries/python/folds.scm | 27 + .../queries/python/highlights.scm | 299 +++++ .../queries/python/indents.scm | 55 + .../queries/python/injections.scm | 8 + .../nvim-treesitter/queries/python/locals.scm | 115 ++ .../nvim-treesitter/queries/ql/highlights.scm | 130 ++ bundle/nvim-treesitter/queries/ql/indents.scm | 22 + .../nvim-treesitter/queries/ql/injections.scm | 5 + bundle/nvim-treesitter/queries/ql/locals.scm | 30 + .../nvim-treesitter/queries/query/folds.scm | 6 + .../queries/query/highlights.scm | 31 + .../nvim-treesitter/queries/query/indents.scm | 8 + .../queries/query/injections.scm | 6 + .../nvim-treesitter/queries/query/locals.scm | 15 + .../nvim-treesitter/queries/r/highlights.scm | 124 ++ bundle/nvim-treesitter/queries/r/indents.scm | 30 + .../nvim-treesitter/queries/r/injections.scm | 1 + bundle/nvim-treesitter/queries/r/locals.scm | 11 + bundle/nvim-treesitter/queries/rasi/folds.scm | 5 + .../queries/rasi/highlights.scm | 82 ++ .../nvim-treesitter/queries/rasi/indents.scm | 5 + .../nvim-treesitter/queries/rasi/locals.scm | 5 + .../queries/regex/highlights.scm | 34 + .../queries/rego/highlights.scm | 16 + .../queries/rego/injections.scm | 1 + .../queries/rst/highlights.scm | 163 +++ .../queries/rst/injections.scm | 71 ++ bundle/nvim-treesitter/queries/rst/locals.scm | 40 + bundle/nvim-treesitter/queries/ruby/folds.scm | 12 + .../queries/ruby/highlights.scm | 228 ++++ .../nvim-treesitter/queries/ruby/indents.scm | 41 + .../queries/ruby/injections.scm | 7 + .../nvim-treesitter/queries/ruby/locals.scm | 55 + bundle/nvim-treesitter/queries/rust/folds.scm | 25 + .../queries/rust/highlights.scm | 273 ++++ .../nvim-treesitter/queries/rust/indents.scm | 60 + .../queries/rust/injections.scm | 34 + .../nvim-treesitter/queries/rust/locals.scm | 104 ++ .../nvim-treesitter/queries/scala/folds.scm | 15 + .../queries/scala/highlights.scm | 204 +++ .../queries/scala/injections.scm | 1 + .../nvim-treesitter/queries/scheme/folds.scm | 1 + .../queries/scheme/highlights.scm | 181 +++ .../queries/scheme/injections.scm | 1 + .../queries/scss/highlights.scm | 50 + .../nvim-treesitter/queries/scss/indents.scm | 7 + .../queries/slint/highlights.scm | 115 ++ .../nvim-treesitter/queries/slint/indents.scm | 13 + .../queries/solidity/highlights.scm | 212 ++++ .../nvim-treesitter/queries/sparql/folds.scm | 26 + .../queries/sparql/highlights.scm | 211 +++ .../queries/sparql/indents.scm | 17 + .../queries/sparql/injections.scm | 1 + .../nvim-treesitter/queries/sparql/locals.scm | 8 + .../queries/supercollider/folds.scm | 7 + .../queries/supercollider/highlights.scm | 97 ++ .../queries/supercollider/indents.scm | 31 + .../queries/supercollider/injections.scm | 4 + .../queries/supercollider/locals.scm | 27 + .../nvim-treesitter/queries/surface/folds.scm | 6 + .../queries/surface/highlights.scm | 44 + .../queries/surface/indents.scm | 14 + .../queries/surface/injections.scm | 8 + .../nvim-treesitter/queries/svelte/folds.scm | 9 + .../queries/svelte/highlights.scm | 21 + .../queries/svelte/indents.scm | 20 + .../queries/svelte/injections.scm | 31 + .../queries/swift/highlights.scm | 150 +++ .../nvim-treesitter/queries/swift/locals.scm | 18 + bundle/nvim-treesitter/queries/teal/folds.scm | 13 + .../queries/teal/highlights.scm | 131 ++ .../nvim-treesitter/queries/teal/indents.scm | 18 + .../queries/teal/injections.scm | 27 + .../nvim-treesitter/queries/teal/locals.scm | 23 + .../nvim-treesitter/queries/tlaplus/folds.scm | 5 + .../queries/tlaplus/highlights.scm | 232 ++++ .../queries/tlaplus/injections.scm | 4 + .../queries/tlaplus/locals.scm | 42 + .../queries/todotxt/highlights.scm | 6 + bundle/nvim-treesitter/queries/toml/folds.scm | 5 + .../queries/toml/highlights.scm | 35 + .../nvim-treesitter/queries/toml/indents.scm | 11 + .../queries/toml/injections.scm | 1 + .../nvim-treesitter/queries/toml/locals.scm | 4 + bundle/nvim-treesitter/queries/tsx/folds.scm | 1 + .../queries/tsx/highlights.scm | 1 + .../nvim-treesitter/queries/tsx/indents.scm | 1 + .../queries/tsx/injections.scm | 1 + bundle/nvim-treesitter/queries/tsx/locals.scm | 1 + .../nvim-treesitter/queries/turtle/folds.scm | 4 + .../queries/turtle/highlights.scm | 58 + .../queries/turtle/indents.scm | 10 + .../queries/turtle/injections.scm | 1 + .../nvim-treesitter/queries/turtle/locals.scm | 12 + .../queries/typescript/folds.scm | 7 + .../queries/typescript/highlights.scm | 80 ++ .../queries/typescript/indents.scm | 7 + .../queries/typescript/injections.scm | 1 + .../queries/typescript/locals.scm | 27 + .../queries/vala/highlights.scm | 297 +++++ .../nvim-treesitter/queries/verilog/folds.scm | 6 + .../queries/verilog/highlights.scm | 311 +++++ .../queries/verilog/injections.scm | 1 + .../queries/verilog/locals.scm | 61 + .../queries/vim/highlights.scm | 219 ++++ .../queries/vim/injections.scm | 23 + bundle/nvim-treesitter/queries/vim/locals.scm | 10 + bundle/nvim-treesitter/queries/vue/folds.scm | 6 + .../queries/vue/highlights.scm | 23 + .../nvim-treesitter/queries/vue/indents.scm | 5 + .../queries/vue/injections.scm | 37 + bundle/nvim-treesitter/queries/wgsl/folds.scm | 10 + .../queries/wgsl/highlights.scm | 101 ++ bundle/nvim-treesitter/queries/yaml/folds.scm | 3 + .../queries/yaml/highlights.scm | 48 + .../nvim-treesitter/queries/yaml/indents.scm | 3 + .../queries/yaml/injections.scm | 27 + .../nvim-treesitter/queries/yaml/locals.scm | 8 + bundle/nvim-treesitter/queries/yang/folds.scm | 3 + .../queries/yang/highlights.scm | 40 + bundle/nvim-treesitter/queries/zig/folds.scm | 16 + .../queries/zig/highlights.scm | 237 ++++ .../nvim-treesitter/queries/zig/indents.scm | 22 + .../queries/zig/injections.scm | 5 + bundle/nvim-treesitter/queries/zig/locals.scm | 0 .../nvim-treesitter/scripts/check-queries.lua | 128 ++ .../scripts/ci-install-macos-latest.sh | 5 + .../scripts/ci-install-ubuntu-latest.sh | 10 + .../scripts/ci-install-windows-2022.sh | 5 + .../scripts/compile_parsers.makefile | 52 + .../nvim-treesitter/scripts/minimal_init.lua | 14 + bundle/nvim-treesitter/scripts/pre-push | 10 + bundle/nvim-treesitter/scripts/run_tests.sh | 16 + .../scripts/update-lockfile.sh | 20 + .../nvim-treesitter/scripts/update-readme.lua | 51 + .../scripts/write-lockfile.lua | 10 + .../tests/indent/c/aligned_indent.c | 7 + bundle/nvim-treesitter/tests/indent/c/array.c | 14 + .../nvim-treesitter/tests/indent/c/comment.c | 8 + .../tests/indent/c/compound_lit.c | 10 + bundle/nvim-treesitter/tests/indent/c/cond.c | 10 + bundle/nvim-treesitter/tests/indent/c/enum.c | 5 + bundle/nvim-treesitter/tests/indent/c/expr.c | 12 + bundle/nvim-treesitter/tests/indent/c/func.c | 33 + .../tests/indent/c/issue-1568.c | 6 + .../tests/indent/c/issue-2086.c | 3 + bundle/nvim-treesitter/tests/indent/c/label.c | 7 + bundle/nvim-treesitter/tests/indent/c/loop.c | 16 + .../tests/indent/c/no_braces.c | 12 + .../tests/indent/c/preproc_cond.c | 10 + .../tests/indent/c/preproc_func.c | 9 + .../nvim-treesitter/tests/indent/c/string.c | 5 + .../nvim-treesitter/tests/indent/c/struct.c | 11 + .../nvim-treesitter/tests/indent/c/switch.c | 16 + .../nvim-treesitter/tests/indent/c/ternary.c | 6 + .../tests/indent/c/unfinished_comment.c | 2 + .../nvim-treesitter/tests/indent/c_spec.lua | 46 + .../nvim-treesitter/tests/indent/common.lua | 202 +++ .../tests/indent/cpp/access.cpp | 6 + .../tests/indent/cpp/class.cpp | 7 + .../tests/indent/cpp/initializer_list.cpp | 17 + .../tests/indent/cpp/stream.cpp | 7 + .../nvim-treesitter/tests/indent/cpp_spec.lua | 51 + .../tests/indent/css/next_rule.css | 3 + .../tests/indent/css/open_block.css | 1 + .../nvim-treesitter/tests/indent/css_spec.lua | 28 + .../tests/indent/ecma/binary_expression.js | 4 + .../tests/indent/ecma/callback.js | 6 + .../tests/indent/ecma/class.js | 20 + .../nvim-treesitter/tests/indent/ecma/func.js | 51 + .../tests/indent/ecma/if_else.js | 13 + .../tests/indent/ecma/issue-2515.js | 16 + .../tests/indent/ecma/object.js | 5 + .../tests/indent/ecma/ternary.js | 6 + .../tests/indent/ecma/try_catch.js | 8 + .../tests/indent/ecma/variable.js | 6 + .../tests/indent/gdscript/basic_blocks.gd | 16 + .../tests/indent/gdscript_spec.lua | 20 + .../tests/indent/gleam/assert.gleam | 4 + .../indent/gleam/binary_expression.gleam | 4 + .../tests/indent/gleam/case.gleam | 10 + .../tests/indent/gleam/constant.gleam | 2 + .../tests/indent/gleam/function.gleam | 15 + .../tests/indent/gleam/import.gleam | 4 + .../tests/indent/gleam/let.gleam | 4 + .../tests/indent/gleam/list.gleam | 11 + .../tests/indent/gleam/pipe.gleam | 4 + .../tests/indent/gleam/todo.gleam | 5 + .../tests/indent/gleam/try.gleam | 7 + .../tests/indent/gleam/tuple.gleam | 11 + .../tests/indent/gleam/type.gleam | 18 + .../tests/indent/gleam_spec.lua | 127 ++ .../tests/indent/go/issue-2369.go | 19 + .../nvim-treesitter/tests/indent/go_spec.lua | 21 + .../tests/indent/graphql/issue-1981.graphql | 6 + .../tests/indent/graphql_spec.lua | 19 + .../indent/java/class_with_annotation.java | 3 + .../tests/indent/java/enum.java | 4 + .../indent/java/enum_with_annotation.java | 3 + .../tests/indent/java/interface.java | 2 + .../tests/indent/java/issue_2571.java | 6 + .../tests/indent/java/issue_2583.java | 6 + .../tests/indent/java/javadoc.java | 5 + .../tests/indent/java/method.java | 2 + .../tests/indent/java/method_chaining.java | 6 + .../tests/indent/java_spec.lua | 35 + .../tests/indent/javascript_spec.lua | 117 ++ .../tests/indent/lua/comment.lua | 7 + .../nvim-treesitter/tests/indent/lua/cond.lua | 12 + .../nvim-treesitter/tests/indent/lua/func.lua | 9 + .../nvim-treesitter/tests/indent/lua/loop.lua | 14 + .../tests/indent/lua/nested-table.lua | 7 + .../lua/no-indent-after-paren-pairs.lua | 6 + .../tests/indent/lua/string.lua | 5 + .../tests/indent/lua/table.lua | 10 + .../nvim-treesitter/tests/indent/lua_spec.lua | 43 + .../tests/indent/php/example.php | 12 + .../tests/indent/php/example2.php | 6 + .../tests/indent/php/issue-2497.php | 14 + .../tests/indent/php/unfinished-call.php | 6 + .../nvim-treesitter/tests/indent/php_spec.lua | 29 + .../tests/indent/python/aligned_indent.py | 14 + .../tests/indent/python/basic_blocks.py | 14 + .../tests/indent/python/basic_collections.py | 23 + .../tests/indent/python/branches.py | 31 + .../tests/indent/python/comprehensions.py | 25 + .../tests/indent/python/control_flow.py | 22 + .../tests/indent/python/hanging_indent.py | 6 + .../tests/indent/python/join_lines.py | 8 + .../tests/indent/python/nested_collections.py | 41 + .../tests/indent/python/strings.py | 17 + .../tests/indent/python_spec.lua | 51 + .../tests/indent/r/aligned_indent.R | 4 + .../nvim-treesitter/tests/indent/r/comment.R | 2 + bundle/nvim-treesitter/tests/indent/r/cond.R | 12 + bundle/nvim-treesitter/tests/indent/r/func.R | 18 + bundle/nvim-treesitter/tests/indent/r/loop.R | 17 + bundle/nvim-treesitter/tests/indent/r/pipe.R | 7 + .../nvim-treesitter/tests/indent/r_spec.lua | 41 + .../tests/indent/rust/array.rs | 11 + .../tests/indent/rust/comment.rs | 13 + .../nvim-treesitter/tests/indent/rust/cond.rs | 17 + .../nvim-treesitter/tests/indent/rust/enum.rs | 11 + .../nvim-treesitter/tests/indent/rust/func.rs | 10 + .../nvim-treesitter/tests/indent/rust/impl.rs | 7 + .../nvim-treesitter/tests/indent/rust/loop.rs | 19 + .../tests/indent/rust/macro.rs | 13 + .../tests/indent/rust/match.rs | 11 + .../nvim-treesitter/tests/indent/rust/mod.rs | 8 + .../tests/indent/rust/string.rs | 12 + .../tests/indent/rust/struct.rs | 4 + .../tests/indent/rust/trait.rs | 11 + .../tests/indent/rust/where.rs | 21 + .../tests/indent/rust_spec.lua | 63 + .../query/highlights/bash/double-parens.sh | 6 + .../query/highlights/c/enums-as-constants.c | 21 + .../tests/query/highlights/cpp/concepts.cpp | 22 + .../highlights/cpp/enums-as-constants.cpp | 25 + .../cpp/static-namespace-functions.cpp | 12 + .../tests/query/highlights/cpp/test.cpp | 17 + .../tests/query/highlights/ecma/test.ts | 25 + .../tests/query/highlights/fusion/afx.fusion | 17 + .../query/highlights/fusion/basic.fusion | 60 + .../highlights/fusion/expressions.fusion | 82 ++ .../tests/query/highlights/gleam/assert.gleam | 13 + .../query/highlights/gleam/function.gleam | 127 ++ .../tests/query/highlights/gleam/import.gleam | 22 + .../tests/query/highlights/gleam/pipe.gleam | 18 + .../tests/query/highlights/gleam/todo.gleam | 7 + .../tests/query/highlights/gleam/try.gleam | 11 + .../tests/query/highlights/gleam/type.gleam | 83 ++ .../query/highlights/hack/as-foreach.hack | 6 + .../highlights/hack/async-functions.hack | 8 + .../query/highlights/hack/attribute-type.hack | 15 + .../tests/query/highlights/hack/generics.hack | 24 + .../query/highlights/hack/heredoc-dollar.hack | 4 + .../tests/query/highlights/hack/shapes.hack | 12 + .../tests/query/highlights/hack/use.hack | 28 + .../tests/query/highlights/hack/using.hack | 3 + .../tests/query/highlights/hack/xhp.hack | 10 + .../tests/query/highlights/hocon/test.conf | 59 + .../tests/query/highlights/lua/test.lua | 13 + .../tests/query/highlights/markdown/test.md | 28 + .../tests/query/highlights/pascal/test.pas | 39 + .../tests/query/highlights/prisma/test.prisma | 56 + .../highlights/python/pattern_matching.py | 50 + .../query/highlights/python/yield_from.py | 7 + .../tests/query/highlights/solidity/test.sol | 186 +++ .../tests/query/highlights/xhp-intro.hack | 46 + .../tests/query/highlights_spec.lua | 106 ++ .../tests/query/injection_spec.lua | 68 + .../injections/cuda/macro-self-injection.cu | 2 + .../yaml/bash-on-github-actions.yml | 32 + .../tests/unit/parsers_spec.lua | 46 + .../tests/unit/ts_utils_spec.lua | 41 + 620 files changed, 29164 insertions(+), 1 deletion(-) create mode 100644 bundle/nvim-treesitter/.editorconfig create mode 100644 bundle/nvim-treesitter/.github/CODEOWNERS create mode 100644 bundle/nvim-treesitter/.github/FUNDING.yml create mode 100644 bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/highlighting_issue.yml create mode 100644 bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/language-request.md create mode 100644 bundle/nvim-treesitter/.github/mergify.yml create mode 100644 bundle/nvim-treesitter/.github/workflows/lint.yml create mode 100644 bundle/nvim-treesitter/.github/workflows/test-queries.yml create mode 100644 bundle/nvim-treesitter/.github/workflows/tests.yml create mode 100644 bundle/nvim-treesitter/.github/workflows/update-lockfile.yml create mode 100644 bundle/nvim-treesitter/.github/workflows/update-readme.yml create mode 100644 bundle/nvim-treesitter/.gitignore create mode 100644 bundle/nvim-treesitter/.luacheckrc create mode 100644 bundle/nvim-treesitter/.stylua.toml create mode 100644 bundle/nvim-treesitter/.styluaignore create mode 100644 bundle/nvim-treesitter/CONTRIBUTING.md create mode 100644 bundle/nvim-treesitter/LICENSE create mode 100644 bundle/nvim-treesitter/README.md create mode 100644 bundle/nvim-treesitter/after/ftplugin/elixir.vim create mode 100644 bundle/nvim-treesitter/after/ftplugin/graphql.vim create mode 100644 bundle/nvim-treesitter/after/ftplugin/heex.vim create mode 100644 bundle/nvim-treesitter/after/ftplugin/query.vim create mode 100644 bundle/nvim-treesitter/after/ftplugin/surface.vim create mode 100644 bundle/nvim-treesitter/assets/example-cpp.png create mode 100644 bundle/nvim-treesitter/assets/logo.png create mode 100644 bundle/nvim-treesitter/autoload/health/nvim_treesitter.vim create mode 100644 bundle/nvim-treesitter/autoload/nvim_treesitter.vim create mode 100644 bundle/nvim-treesitter/doc/nvim-treesitter.txt create mode 100644 bundle/nvim-treesitter/ftdetect/cooklang.vim create mode 100644 bundle/nvim-treesitter/ftdetect/fusion.vim create mode 100644 bundle/nvim-treesitter/ftdetect/gdresource.vim create mode 100644 bundle/nvim-treesitter/ftdetect/gdscript.vim create mode 100644 bundle/nvim-treesitter/ftdetect/glimmer.vim create mode 100644 bundle/nvim-treesitter/ftdetect/glsl.vim create mode 100644 bundle/nvim-treesitter/ftdetect/gowork.vim create mode 100644 bundle/nvim-treesitter/ftdetect/graphql.vim create mode 100644 bundle/nvim-treesitter/ftdetect/hack.vim create mode 100644 bundle/nvim-treesitter/ftdetect/hcl.vim create mode 100644 bundle/nvim-treesitter/ftdetect/heex.vim create mode 100644 bundle/nvim-treesitter/ftdetect/hjson.vim create mode 100644 bundle/nvim-treesitter/ftdetect/json5.vim create mode 100644 bundle/nvim-treesitter/ftdetect/ledger.vim create mode 100644 bundle/nvim-treesitter/ftdetect/nix.vim create mode 100644 bundle/nvim-treesitter/ftdetect/prisma.vim create mode 100644 bundle/nvim-treesitter/ftdetect/pug.vim create mode 100644 bundle/nvim-treesitter/ftdetect/ql.vim create mode 100644 bundle/nvim-treesitter/ftdetect/query.vim create mode 100644 bundle/nvim-treesitter/ftdetect/surface.vim create mode 100644 bundle/nvim-treesitter/ftdetect/teal.vim create mode 100644 bundle/nvim-treesitter/ftdetect/tlaplus.vim create mode 100644 bundle/nvim-treesitter/ftdetect/yang.vim create mode 100644 bundle/nvim-treesitter/lockfile.json create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/caching.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/configs.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/fold.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/health.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/highlight.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/incremental_selection.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/indent.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/info.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/install.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/locals.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/parsers.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/query.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/query_predicates.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/shell_command_selectors.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/tsrange.lua create mode 100644 bundle/nvim-treesitter/lua/nvim-treesitter/utils.lua create mode 100644 bundle/nvim-treesitter/parser-info/.gitignore create mode 100644 bundle/nvim-treesitter/parser/.gitignore create mode 100644 bundle/nvim-treesitter/plugin/nvim-treesitter.vim create mode 100644 bundle/nvim-treesitter/queries/astro/folds.scm create mode 100644 bundle/nvim-treesitter/queries/astro/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/astro/indents.scm create mode 100644 bundle/nvim-treesitter/queries/astro/injections.scm create mode 100644 bundle/nvim-treesitter/queries/astro/locals.scm create mode 100644 bundle/nvim-treesitter/queries/bash/folds.scm create mode 100644 bundle/nvim-treesitter/queries/bash/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/bash/injections.scm create mode 100644 bundle/nvim-treesitter/queries/bash/locals.scm create mode 100644 bundle/nvim-treesitter/queries/beancount/folds.scm create mode 100644 bundle/nvim-treesitter/queries/beancount/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/bibtex/folds.scm create mode 100644 bundle/nvim-treesitter/queries/bibtex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/bibtex/indents.scm create mode 100644 bundle/nvim-treesitter/queries/c/folds.scm create mode 100644 bundle/nvim-treesitter/queries/c/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/c/indents.scm create mode 100644 bundle/nvim-treesitter/queries/c/injections.scm create mode 100644 bundle/nvim-treesitter/queries/c/locals.scm create mode 100644 bundle/nvim-treesitter/queries/c_sharp/folds.scm create mode 100644 bundle/nvim-treesitter/queries/c_sharp/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/c_sharp/injections.scm create mode 100644 bundle/nvim-treesitter/queries/c_sharp/locals.scm create mode 100644 bundle/nvim-treesitter/queries/clojure/folds.scm create mode 100644 bundle/nvim-treesitter/queries/clojure/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/clojure/injections.scm create mode 100644 bundle/nvim-treesitter/queries/clojure/locals.scm create mode 100644 bundle/nvim-treesitter/queries/cmake/folds.scm create mode 100644 bundle/nvim-treesitter/queries/cmake/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/comment/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/commonlisp/folds.scm create mode 100644 bundle/nvim-treesitter/queries/commonlisp/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/commonlisp/locals.scm create mode 100644 bundle/nvim-treesitter/queries/cooklang/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/cpp/folds.scm create mode 100644 bundle/nvim-treesitter/queries/cpp/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/cpp/indents.scm create mode 100644 bundle/nvim-treesitter/queries/cpp/injections.scm create mode 100644 bundle/nvim-treesitter/queries/cpp/locals.scm create mode 100644 bundle/nvim-treesitter/queries/css/folds.scm create mode 100644 bundle/nvim-treesitter/queries/css/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/css/indents.scm create mode 100644 bundle/nvim-treesitter/queries/css/injections.scm create mode 100644 bundle/nvim-treesitter/queries/cuda/folds.scm create mode 100644 bundle/nvim-treesitter/queries/cuda/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/cuda/indents.scm create mode 100644 bundle/nvim-treesitter/queries/cuda/injections.scm create mode 100644 bundle/nvim-treesitter/queries/cuda/locals.scm create mode 100644 bundle/nvim-treesitter/queries/d/folds.scm create mode 100644 bundle/nvim-treesitter/queries/d/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/d/indents.scm create mode 100644 bundle/nvim-treesitter/queries/d/injections.scm create mode 100644 bundle/nvim-treesitter/queries/dart/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/dart/indents.scm create mode 100644 bundle/nvim-treesitter/queries/dart/injections.scm create mode 100644 bundle/nvim-treesitter/queries/dart/locals.scm create mode 100644 bundle/nvim-treesitter/queries/devicetree/folds.scm create mode 100644 bundle/nvim-treesitter/queries/devicetree/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/devicetree/indents.scm create mode 100644 bundle/nvim-treesitter/queries/devicetree/injections.scm create mode 100644 bundle/nvim-treesitter/queries/devicetree/locals.scm create mode 100644 bundle/nvim-treesitter/queries/dockerfile/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/dockerfile/injections.scm create mode 100644 bundle/nvim-treesitter/queries/dot/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/dot/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ecma/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ecma/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ecma/indents.scm create mode 100644 bundle/nvim-treesitter/queries/ecma/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ecma/locals.scm create mode 100644 bundle/nvim-treesitter/queries/eex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/eex/injections.scm create mode 100644 bundle/nvim-treesitter/queries/elixir/folds.scm create mode 100644 bundle/nvim-treesitter/queries/elixir/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/elixir/indents.scm create mode 100644 bundle/nvim-treesitter/queries/elixir/injections.scm create mode 100644 bundle/nvim-treesitter/queries/elixir/locals.scm create mode 100644 bundle/nvim-treesitter/queries/elm/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/elm/injections.scm create mode 100644 bundle/nvim-treesitter/queries/elvish/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/elvish/injections.scm create mode 100644 bundle/nvim-treesitter/queries/fennel/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/fennel/injections.scm create mode 100644 bundle/nvim-treesitter/queries/fennel/locals.scm create mode 100644 bundle/nvim-treesitter/queries/fish/folds.scm create mode 100644 bundle/nvim-treesitter/queries/fish/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/fish/indents.scm create mode 100644 bundle/nvim-treesitter/queries/fish/injections.scm create mode 100644 bundle/nvim-treesitter/queries/fish/locals.scm create mode 100644 bundle/nvim-treesitter/queries/foam/folds.scm create mode 100644 bundle/nvim-treesitter/queries/foam/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/foam/indents.scm create mode 100644 bundle/nvim-treesitter/queries/foam/injections.scm create mode 100644 bundle/nvim-treesitter/queries/foam/locals.scm create mode 100644 bundle/nvim-treesitter/queries/fortran/folds.scm create mode 100644 bundle/nvim-treesitter/queries/fortran/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/fortran/indents.scm create mode 100644 bundle/nvim-treesitter/queries/fusion/folds.scm create mode 100644 bundle/nvim-treesitter/queries/fusion/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/fusion/indents.scm create mode 100644 bundle/nvim-treesitter/queries/fusion/locals.scm create mode 100644 bundle/nvim-treesitter/queries/gdscript/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/gdscript/indents.scm create mode 100644 bundle/nvim-treesitter/queries/gdscript/injections.scm create mode 100644 bundle/nvim-treesitter/queries/gdscript/locals.scm create mode 100644 bundle/nvim-treesitter/queries/gleam/folds.scm create mode 100644 bundle/nvim-treesitter/queries/gleam/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/gleam/indents.scm create mode 100644 bundle/nvim-treesitter/queries/gleam/injections.scm create mode 100644 bundle/nvim-treesitter/queries/gleam/locals.scm create mode 100644 bundle/nvim-treesitter/queries/glimmer/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/glsl/folds.scm create mode 100644 bundle/nvim-treesitter/queries/glsl/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/glsl/indents.scm create mode 100644 bundle/nvim-treesitter/queries/glsl/injections.scm create mode 100644 bundle/nvim-treesitter/queries/glsl/locals.scm create mode 100644 bundle/nvim-treesitter/queries/go/folds.scm create mode 100644 bundle/nvim-treesitter/queries/go/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/go/indents.scm create mode 100644 bundle/nvim-treesitter/queries/go/injections.scm create mode 100644 bundle/nvim-treesitter/queries/go/locals.scm create mode 100644 bundle/nvim-treesitter/queries/godot_resource/folds.scm create mode 100644 bundle/nvim-treesitter/queries/godot_resource/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/godot_resource/locals.scm create mode 100644 bundle/nvim-treesitter/queries/gomod/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/gomod/injections.scm create mode 100644 bundle/nvim-treesitter/queries/gowork/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/gowork/injections.scm create mode 100644 bundle/nvim-treesitter/queries/graphql/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/graphql/indents.scm create mode 100644 bundle/nvim-treesitter/queries/graphql/injections.scm create mode 100644 bundle/nvim-treesitter/queries/hack/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/haskell/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/haskell/injections.scm create mode 100644 bundle/nvim-treesitter/queries/hcl/folds.scm create mode 100644 bundle/nvim-treesitter/queries/hcl/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/hcl/indents.scm create mode 100644 bundle/nvim-treesitter/queries/hcl/injections.scm create mode 100644 bundle/nvim-treesitter/queries/heex/folds.scm create mode 100644 bundle/nvim-treesitter/queries/heex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/heex/indents.scm create mode 100644 bundle/nvim-treesitter/queries/heex/injections.scm create mode 100644 bundle/nvim-treesitter/queries/heex/locals.scm create mode 100644 bundle/nvim-treesitter/queries/help/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/hjson/folds.scm create mode 100644 bundle/nvim-treesitter/queries/hjson/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/hjson/indents.scm create mode 100644 bundle/nvim-treesitter/queries/hjson/injections.scm create mode 100644 bundle/nvim-treesitter/queries/hjson/locals.scm create mode 100644 bundle/nvim-treesitter/queries/hocon/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/hocon/injections.scm create mode 100644 bundle/nvim-treesitter/queries/html/folds.scm create mode 100644 bundle/nvim-treesitter/queries/html/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/html/indents.scm create mode 100644 bundle/nvim-treesitter/queries/html/injections.scm create mode 100644 bundle/nvim-treesitter/queries/html/locals.scm create mode 100644 bundle/nvim-treesitter/queries/html_tags/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/html_tags/indents.scm create mode 100644 bundle/nvim-treesitter/queries/html_tags/injections.scm create mode 100644 bundle/nvim-treesitter/queries/http/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/http/injections.scm create mode 100644 bundle/nvim-treesitter/queries/java/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/java/indents.scm create mode 100644 bundle/nvim-treesitter/queries/java/injections.scm create mode 100644 bundle/nvim-treesitter/queries/java/locals.scm create mode 100644 bundle/nvim-treesitter/queries/javascript/folds.scm create mode 100644 bundle/nvim-treesitter/queries/javascript/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/javascript/indents.scm create mode 100644 bundle/nvim-treesitter/queries/javascript/injections.scm create mode 100644 bundle/nvim-treesitter/queries/javascript/locals.scm create mode 100644 bundle/nvim-treesitter/queries/jsdoc/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/json/folds.scm create mode 100644 bundle/nvim-treesitter/queries/json/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/json/indents.scm create mode 100644 bundle/nvim-treesitter/queries/json/locals.scm create mode 100644 bundle/nvim-treesitter/queries/json5/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/json5/injections.scm create mode 100644 bundle/nvim-treesitter/queries/jsonc/folds.scm create mode 100644 bundle/nvim-treesitter/queries/jsonc/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/jsonc/indents.scm create mode 100644 bundle/nvim-treesitter/queries/jsonc/injections.scm create mode 100644 bundle/nvim-treesitter/queries/jsonc/locals.scm create mode 100644 bundle/nvim-treesitter/queries/jsx/folds.scm create mode 100644 bundle/nvim-treesitter/queries/jsx/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/jsx/indents.scm create mode 100644 bundle/nvim-treesitter/queries/julia/folds.scm create mode 100644 bundle/nvim-treesitter/queries/julia/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/julia/indents.scm create mode 100644 bundle/nvim-treesitter/queries/julia/injections.scm create mode 100644 bundle/nvim-treesitter/queries/julia/locals.scm create mode 100644 bundle/nvim-treesitter/queries/kotlin/folds.scm create mode 100644 bundle/nvim-treesitter/queries/kotlin/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/kotlin/injections.scm create mode 100644 bundle/nvim-treesitter/queries/kotlin/locals.scm create mode 100644 bundle/nvim-treesitter/queries/lalrpop/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/lalrpop/locals.scm create mode 100644 bundle/nvim-treesitter/queries/latex/folds.scm create mode 100644 bundle/nvim-treesitter/queries/latex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/latex/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ledger/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ledger/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ledger/indents.scm create mode 100644 bundle/nvim-treesitter/queries/ledger/injections.scm create mode 100644 bundle/nvim-treesitter/queries/llvm/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/lua/folds.scm create mode 100644 bundle/nvim-treesitter/queries/lua/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/lua/indents.scm create mode 100644 bundle/nvim-treesitter/queries/lua/injections.scm create mode 100644 bundle/nvim-treesitter/queries/lua/locals.scm create mode 100644 bundle/nvim-treesitter/queries/make/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/make/injections.scm create mode 100644 bundle/nvim-treesitter/queries/markdown/folds.scm create mode 100644 bundle/nvim-treesitter/queries/markdown/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/markdown/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ninja/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ninja/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ninja/indents.scm create mode 100644 bundle/nvim-treesitter/queries/nix/folds.scm create mode 100644 bundle/nvim-treesitter/queries/nix/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/nix/injections.scm create mode 100644 bundle/nvim-treesitter/queries/nix/locals.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml/locals.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml_interface/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml_interface/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml_interface/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ocaml_interface/locals.scm create mode 100644 bundle/nvim-treesitter/queries/ocamllex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ocamllex/injections.scm create mode 100644 bundle/nvim-treesitter/queries/pascal/folds.scm create mode 100644 bundle/nvim-treesitter/queries/pascal/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/pascal/indents.scm create mode 100644 bundle/nvim-treesitter/queries/pascal/injections.scm create mode 100644 bundle/nvim-treesitter/queries/pascal/locals.scm create mode 100644 bundle/nvim-treesitter/queries/perl/folds.scm create mode 100644 bundle/nvim-treesitter/queries/perl/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/php/folds.scm create mode 100644 bundle/nvim-treesitter/queries/php/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/php/indents.scm create mode 100644 bundle/nvim-treesitter/queries/php/injections.scm create mode 100644 bundle/nvim-treesitter/queries/php/locals.scm create mode 100644 bundle/nvim-treesitter/queries/phpdoc/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/pioasm/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/pioasm/injections.scm create mode 100644 bundle/nvim-treesitter/queries/prisma/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/pug/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/pug/injections.scm create mode 100644 bundle/nvim-treesitter/queries/python/folds.scm create mode 100644 bundle/nvim-treesitter/queries/python/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/python/indents.scm create mode 100644 bundle/nvim-treesitter/queries/python/injections.scm create mode 100644 bundle/nvim-treesitter/queries/python/locals.scm create mode 100644 bundle/nvim-treesitter/queries/ql/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ql/indents.scm create mode 100644 bundle/nvim-treesitter/queries/ql/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ql/locals.scm create mode 100644 bundle/nvim-treesitter/queries/query/folds.scm create mode 100644 bundle/nvim-treesitter/queries/query/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/query/indents.scm create mode 100644 bundle/nvim-treesitter/queries/query/injections.scm create mode 100644 bundle/nvim-treesitter/queries/query/locals.scm create mode 100644 bundle/nvim-treesitter/queries/r/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/r/indents.scm create mode 100644 bundle/nvim-treesitter/queries/r/injections.scm create mode 100644 bundle/nvim-treesitter/queries/r/locals.scm create mode 100644 bundle/nvim-treesitter/queries/rasi/folds.scm create mode 100644 bundle/nvim-treesitter/queries/rasi/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/rasi/indents.scm create mode 100644 bundle/nvim-treesitter/queries/rasi/locals.scm create mode 100644 bundle/nvim-treesitter/queries/regex/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/rego/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/rego/injections.scm create mode 100644 bundle/nvim-treesitter/queries/rst/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/rst/injections.scm create mode 100644 bundle/nvim-treesitter/queries/rst/locals.scm create mode 100644 bundle/nvim-treesitter/queries/ruby/folds.scm create mode 100644 bundle/nvim-treesitter/queries/ruby/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/ruby/indents.scm create mode 100644 bundle/nvim-treesitter/queries/ruby/injections.scm create mode 100644 bundle/nvim-treesitter/queries/ruby/locals.scm create mode 100644 bundle/nvim-treesitter/queries/rust/folds.scm create mode 100644 bundle/nvim-treesitter/queries/rust/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/rust/indents.scm create mode 100644 bundle/nvim-treesitter/queries/rust/injections.scm create mode 100644 bundle/nvim-treesitter/queries/rust/locals.scm create mode 100644 bundle/nvim-treesitter/queries/scala/folds.scm create mode 100644 bundle/nvim-treesitter/queries/scala/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/scala/injections.scm create mode 100644 bundle/nvim-treesitter/queries/scheme/folds.scm create mode 100644 bundle/nvim-treesitter/queries/scheme/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/scheme/injections.scm create mode 100644 bundle/nvim-treesitter/queries/scss/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/scss/indents.scm create mode 100644 bundle/nvim-treesitter/queries/slint/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/slint/indents.scm create mode 100644 bundle/nvim-treesitter/queries/solidity/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/sparql/folds.scm create mode 100644 bundle/nvim-treesitter/queries/sparql/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/sparql/indents.scm create mode 100644 bundle/nvim-treesitter/queries/sparql/injections.scm create mode 100644 bundle/nvim-treesitter/queries/sparql/locals.scm create mode 100644 bundle/nvim-treesitter/queries/supercollider/folds.scm create mode 100644 bundle/nvim-treesitter/queries/supercollider/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/supercollider/indents.scm create mode 100644 bundle/nvim-treesitter/queries/supercollider/injections.scm create mode 100644 bundle/nvim-treesitter/queries/supercollider/locals.scm create mode 100644 bundle/nvim-treesitter/queries/surface/folds.scm create mode 100644 bundle/nvim-treesitter/queries/surface/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/surface/indents.scm create mode 100644 bundle/nvim-treesitter/queries/surface/injections.scm create mode 100644 bundle/nvim-treesitter/queries/svelte/folds.scm create mode 100644 bundle/nvim-treesitter/queries/svelte/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/svelte/indents.scm create mode 100644 bundle/nvim-treesitter/queries/svelte/injections.scm create mode 100644 bundle/nvim-treesitter/queries/swift/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/swift/locals.scm create mode 100644 bundle/nvim-treesitter/queries/teal/folds.scm create mode 100644 bundle/nvim-treesitter/queries/teal/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/teal/indents.scm create mode 100644 bundle/nvim-treesitter/queries/teal/injections.scm create mode 100644 bundle/nvim-treesitter/queries/teal/locals.scm create mode 100644 bundle/nvim-treesitter/queries/tlaplus/folds.scm create mode 100644 bundle/nvim-treesitter/queries/tlaplus/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/tlaplus/injections.scm create mode 100644 bundle/nvim-treesitter/queries/tlaplus/locals.scm create mode 100644 bundle/nvim-treesitter/queries/todotxt/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/toml/folds.scm create mode 100644 bundle/nvim-treesitter/queries/toml/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/toml/indents.scm create mode 100644 bundle/nvim-treesitter/queries/toml/injections.scm create mode 100644 bundle/nvim-treesitter/queries/toml/locals.scm create mode 100644 bundle/nvim-treesitter/queries/tsx/folds.scm create mode 100644 bundle/nvim-treesitter/queries/tsx/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/tsx/indents.scm create mode 100644 bundle/nvim-treesitter/queries/tsx/injections.scm create mode 100644 bundle/nvim-treesitter/queries/tsx/locals.scm create mode 100644 bundle/nvim-treesitter/queries/turtle/folds.scm create mode 100644 bundle/nvim-treesitter/queries/turtle/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/turtle/indents.scm create mode 100644 bundle/nvim-treesitter/queries/turtle/injections.scm create mode 100644 bundle/nvim-treesitter/queries/turtle/locals.scm create mode 100644 bundle/nvim-treesitter/queries/typescript/folds.scm create mode 100644 bundle/nvim-treesitter/queries/typescript/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/typescript/indents.scm create mode 100644 bundle/nvim-treesitter/queries/typescript/injections.scm create mode 100644 bundle/nvim-treesitter/queries/typescript/locals.scm create mode 100644 bundle/nvim-treesitter/queries/vala/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/verilog/folds.scm create mode 100644 bundle/nvim-treesitter/queries/verilog/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/verilog/injections.scm create mode 100644 bundle/nvim-treesitter/queries/verilog/locals.scm create mode 100644 bundle/nvim-treesitter/queries/vim/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/vim/injections.scm create mode 100644 bundle/nvim-treesitter/queries/vim/locals.scm create mode 100644 bundle/nvim-treesitter/queries/vue/folds.scm create mode 100644 bundle/nvim-treesitter/queries/vue/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/vue/indents.scm create mode 100644 bundle/nvim-treesitter/queries/vue/injections.scm create mode 100644 bundle/nvim-treesitter/queries/wgsl/folds.scm create mode 100644 bundle/nvim-treesitter/queries/wgsl/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/yaml/folds.scm create mode 100644 bundle/nvim-treesitter/queries/yaml/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/yaml/indents.scm create mode 100644 bundle/nvim-treesitter/queries/yaml/injections.scm create mode 100644 bundle/nvim-treesitter/queries/yaml/locals.scm create mode 100644 bundle/nvim-treesitter/queries/yang/folds.scm create mode 100644 bundle/nvim-treesitter/queries/yang/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/zig/folds.scm create mode 100644 bundle/nvim-treesitter/queries/zig/highlights.scm create mode 100644 bundle/nvim-treesitter/queries/zig/indents.scm create mode 100644 bundle/nvim-treesitter/queries/zig/injections.scm create mode 100644 bundle/nvim-treesitter/queries/zig/locals.scm create mode 100644 bundle/nvim-treesitter/scripts/check-queries.lua create mode 100644 bundle/nvim-treesitter/scripts/ci-install-macos-latest.sh create mode 100644 bundle/nvim-treesitter/scripts/ci-install-ubuntu-latest.sh create mode 100644 bundle/nvim-treesitter/scripts/ci-install-windows-2022.sh create mode 100644 bundle/nvim-treesitter/scripts/compile_parsers.makefile create mode 100644 bundle/nvim-treesitter/scripts/minimal_init.lua create mode 100644 bundle/nvim-treesitter/scripts/pre-push create mode 100644 bundle/nvim-treesitter/scripts/run_tests.sh create mode 100644 bundle/nvim-treesitter/scripts/update-lockfile.sh create mode 100644 bundle/nvim-treesitter/scripts/update-readme.lua create mode 100644 bundle/nvim-treesitter/scripts/write-lockfile.lua create mode 100644 bundle/nvim-treesitter/tests/indent/c/aligned_indent.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/array.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/comment.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/compound_lit.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/cond.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/enum.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/expr.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/func.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/issue-1568.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/issue-2086.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/label.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/loop.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/no_braces.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/preproc_cond.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/preproc_func.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/string.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/struct.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/switch.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/ternary.c create mode 100644 bundle/nvim-treesitter/tests/indent/c/unfinished_comment.c create mode 100644 bundle/nvim-treesitter/tests/indent/c_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/common.lua create mode 100644 bundle/nvim-treesitter/tests/indent/cpp/access.cpp create mode 100644 bundle/nvim-treesitter/tests/indent/cpp/class.cpp create mode 100644 bundle/nvim-treesitter/tests/indent/cpp/initializer_list.cpp create mode 100644 bundle/nvim-treesitter/tests/indent/cpp/stream.cpp create mode 100644 bundle/nvim-treesitter/tests/indent/cpp_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/css/next_rule.css create mode 100644 bundle/nvim-treesitter/tests/indent/css/open_block.css create mode 100644 bundle/nvim-treesitter/tests/indent/css_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/binary_expression.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/callback.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/class.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/func.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/if_else.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/issue-2515.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/object.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/ternary.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/try_catch.js create mode 100644 bundle/nvim-treesitter/tests/indent/ecma/variable.js create mode 100644 bundle/nvim-treesitter/tests/indent/gdscript/basic_blocks.gd create mode 100644 bundle/nvim-treesitter/tests/indent/gdscript_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/assert.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/binary_expression.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/case.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/constant.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/function.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/import.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/let.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/list.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/pipe.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/todo.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/try.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/tuple.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam/type.gleam create mode 100644 bundle/nvim-treesitter/tests/indent/gleam_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/go/issue-2369.go create mode 100644 bundle/nvim-treesitter/tests/indent/go_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/graphql/issue-1981.graphql create mode 100644 bundle/nvim-treesitter/tests/indent/graphql_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/java/class_with_annotation.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/enum.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/enum_with_annotation.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/interface.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/issue_2571.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/issue_2583.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/javadoc.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/method.java create mode 100644 bundle/nvim-treesitter/tests/indent/java/method_chaining.java create mode 100644 bundle/nvim-treesitter/tests/indent/java_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/javascript_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/comment.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/cond.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/func.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/loop.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/nested-table.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/no-indent-after-paren-pairs.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/string.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua/table.lua create mode 100644 bundle/nvim-treesitter/tests/indent/lua_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/php/example.php create mode 100644 bundle/nvim-treesitter/tests/indent/php/example2.php create mode 100644 bundle/nvim-treesitter/tests/indent/php/issue-2497.php create mode 100644 bundle/nvim-treesitter/tests/indent/php/unfinished-call.php create mode 100644 bundle/nvim-treesitter/tests/indent/php_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/python/aligned_indent.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/basic_blocks.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/basic_collections.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/branches.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/comprehensions.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/control_flow.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/hanging_indent.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/join_lines.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/nested_collections.py create mode 100644 bundle/nvim-treesitter/tests/indent/python/strings.py create mode 100644 bundle/nvim-treesitter/tests/indent/python_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/r/aligned_indent.R create mode 100644 bundle/nvim-treesitter/tests/indent/r/comment.R create mode 100644 bundle/nvim-treesitter/tests/indent/r/cond.R create mode 100644 bundle/nvim-treesitter/tests/indent/r/func.R create mode 100644 bundle/nvim-treesitter/tests/indent/r/loop.R create mode 100644 bundle/nvim-treesitter/tests/indent/r/pipe.R create mode 100644 bundle/nvim-treesitter/tests/indent/r_spec.lua create mode 100644 bundle/nvim-treesitter/tests/indent/rust/array.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/comment.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/cond.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/enum.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/func.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/impl.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/loop.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/macro.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/match.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/mod.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/string.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/struct.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/trait.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust/where.rs create mode 100644 bundle/nvim-treesitter/tests/indent/rust_spec.lua create mode 100644 bundle/nvim-treesitter/tests/query/highlights/bash/double-parens.sh create mode 100644 bundle/nvim-treesitter/tests/query/highlights/c/enums-as-constants.c create mode 100644 bundle/nvim-treesitter/tests/query/highlights/cpp/concepts.cpp create mode 100644 bundle/nvim-treesitter/tests/query/highlights/cpp/enums-as-constants.cpp create mode 100644 bundle/nvim-treesitter/tests/query/highlights/cpp/static-namespace-functions.cpp create mode 100644 bundle/nvim-treesitter/tests/query/highlights/cpp/test.cpp create mode 100644 bundle/nvim-treesitter/tests/query/highlights/ecma/test.ts create mode 100644 bundle/nvim-treesitter/tests/query/highlights/fusion/afx.fusion create mode 100644 bundle/nvim-treesitter/tests/query/highlights/fusion/basic.fusion create mode 100644 bundle/nvim-treesitter/tests/query/highlights/fusion/expressions.fusion create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/assert.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/function.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/import.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/pipe.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/todo.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/try.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/gleam/type.gleam create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/as-foreach.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/async-functions.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/attribute-type.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/generics.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/heredoc-dollar.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/shapes.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/use.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/using.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hack/xhp.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights/hocon/test.conf create mode 100644 bundle/nvim-treesitter/tests/query/highlights/lua/test.lua create mode 100644 bundle/nvim-treesitter/tests/query/highlights/markdown/test.md create mode 100644 bundle/nvim-treesitter/tests/query/highlights/pascal/test.pas create mode 100644 bundle/nvim-treesitter/tests/query/highlights/prisma/test.prisma create mode 100644 bundle/nvim-treesitter/tests/query/highlights/python/pattern_matching.py create mode 100644 bundle/nvim-treesitter/tests/query/highlights/python/yield_from.py create mode 100644 bundle/nvim-treesitter/tests/query/highlights/solidity/test.sol create mode 100644 bundle/nvim-treesitter/tests/query/highlights/xhp-intro.hack create mode 100644 bundle/nvim-treesitter/tests/query/highlights_spec.lua create mode 100644 bundle/nvim-treesitter/tests/query/injection_spec.lua create mode 100644 bundle/nvim-treesitter/tests/query/injections/cuda/macro-self-injection.cu create mode 100644 bundle/nvim-treesitter/tests/query/injections/yaml/bash-on-github-actions.yml create mode 100644 bundle/nvim-treesitter/tests/unit/parsers_spec.lua create mode 100644 bundle/nvim-treesitter/tests/unit/ts_utils_spec.lua diff --git a/autoload/SpaceVim/layers/treesitter.vim b/autoload/SpaceVim/layers/treesitter.vim index affa14242..a9cb8ec8a 100644 --- a/autoload/SpaceVim/layers/treesitter.vim +++ b/autoload/SpaceVim/layers/treesitter.vim @@ -13,7 +13,13 @@ function! SpaceVim#layers#treesitter#plugins() abort let plugins = [] - call add(plugins, ['nvim-treesitter/nvim-treesitter', {'do' : ':TSUpdate'}]) + call add(plugins, [g:_spacevim_root_dir . 'bundle/nvim-treesitter', + \ { + \ 'merged' : 0, + \ 'loadconf' : 1 , + \ 'do' : 'TSUpdate', + \ 'loadconf_before' : 1 + \ }]) return plugins endfunction diff --git a/bundle/nvim-treesitter/.editorconfig b/bundle/nvim-treesitter/.editorconfig new file mode 100644 index 000000000..00ea231bb --- /dev/null +++ b/bundle/nvim-treesitter/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +tab_width = 8 +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +[*.lua] +tab_width = 2 + +[*.py] +indent_size = 4 +tab_width = 4 + +[{Makefile,**/Makefile,runtime/doc/*.txt}] +indent_style = tab +indent_size = 8 diff --git a/bundle/nvim-treesitter/.github/CODEOWNERS b/bundle/nvim-treesitter/.github/CODEOWNERS new file mode 100644 index 000000000..8fcb7cd9e --- /dev/null +++ b/bundle/nvim-treesitter/.github/CODEOWNERS @@ -0,0 +1,7 @@ +/lua/nvim-treesitter/textobjects/ @theHamsta +/lua/nvim-treesitter/incremental_selection.lua @theHamsta + +/lua/nvim-treesitter/fold.lua @vigoux +/lua/nvim-treesitter/highlight.lua @vigoux + +/lua/nvim-treesitter/refactor/ @steelsojka diff --git a/bundle/nvim-treesitter/.github/FUNDING.yml b/bundle/nvim-treesitter/.github/FUNDING.yml new file mode 100644 index 000000000..d463c475f --- /dev/null +++ b/bundle/nvim-treesitter/.github/FUNDING.yml @@ -0,0 +1 @@ +open_collective: "nvim-treesitter" diff --git a/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/bug_report.yml b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..0b6c990a9 --- /dev/null +++ b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,58 @@ +name: Bug report +description: Create a report to help us improve +labels: [ bug ] + +body: + - type: markdown + attributes: + value: | + # Before reporting + Please do the following steps before reporting an issue. + + - I have updated my neovim version to latest _master_ + - I have updated my plugin to the latest version + - I have run `:TSUpdate` + - I have read the [troubleshooting section](https://github.com/nvim-treesitter/nvim-treesitter#troubleshooting) + + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + + - type: textarea + attributes: + label: To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + + - type: textarea + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + + - type: textarea + attributes: + label: Output of `:checkhealth nvim-treesitter` + render: markdown + validations: + required: true + + - type: textarea + attributes: + label: Output of `nvim --version` + render: text + validations: + required: true + + - type: textarea + attributes: + label: Additional context + description: Add any context about the problem here. diff --git a/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/feature_request.md b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..11fc491ef --- /dev/null +++ b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: enhancement +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/highlighting_issue.yml b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/highlighting_issue.yml new file mode 100644 index 000000000..6667bd33f --- /dev/null +++ b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/highlighting_issue.yml @@ -0,0 +1,98 @@ +name: Highlighting issue +description: Missing or incorrect highlights or you want to change the way something is highlighted +labels: [ highlights ] + +body: + - type: markdown + attributes: + value: | + # Before reporting + Please perform the following steps before reporting an issue. + - I have updated my neovim version to latest _master_. + - I have updated my plugin to the latest version. + - I have run `:TSUpdate`. + - I have inspected the syntax tree using https://github.com/nvim-treesitter/playground and made sure + that no `ERROR` nodes are in the syntax tree. nvim-treesitter can not guarantee correct highlighting in the + presence of `ERROR`s -- in this case, please report the bug directly at corresponding parser's repository. (You can find all repository URLs in [README.md](https://github.com/nvim-treesitter/nvim-treesitter#supported-languages).) + - I have used `:TSHighlightCapturesUnderCursor` from https://github.com/nvim-treesitter/playground to inspect which highlight groups Neovim is using and that legacy syntax highlighting is not interfering (i.e., what you are observing is actual tree-sitter highlighting). + + - type: textarea + attributes: + label: Describe the highlighting problem + description: A clear and concise description of what should be highlighted in a different way. + validations: + required: true + + - type: textarea + attributes: + label: Example snippet that causes the problem + description: Please provide an example snippet in plain text that causes the problem. + validations: + required: true + + - type: textarea + attributes: + label: Tree-sitter parsing result + description: | + Please provide the output of `:TSPlaygroundToggle` from https://github.com/nvim-treesitter/playground + (screenshot or plain text) with the following options enabled (pressing the key): + - `I` (name of the parsed language) + - `t` (toggle injected languages) + - `a` (show anonymous nodes) + placeholder: | + This should look somehow like this: + ``` + preproc_ifdef [0, 0] - [4, 6] cpp + "#ifdef" [0, 0] - [0, 6] cpp + name: identifier [0, 7] - [0, 17] cpp + preproc_def [1, 0] - [2, 0] cpp + "#define" [1, 0] - [1, 7] cpp + name: identifier [1, 8] - [1, 16] cpp + value: preproc_arg [1, 16] - [1, 27] cpp + "\n" [1, 27] - [2, 0] cpp + alternative: preproc_else [2, 0] - [4, 0] cpp + "#else" [2, 0] - [2, 5] cpp + preproc_def [3, 0] - [4, 0] cpp + "#define" [3, 0] - [3, 7] cpp + name: identifier [3, 8] - [3, 16] cpp + value: preproc_arg [3, 16] - [3, 29] cpp + ``` + validations: + required: true + + - type: textarea + attributes: + label: Example screenshot + description: | + Please provide a screenshot of the current highlighting. Please also tell us the `:h colorscheme` you are using + and how to install it. If applicable, you can also upload a screenshot with the contents of + `:TSHighlightCapturesUnderCursor'. + validations: + required: true + + - type: textarea + attributes: + label: Expected behavior + description: | + A clear and concise description of what you expect to be changed. You can provide screenshot of + other editors or traditional Vim highlighting that don't show this problem or show a screenshot how + nvim-treesitter highlighting would look like when a problematic query would be removed/altered. + + - type: textarea + attributes: + label: Output of `:checkhealth nvim-treesitter` + render: markdown + validations: + required: true + + - type: textarea + attributes: + label: Output of `nvim --version` + render: text + validations: + required: true + + - type: textarea + attributes: + label: Additional context + description: Add any context about the problem here. diff --git a/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/language-request.md b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/language-request.md new file mode 100644 index 000000000..6182af225 --- /dev/null +++ b/bundle/nvim-treesitter/.github/ISSUE_TEMPLATE/language-request.md @@ -0,0 +1,12 @@ +--- +name: Language request +about: Request for a new language to be supported +title: '' +labels: enhancement, good first issue, help wanted +assignees: '' + +--- + +**Language information** + +Please paste any useful information here ! diff --git a/bundle/nvim-treesitter/.github/mergify.yml b/bundle/nvim-treesitter/.github/mergify.yml new file mode 100644 index 000000000..b95a074a5 --- /dev/null +++ b/bundle/nvim-treesitter/.github/mergify.yml @@ -0,0 +1,37 @@ +pull_request_rules: + - name: Merge lockfile updates + conditions: + - "title=Update lockfile.json" + actions: + review: + type: APPROVE + message: Automatically approving lockfile updates + merge: + method: merge + + - name: Prepare for merge + conditions: + - and: + - "-draft" + - "#approved-reviews-by=1" + - "#review-requested=0" + actions: + comment: + message: | + This PR is ready to be merged, and will be in 1 day if nothing happens before. + If you want other people to review your PR, request their reviews. + If you don't want this PR to be merged now, mark it as a Draft. + + - name: Merge on approval + conditions: + - and: + - or: + - "#approved-reviews-by>=2" + - and: + - "#approved-reviews-by=1" + - "updated-at>=1 day ago" + - "-draft" + - "#review-requested=0" + actions: + merge: + method: rebase diff --git a/bundle/nvim-treesitter/.github/workflows/lint.yml b/bundle/nvim-treesitter/.github/workflows/lint.yml new file mode 100644 index 000000000..9b75ab6b0 --- /dev/null +++ b/bundle/nvim-treesitter/.github/workflows/lint.yml @@ -0,0 +1,33 @@ +name: Linting and style checking + +on: + push: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + luacheck: + name: Luacheck + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Prepare + run: | + sudo apt-get update + sudo apt-get install luarocks -y + sudo luarocks install luacheck + + - name: Run Luacheck + run: luacheck . + + stylua: + name: StyLua + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Lint with stylua + uses: JohnnyMorganz/stylua-action@1.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --check . diff --git a/bundle/nvim-treesitter/.github/workflows/test-queries.yml b/bundle/nvim-treesitter/.github/workflows/test-queries.yml new file mode 100644 index 000000000..d4ec33052 --- /dev/null +++ b/bundle/nvim-treesitter/.github/workflows/test-queries.yml @@ -0,0 +1,92 @@ +name: Test queries + +on: + push: + branches: + - 'master' + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + branches: + - 'master' + +# Cancel any in-progress CI runs for a PR if it is updated +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +defaults: + run: + shell: bash + +jobs: + check_compilation: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-2022, macos-latest] + cc: [ gcc, clang ] + nvim_tag: [ stable ] + exclude: + - os: ubuntu-latest + cc: clang + nvim_tag: stable + + - os: macos-latest + cc: gcc + nvim_tag: stable + + - os: windows-2022 + cc: clang + nvim_tag: stable + + include: + - os: windows-2022 + cc: cl + nvim_tag: stable + + - os: ubuntu-latest + cc: gcc + nvim_tag: nightly + + name: Parser compilation + runs-on: ${{ matrix.os }} + env: + CC: ${{ matrix.cc }} + NVIM: ${{ matrix.os == 'windows-2022' && 'Neovim\\bin\\nvim.exe' || 'nvim' }} + steps: + - uses: actions/checkout@v2 + - uses: ilammy/msvc-dev-cmd@v1 + - uses: actions/setup-node@v2 + + - name: Install and prepare Neovim + env: + NVIM_TAG: ${{ matrix.nvim_tag }} + TREE_SITTER_CLI_TAG: v0.20.4 + run: | + bash ./scripts/ci-install-${{ matrix.os }}.sh + + - name: Setup Parsers Cache + id: parsers-cache + uses: actions/cache@v2 + with: + path: | + ./parser/ + ~/AppData/Local/nvim/pack/nvim-treesitter/start/nvim-treesitter/parser/ + key: ${{ matrix.os }}-${{ matrix.cc }}-${{ matrix.nvim_tag }}-parsers-v1-${{ hashFiles('./lockfile.json', './lua/nvim-treesitter/parsers.lua', './lua/nvim-treesitter/install.lua', './lua/nvim-treesitter/shell_selectors.lua') }} + + - name: Compile parsers + run: $NVIM --headless -c "lua require'nvim-treesitter.install'.prefer_git=false" -c "TSInstallSync all" -c "q" + + - name: Post compile Windows + if: matrix.os == 'windows-2022' + run: cp -r ~/AppData/Local/nvim/pack/nvim-treesitter/start/nvim-treesitter/parser/* parser + + # NOTE: this is a temporary workaround to skip swift tests on ubuntu + # stable and should be removed once neovim 0.7 is released. + - if: matrix.os == 'ubuntu-latest' && matrix.nvim_tag == 'stable' + run: echo "SKIP_SWIFT_CHECK=TRUE" >> $GITHUB_ENV + + - name: Check query files + env: + SKIP_SWIFT_CHECK: ${{ env.SKIP_SWIFT_CHECK }} + run: $NVIM --headless -c "luafile ./scripts/check-queries.lua" -c "q" diff --git a/bundle/nvim-treesitter/.github/workflows/tests.yml b/bundle/nvim-treesitter/.github/workflows/tests.yml new file mode 100644 index 000000000..1b445573e --- /dev/null +++ b/bundle/nvim-treesitter/.github/workflows/tests.yml @@ -0,0 +1,63 @@ +name: Tests + +on: + push: + branches: + - 'master' + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + branches: + - 'master' + +# Cancel any in-progress CI runs for a PR if it is updated +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +jobs: + check_compilation: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + cc: [ gcc ] + + name: Run tests + runs-on: ${{ matrix.os }} + env: + CC: ${{ matrix.cc }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + + - name: Test Dependencies + run: | + mkdir -p ~/.local/share/nvim/site/pack/plenary.nvim/start + cd ~/.local/share/nvim/site/pack/plenary.nvim/start + git clone https://github.com/nvim-lua/plenary.nvim + curl -L https://github.com/theHamsta/highlight-assertions/releases/download/v0.1.5/highlight-assertions_v0.1.5_x86_64-unknown-linux-gnu.tar.gz | tar -xz + cp highlight-assertions /usr/local/bin + + - name: Install and prepare Neovim + env: + NVIM_TAG: stable + TREE_SITTER_CLI_TAG: v0.20.4 + run: | + bash ./scripts/ci-install-${{ matrix.os }}.sh + + - name: Setup Parsers Cache + id: parsers-cache + uses: actions/cache@v2 + with: + path: | + ./parser/ + ~/AppData/Local/nvim/pack/nvim-treesitter/start/nvim-treesitter/parser/ + key: ${{ matrix.os }}-${{ matrix.cc }}-parsers-v1-${{ hashFiles('./lockfile.json', './lua/nvim-treesitter/parsers.lua', './lua/nvim-treesitter/install.lua', './lua/nvim-treesitter/shell_selectors.lua') }} + + - name: Compile parsers Unix like + if: ${{ matrix.os != 'windows-latest' && steps.parsers-cache.outputs.cache-hit != 'true' }} + run: | + nvim --headless -c "TSInstallSync all" -c "q" + + - name: Tests + run: PATH=/usr/local/bin:$PATH ./scripts/run_tests.sh diff --git a/bundle/nvim-treesitter/.github/workflows/update-lockfile.yml b/bundle/nvim-treesitter/.github/workflows/update-lockfile.yml new file mode 100644 index 000000000..47e55ba42 --- /dev/null +++ b/bundle/nvim-treesitter/.github/workflows/update-lockfile.yml @@ -0,0 +1,55 @@ +name: Update lockfile + +on: + schedule: + - cron: '30 6 * * *' + push: + branches: + - master + +jobs: + update-lockfile: + name: Update lockfile + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: master + + - name: Prepare + env: + NVIM_TAG: stable + run: | + wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 + mv ./jq-linux64 /tmp/jq + chmod +x /tmp/jq + wget https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim.appimage + chmod u+x nvim.appimage + mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start + ln -s $(pwd) ~/.local/share/nvim/site/pack/nvim-treesitter/start + + - name: Update parsers + env: + SKIP_LOCKFILE_UPDATE_FOR_LANGS: verilog,gleam,nix + run: | + ./nvim.appimage --headless -c "luafile ./scripts/write-lockfile.lua" -c "q" + # Pretty print + cp lockfile.json /tmp/lockfile.json + cat /tmp/lockfile.json | /tmp/jq --sort-keys > lockfile.json + + - name: Commit changes + run: | + git config user.name "GitHub" + git config user.email "noreply@github.com" + git add lockfile.json + git commit -m "Update lockfile.json" || echo 'No commit necessary!' + git clean -xf + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update lockfile.json + title: Update lockfile.json + branch: update-lockfile-pr + base: ${{ github.head_ref }} + draft: true diff --git a/bundle/nvim-treesitter/.github/workflows/update-readme.yml b/bundle/nvim-treesitter/.github/workflows/update-readme.yml new file mode 100644 index 000000000..dba7ba260 --- /dev/null +++ b/bundle/nvim-treesitter/.github/workflows/update-readme.yml @@ -0,0 +1,40 @@ +name: Update README + +on: + push: + branches: + - master + +jobs: + update-readme: + name: Update README + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Prepare + env: + NVIM_TAG: stable + run: | + wget https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim.appimage + chmod u+x nvim.appimage + mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start + ln -s $(pwd) ~/.local/share/nvim/site/pack/nvim-treesitter/start + + - name: Check README + run: | + git config user.email "actions@github" + git config user.name "Github Actions" + ./nvim.appimage --headless -c "luafile ./scripts/update-readme.lua" -c "q" || echo "Needs update" + git add README.md + git commit -m "Update README" || echo 'No commit necessary!' + git clean -xf + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v3 + with: + commit-message: Update README + title: Update README + branch: update-readme-pr + base: ${{ github.head_ref }} + draft: true diff --git a/bundle/nvim-treesitter/.gitignore b/bundle/nvim-treesitter/.gitignore new file mode 100644 index 000000000..6e01dc63c --- /dev/null +++ b/bundle/nvim-treesitter/.gitignore @@ -0,0 +1,4 @@ +doc/tags +.luacheckcache +/tags +nvim.appimage diff --git a/bundle/nvim-treesitter/.luacheckrc b/bundle/nvim-treesitter/.luacheckrc new file mode 100644 index 000000000..b0ee19d8a --- /dev/null +++ b/bundle/nvim-treesitter/.luacheckrc @@ -0,0 +1,21 @@ +-- Rerun tests only if their modification time changed. +cache = true +codes = true + +exclude_files = { + "tests/indent/lua/" +} + +-- Glorious list of warnings: https://luacheck.readthedocs.io/en/stable/warnings.html +ignore = { + "212", -- Unused argument, In the case of callback function, _arg_name is easier to understand than _, so this option is set to off. + "411", -- Redefining a local variable. + "412", -- Redefining an argument. + "422", -- Shadowing an argument + "122" -- Indirectly setting a readonly global +} + +-- Global objects defined by the C code +read_globals = { + "vim", +} diff --git a/bundle/nvim-treesitter/.stylua.toml b/bundle/nvim-treesitter/.stylua.toml new file mode 100644 index 000000000..ecb6dca5a --- /dev/null +++ b/bundle/nvim-treesitter/.stylua.toml @@ -0,0 +1,6 @@ +column_width = 120 +line_endings = "Unix" +indent_type = "Spaces" +indent_width = 2 +quote_style = "AutoPreferDouble" +call_parentheses = "None" diff --git a/bundle/nvim-treesitter/.styluaignore b/bundle/nvim-treesitter/.styluaignore new file mode 100644 index 000000000..2b6c4c6ab --- /dev/null +++ b/bundle/nvim-treesitter/.styluaignore @@ -0,0 +1 @@ +tests/indent/lua/ diff --git a/bundle/nvim-treesitter/CONTRIBUTING.md b/bundle/nvim-treesitter/CONTRIBUTING.md new file mode 100644 index 000000000..b3c51cee5 --- /dev/null +++ b/bundle/nvim-treesitter/CONTRIBUTING.md @@ -0,0 +1,299 @@ +# Contributing to `nvim-treesitter` + +First of all, thank you very much for contributing to `nvim-treesitter`. + +If you haven't already, you should really come and reach out to us on our [Zulip] +server, so we can help you with any question you might have! +There is also a [Matrix channel] for tree-sitter support in Neovim. + +As you know, `nvim-treesitter` is roughly split in two parts: + +- Parser configurations : for various things like `locals`, `highlights` +- What we like to call *modules* : tiny lua modules that provide a given feature, based on parser configurations + +Depending on which part of the plugin you want to contribute to, please read the appropriate section. + +## Style Checks and Tests + +We haven't implemented any functional tests yet. Feel free to contribute. +However, we check code style with `luacheck` and `stylua`! +Please install luacheck and activate our `pre-push` hook to automatically check style before +every push: + +```bash +luarocks install luacheck +cargo install stylua +ln -s ../../scripts/pre-push .git/hooks/pre-push +``` + +## Adding new modules + +If you want to see a new functionality added to `nvim-treesitter` feel free to first open an issue +to that we can track our solution! +Thus far, there is basically two types of modules: + +- Little modules (like `incremental selection`) that are built in `nvim-treesitter`, we call them + `builtin modules`. +- Bigger modules (like `completion-treesitter`, or `nvim-tree-docs`), or modules that integrate + with other plugins, that we call `remote modules`. + +In any case, you can build your own module ! To help you started in the process, we have a template +repository designed to build new modules [here](https://github.com/nvim-treesitter/module-template). +Feel free to use it, and contact us over on our +[Zulip] or on the "Neovim tree-sitter" [Matrix channel]. + +## Parser configurations + +Contributing to parser configurations is basically modifying one of the `queries/*/*.scm`. +Each of these `scheme` files contains a *tree-sitter query* for a given purpose. +Before going any further, we highly suggest that you [read more about tree-sitter queries](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries). + +Each query has an appropriate name, which is then used by modules to extract data from the syntax tree. +For now these are the types of queries used by `nvim-treesitter`: + +- `highlights.scm`: used for syntax highlighting, using the `highlight` module. +- `locals.scm`: used to extract keyword definitions, scopes, references, etc, using the `locals` module. +- `textobjects.scm`: used to define text objects. +- `folds.scm`: used to define folds. +- `injections.scm`: used to define injections. + +For these types there is a *norm* you will have to follow so that features work fine. +Here are some global advices : + +- If your language is listed [here](https://github.com/nvim-treesitter/nvim-treesitter#supported-languages), + you can install the [playground plugin](https://github.com/nvim-treesitter/playground). +- If your language is listed [here](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries), + you can debug and experiment with your queries there. +- If not, you should consider installing the [tree-sitter cli](https://github.com/tree-sitter/tree-sitter/tree/master/cli), + you should then be able to open a local playground using `tree-sitter build-wasm && tree-sitter web-ui` within the + parsers repo. +- Examples of queries can be found in [queries/](queries/) +- Matches in the bottom will override queries that are above of them. + +If your language is an extension of a language (TypeScript is an extension of JavaScript for +example), you can include the queries from your base language by adding the following _as the first +line of your file_. + +```query +; inherits: lang1,(optionallang) +``` + +If you want to inherit a language, but don't want the languages inheriting from yours to inherit it, +you can mark the language as optional (by putting it between parenthesis). + +### Highlights + +As languages differ quite a lot, here is a set of captures available to you when building a `highlights.scm` query. +One important thing to note is that many of these capture groups are not supported by `neovim` for now, and will not have any +effect on highlighting. We will work on improving highlighting in the near future though. + +#### Misc + +``` +@comment +@debug +@error for error `ERROR` nodes. +@none to disable completely the highlight +@preproc +@punctuation.delimiter for `;` `.` `,` +@punctuation.bracket for `()` or `{}` +@punctuation.special for symbols with special meaning like `{}` in string interpolation. +``` + +#### Constants + +``` +@constant +@constant.builtin +@constant.macro +@string +@string.regex +@string.escape +@string.special +@character +@character.special +@number +@boolean +@float +``` + +#### Functions + +``` +@function +@function.builtin +@function.macro +@parameter + +@method +@field +@property + +@constructor +``` + +#### Keywords + +``` +@conditional (e.g. `if`, `else`) +@repeat (e.g. `for`, `while`) +@label for C/Lua-like labels +@keyword +@keyword.function (keyword to define a function, e.g. `func` in Go, `def` in Python) +@keyword.operator (for operators that are English words, e.g. `and`, `or`) +@keyword.return +@operator (for symbolic operators, e.g. `+`, `*`) +@exception (e.g. `throw`, `catch`) +@include keywords for including modules (e.g. import/from in Python) +@storageclass + +@type +@type.builtin +@type.definition +@type.qualifier +@namespace for identifiers referring to namespaces +@symbol for identifiers referring to symbols +@attribute for e.g. Python decorators +``` + +@conceal followed by `(#set! conceal "")` for captures that are not used for highlights but only for concealing. + +#### Variables + +``` +@variable +@variable.builtin +``` + +#### Text + +Mainly for markup languages. + +``` +@text +@text.strong +@text.emphasis +@text.underline +@text.strike +@text.title +@text.literal +@text.uri +@text.math (e.g. for LaTeX math environments) +@text.environment (e.g. for text environments of markup languages) +@text.environment.name (e.g. for the name/the string indicating the type of text environment) +@text.reference (for footnotes, text references, citations) + +@text.note +@text.warning +@text.danger + +@todo +``` + +#### Tags + +Used for xml-like tags + +``` +@tag +@tag.attribute +@tag.delimiter +``` + +#### Conceal + +@conceal followed by `(#set! conceal "")` for captures that are not used for highlights but only for concealing. + +### Locals + +``` +@definition for various definitions +@definition.constant +@definition.function +@definition.method +@definition.var +@definition.parameter +@definition.macro +@definition.type +@definition.field +@definition.enum +@definition.namespace for modules or C++ namespaces +@definition.import for imported names + +@definition.associated to determine the type of a variable +@definition.doc for documentation adjacent to a definition. E.g. + +@scope +@reference +@constructor +``` + + +#### Definition Scope + +You can set the scope of a definition by setting the `scope` property on the definition. + +For example, a javascript function declaration creates a scope. The function name is captured as the definition. +This means that the function definition would only be available WITHIN the scope of the function, which is not the case. +The definition can be used in the scope the function was defined in. + +```javascript +function doSomething() {} + +doSomething(); // Should point to the declaration as the definition +``` + +```query +(function_declaration + ((identifier) @definition.var) + (#set! "definition.var.scope" "parent")) +``` + +Possible scope values are: + +- `parent`: The definition is valid in the containing scope and one more scope above that scope +- `global`: The definition is valid in the root scope +- `local`: The definition is valid in the containing scope. This is the default behavior + +### Folds + +You can define folds for a given language by adding a `folds.scm` query : + +``` +@fold +``` + +If the `fold.scm` query is not present, this will fallback to the `@scope` captures in the `locals` +query. + +### Injections + +Some captures are related to language injection (like markdown code blocks). They are used in `injections.scm`. +You can directly use the name of the language that you want to inject (e.g. `@html` to inject html). + +If you want to dynamically detect the language (e.g. for Markdown blocks) use the `@language` to capture +the node describing the language and `@content` to describe the injection region. + +``` +@{language} ; e.g. @html to describe a html region + +@language ; dynamic detection of the injection language (i.e. the text of the captured node describes the language). +@content ; region for the dynamically detected language. +@combined ; This will combine all matches of a pattern as one single block of content. +``` + +### Indents + +``` +@indent ; Indent children when matching this node +@indent_end ; Marks the end of indented block +@aligned_indent ; Behaves like python aligned/hanging indent +@dedent ; Dedent children when matching this node +@branch ; Dedent itself when matching this node +@ignore ; Do not indent in this node +@auto ; Behaves like 'autoindent' buffer option +@zero_indent ; Sets this node at position 0 (no indent) +``` + +[Zulip]: https://nvim-treesitter.zulipchat.com +[Matrix channel]: https://matrix.to/#/#nvim-treesitter:matrix.org diff --git a/bundle/nvim-treesitter/LICENSE b/bundle/nvim-treesitter/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/bundle/nvim-treesitter/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/bundle/nvim-treesitter/README.md b/bundle/nvim-treesitter/README.md new file mode 100644 index 000000000..df159b796 --- /dev/null +++ b/bundle/nvim-treesitter/README.md @@ -0,0 +1,569 @@ +
+

nvim-treesitter

+

+ + Zulip Chat + + + Linting and Style + + + Syntax files + +

+
+ +
+

+ Logo +

+

+ Treesitter + configurations and abstraction layer for + Neovim. +

+

+ + Logo by @steelsojka + +

+
+ +The goal of `nvim-treesitter` is both to provide a simple and easy way to use the interface for [tree-sitter](https://github.com/tree-sitter/tree-sitter) in Neovim and to provide some basic functionality such as highlighting based on it: + +![cpp example](assets/example-cpp.png) + +Traditional highlighting (left) vs Treesitter-based highlighting (right). +More examples can be found in [our gallery](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Gallery). + +**Warning: Treesitter and nvim-treesitter highlighting are an experimental feature of Neovim. +Please consider the experience with this plug-in as experimental until Tree-Sitter support in Neovim is stable! +We recommend using the nightly builds of Neovim if possible. +You can find the current roadmap [here](https://github.com/nvim-treesitter/nvim-treesitter/projects/1). +The roadmap and all features of this plugin are open to change, and any suggestion will be highly appreciated!** + +Nvim-treesitter is based on three interlocking features: [**language parsers**](#language-parsers), [**queries**](#adding-queries), and [**modules**](#available-modules), where *modules* provide features – e.g., highlighting – based on *queries* for syntax objects extracted from a given buffer by *language parsers*. +Users will generally only need to interact with parsers and modules as explained in the next section. +For more detailed information on setting these up, see ["Advanced setup"](#advanced-setup). + +--- + +### Table of contents + +* [Quickstart](#quickstart) +* [Supported languages](#supported-languages) +* [Available modules](#available-modules) +* [Advanced setup](#advanced-setup) +* [Extra features](#extra-features) +* [Troubleshooting](#troubleshooting) + +--- + +# Quickstart + +## Requirements + +- Neovim latest stable version or [nightly](https://github.com/neovim/neovim#install-from-source) +- `tar` and `curl` in your path (or alternatively `git`) +- A C compiler in your path and libstdc++ installed ([Windows users please read this!](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Windows-support)). + +## Installation + +You can install `nvim-treesitter` with your favorite package manager (or using the native `package` feature of vim, see `:h packages`). + +**NOTE: This plugin is only guaranteed to work with specific versions of language parsers** (as specified in the `lockfile.json`). **When upgrading the plugin, you must make sure that all installed parsers are updated to the latest version** via `:TSUpdate`. +It is strongly recommended to automate this; e.g., if you are using [vim-plug](https://github.com/junegunn/vim-plug), put this in your `init.vim` file: + +```vim +Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} +``` + +For other plugin managers such as `packer.nvim`, see this [Installation page from the wiki](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Installation) (Note that this page is community maintained). + +## Language parsers + +Treesitter uses a different _parser_ for every language, which needs to be generated via `tree-sitter-cli` from a `grammar.js` file, then compiled to a `.so` library that needs to be placed in neovim's `runtimepath` (typically under `parser/{language}.so`). +To simplify this, `nvim-treesitter` provides commands to automate this process. +If the language is already [supported by `nvim-treesitter`](#supported-languages), you can install it with +```vim +:TSInstall +``` +This command supports tab expansion. +You can also get a list of all available languages and their installation status with `:TSInstallInfo`. +Parsers not on this list can be added manually by following the steps described under ["Adding parsers"](#adding-parsers) below. + +To make sure a parser is at the latest compatible version (as specified in `nvim-treesitter`'s `lockfile.json`), use `:TSUpdate {language}`. To update all parsers unconditionally, use `:TSUpdate all` or just `:TSUpdate`. + +## Modules + +Each module provides a distinct tree-sitter-based feature such as [highlighting](#highlight), [indentation](#indentation), or [folding](#folding); see [`:h nvim-treesitter-modules`](doc/nvim-treesitter.txt) or ["Available modules"](#available-modules) below for a list of modules and their options. + +Following examples assume that you are configuring neovim with lua. If you are using vimscript, see `:help lua-heredoc`. +All modules are disabled by default and need to be activated explicitly in your `init.lua`, e.g., via + +```lua +require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" + ensure_installed = { "c", "lua", "rust" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- List of parsers to ignore installing (for "all") + ignore_install = { "javascript" }, + + highlight = { + -- `false` will disable the whole extension + enable = true, + + -- NOTE: these are the names of the parsers and not the filetype. (for example if you want to + disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is + the name of the parser) + -- list of language that will be disabled + disable = { "c", "rust" }, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} +``` + +Each module can also be enabled or disabled interactively through the following commands: + +```vim +:TSBufEnable {module} " enable module on current buffer +:TSBufDisable {module} " disable module on current buffer +:TSEnable {module} [{ft}] " enable module on every buffer. If filetype is specified, enable only for this filetype. +:TSDisable {module} [{ft}] " disable module on every buffer. If filetype is specified, disable only for this filetype. +:TSModuleInfo [{module}] " list information about modules state for each filetype +``` + +Check [`:h nvim-treesitter-commands`](doc/nvim-treesitter.txt) for a list of all available commands. +It may be necessary to reload the buffer (e.g., via `:e`) after enabling a module interactively. + +# Supported languages + +For `nvim-treesitter` to support a specific feature for a specific language requires both a parser for that language and an appropriate language-specific query file for that feature. + +The following is a list of languages for which a parser can be installed through `:TSInstall`; a checked box means that `nvim-treesitter` also contains queries at least for the `highlight` module. + +Experimental parsers are parsers that have a maintainer but are not stable enough for +daily use yet. + +We are looking for maintainers to add more parsers and to write query files for their languages. Check our [tracking issue](https://github.com/nvim-treesitter/nvim-treesitter/issues/2282) for open language requests. + + + +- [x] [astro](https://github.com/virchau13/tree-sitter-astro) (maintained by @virchau13) +- [x] [bash](https://github.com/tree-sitter/tree-sitter-bash) (maintained by @TravonteD) +- [x] [beancount](https://github.com/polarmutex/tree-sitter-beancount) (maintained by @polarmutex) +- [x] [bibtex](https://github.com/latex-lsp/tree-sitter-bibtex) (maintained by @theHamsta, @clason) +- [x] [c](https://github.com/tree-sitter/tree-sitter-c) (maintained by @vigoux) +- [x] [c_sharp](https://github.com/tree-sitter/tree-sitter-c-sharp) (maintained by @Luxed) +- [x] [clojure](https://github.com/sogaiu/tree-sitter-clojure) (maintained by @sogaiu) +- [x] [cmake](https://github.com/uyha/tree-sitter-cmake) (maintained by @uyha) +- [x] [comment](https://github.com/stsewd/tree-sitter-comment) (maintained by @stsewd) +- [x] [commonlisp](https://github.com/theHamsta/tree-sitter-commonlisp) (maintained by @theHamsta) +- [x] [cooklang](https://github.com/addcninblue/tree-sitter-cooklang) (maintained by @addcninblue) +- [x] [cpp](https://github.com/tree-sitter/tree-sitter-cpp) (maintained by @theHamsta) +- [x] [css](https://github.com/tree-sitter/tree-sitter-css) (maintained by @TravonteD) +- [x] [cuda](https://github.com/theHamsta/tree-sitter-cuda) (maintained by @theHamsta) +- [x] [d](https://github.com/CyberShadow/tree-sitter-d) (experimental, maintained by @nawordar) +- [x] [dart](https://github.com/UserNobody14/tree-sitter-dart) (maintained by @Akin909) +- [x] [devicetree](https://github.com/joelspadin/tree-sitter-devicetree) (maintained by @jedrzejboczar) +- [x] [dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile) (maintained by @camdencheek) +- [x] [dot](https://github.com/rydesun/tree-sitter-dot) (maintained by @rydesun) +- [x] [eex](https://github.com/connorlay/tree-sitter-eex) (maintained by @connorlay) +- [x] [elixir](https://github.com/elixir-lang/tree-sitter-elixir) (maintained by @jonatanklosko, @connorlay) +- [ ] [elm](https://github.com/elm-tooling/tree-sitter-elm) +- [x] [elvish](https://github.com/ckafi/tree-sitter-elvish) (maintained by @ckafi) +- [x] [erlang](https://github.com/AbstractMachinesLab/tree-sitter-erlang) (maintained by @ostera) +- [x] [fennel](https://github.com/travonted/tree-sitter-fennel) (maintained by @TravonteD) +- [x] [fish](https://github.com/ram02z/tree-sitter-fish) (maintained by @ram02z) +- [x] [foam](https://github.com/FoamScience/tree-sitter-foam) (experimental, maintained by @FoamScience) +- [ ] [fortran](https://github.com/stadelmanma/tree-sitter-fortran) +- [x] [fusion](https://gitlab.com/jirgn/tree-sitter-fusion.git) (maintained by @jirgn) +- [x] [Godot (gdscript)](https://github.com/PrestonKnopp/tree-sitter-gdscript) (maintained by @Shatur95) +- [x] [gleam](https://github.com/J3RN/tree-sitter-gleam) (maintained by @connorlay) +- [x] [Glimmer and Ember](https://github.com/alexlafroscia/tree-sitter-glimmer) (maintained by @alexlafroscia) +- [x] [glsl](https://github.com/theHamsta/tree-sitter-glsl) (maintained by @theHamsta) +- [x] [go](https://github.com/tree-sitter/tree-sitter-go) (maintained by @theHamsta, @WinWisely268) +- [x] [Godot Resources (gdresource)](https://github.com/PrestonKnopp/tree-sitter-godot-resource) (maintained by @pierpo) +- [x] [gomod](https://github.com/camdencheek/tree-sitter-go-mod) (maintained by @camdencheek) +- [x] [gowork](https://github.com/omertuc/tree-sitter-go-work) (maintained by @omertuc) +- [x] [graphql](https://github.com/bkegley/tree-sitter-graphql) (maintained by @bkegley) +- [ ] [hack](https://github.com/slackhq/tree-sitter-hack) +- [ ] [haskell](https://github.com/tree-sitter/tree-sitter-haskell) +- [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] [help](https://github.com/vigoux/tree-sitter-vimdoc) (experimental, maintained by @vigoux) +- [x] [hjson](https://github.com/winston0410/tree-sitter-hjson) (maintained by @winston0410) +- [x] [hocon](https://github.com/antosha417/tree-sitter-hocon) (maintained by @antosha417) +- [x] [html](https://github.com/tree-sitter/tree-sitter-html) (maintained by @TravonteD) +- [x] [http](https://github.com/NTBBloodbath/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) +- [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) +- [x] [JSON with comments](https://gitlab.com/WhyNotHugo/tree-sitter-jsonc.git) (maintained by @WhyNotHugo) +- [x] [julia](https://github.com/tree-sitter/tree-sitter-julia) (maintained by @mroavi, @theHamsta) +- [x] [kotlin](https://github.com/fwcd/tree-sitter-kotlin) (maintained by @SalBakraa) +- [x] [lalrpop](https://github.com/traxys/tree-sitter-lalrpop) (maintained by @traxys) +- [x] [latex](https://github.com/latex-lsp/tree-sitter-latex) (maintained by @theHamsta, @clason) +- [x] [ledger](https://github.com/cbarrete/tree-sitter-ledger) (maintained by @cbarrete) +- [x] [llvm](https://github.com/benwilliamgraham/tree-sitter-llvm) (maintained by @benwilliamgraham) +- [x] [lua](https://github.com/MunifTanjim/tree-sitter-lua) (maintained by @muniftanjim) +- [x] [make](https://github.com/alemuller/tree-sitter-make) (maintained by @lewis6991) +- [ ] [markdown](https://github.com/MDeiml/tree-sitter-markdown) +- [x] [ninja](https://github.com/alemuller/tree-sitter-ninja) (maintained by @alemuller) +- [x] [nix](https://github.com/cstrahan/tree-sitter-nix) (maintained by @leo60228) +- [x] [norg](https://github.com/nvim-neorg/tree-sitter-norg) (maintained by @JoeyGrajciar, @vhyrro, @mrossinek) +- [x] [ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu) +- [x] [ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu) +- [x] [ocamllex](https://github.com/atom-ocaml/tree-sitter-ocamllex) (maintained by @undu) +- [x] [pascal](https://github.com/Isopod/tree-sitter-pascal.git) (maintained by @isopod) +- [x] [perl](https://github.com/ganezdragon/tree-sitter-perl) (maintained by @ganezdragon) +- [x] [php](https://github.com/tree-sitter/tree-sitter-php) (maintained by @tk-shirasaka) +- [x] [phpdoc](https://github.com/claytonrcarter/tree-sitter-phpdoc) (experimental, maintained by @mikehaertl) +- [x] [pioasm](https://github.com/leo60228/tree-sitter-pioasm) (maintained by @leo60228) +- [x] [prisma](https://github.com/victorhqc/tree-sitter-prisma) (maintained by @elianiva) +- [x] [pug](https://github.com/zealot128/tree-sitter-pug) (maintained by @zealot128) +- [x] [python](https://github.com/tree-sitter/tree-sitter-python) (maintained by @stsewd, @theHamsta) +- [x] [ql](https://github.com/tree-sitter/tree-sitter-ql) (maintained by @pwntester) +- [x] [Tree-sitter query language](https://github.com/nvim-treesitter/tree-sitter-query) (maintained by @steelsojka) +- [x] [r](https://github.com/r-lib/tree-sitter-r) (maintained by @jimhester) +- [x] [rasi](https://github.com/Fymyte/tree-sitter-rasi) (maintained by @Fymyte) +- [x] [regex](https://github.com/tree-sitter/tree-sitter-regex) (maintained by @theHamsta) +- [x] [rego](https://github.com/FallenAngel97/tree-sitter-rego) (maintained by @FallenAngel97) +- [x] [rst](https://github.com/stsewd/tree-sitter-rst) (maintained by @stsewd) +- [x] [ruby](https://github.com/tree-sitter/tree-sitter-ruby) (maintained by @TravonteD) +- [x] [rust](https://github.com/tree-sitter/tree-sitter-rust) (maintained by @vigoux) +- [x] [scala](https://github.com/tree-sitter/tree-sitter-scala) (maintained by @stevanmilic) +- [x] [scheme](https://github.com/6cdh/tree-sitter-scheme) (maintained by @6cdh) +- [x] [scss](https://github.com/serenadeai/tree-sitter-scss) (maintained by @elianiva) +- [x] [slint](https://github.com/jrmoulton/tree-sitter-slint) (experimental, maintained by @jrmoulton) +- [x] [solidity](https://github.com/YongJieYongJie/tree-sitter-solidity) (maintained by @YongJieYongJie) +- [x] [sparql](https://github.com/BonaBeavis/tree-sitter-sparql) (maintained by @bonabeavis) +- [x] [supercollider](https://github.com/madskjeldgaard/tree-sitter-supercollider) (maintained by @madskjeldgaard) +- [x] [surface](https://github.com/connorlay/tree-sitter-surface) (maintained by @connorlay) +- [x] [svelte](https://github.com/Himujjal/tree-sitter-svelte) (maintained by @elianiva) +- [ ] [swift](https://github.com/alex-pinkus/tree-sitter-swift) +- [x] [teal](https://github.com/euclidianAce/tree-sitter-teal) (maintained by @euclidianAce) +- [x] [tlaplus](https://github.com/tlaplus-community/tree-sitter-tlaplus) (maintained by @ahelwer, @susliko) +- [x] [todotxt](https://github.com/arnarg/tree-sitter-todotxt.git) (experimental, maintained by @arnarg) +- [x] [toml](https://github.com/ikatyang/tree-sitter-toml) (maintained by @tk-shirasaka) +- [x] [tsx](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka) +- [x] [turtle](https://github.com/BonaBeavis/tree-sitter-turtle) (maintained by @bonabeavis) +- [x] [typescript](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka) +- [x] [vala](https://github.com/matbme/tree-sitter-vala) (maintained by @matbme) +- [x] [verilog](https://github.com/tree-sitter/tree-sitter-verilog) (experimental, maintained by @zegervdv) +- [x] [vim](https://github.com/vigoux/tree-sitter-viml) (maintained by @vigoux) +- [x] [vue](https://github.com/ikatyang/tree-sitter-vue) (maintained by @WhyNotHugo) +- [x] [wgsl](https://github.com/szebniok/tree-sitter-wgsl) (maintained by @szebniok) +- [x] [yaml](https://github.com/ikatyang/tree-sitter-yaml) (maintained by @stsewd) +- [x] [yang](https://github.com/Hubro/tree-sitter-yang) (maintained by @Hubro) +- [x] [zig](https://github.com/maxxnino/tree-sitter-zig) (maintained by @maxxnino) + + + +# Available modules + +Modules provide the top-level features of `nvim-treesitter`. +The following is a list of modules included in `nvim-treesitter` and their configuration via `init.lua` (where multiple modules can be combined in a single call to `setup`). +Note that not all modules work for all languages (depending on the queries available for them). +Additional modules can be provided as [external plugins](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Extra-modules-and-plugins). + +#### Highlight + +Consistent syntax highlighting. + +```lua +require'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} +``` + +You can add custom highlight captures with: + +```vim +lua < for installation instructions. +2. Run `tree-sitter generate` in this directory (followed by `tree-sitter test` for good measure). +3. Add the following snippet to your `init.lua`: + +```lua +local parser_config = require "nvim-treesitter.parsers".get_parser_configs() +parser_config.zimbu = { + install_info = { + url = "~/projects/tree-sitter-zimbu", -- local path or git repo + files = {"src/parser.c"}, + -- optional entries: + branch = "main", -- default branch in case of git repo if different from master + generate_requires_npm = false, -- if stand-alone parser without npm dependencies + requires_generate_from_grammar = false, -- if folder contains pre-generated src/parser.c + }, + filetype = "zu", -- if filetype does not match the parser name +} +``` + +If you wish to set a specific parser for a filetype, you should extend the `filetype_to_parsername` table: + +```lua +local ft_to_parser = require"nvim-treesitter.parsers".filetype_to_parsername +ft_to_parser.someft = "python" -- the someft filetype will use the python parser and queries. +``` + +4. Start `nvim` and `:TSInstall zimbu`. + +You can also skip step 2 and use `:TSInstallFromGrammar zimbu` to install directly from a `grammar.js` in the top-level directory specified by `url`. +Once the parser is installed, you can update it (from the latest revision of the `main` branch if `url` is a Github repository) with `:TSUpdate zimbu`. + +Note that neither `:TSInstall` nor `:TSInstallFromGrammar` copy query files from the grammar repository. +If you want your installed grammar to be useful, you must manually [add query files](#adding-queries) to your local nvim-treesitter installation. +Note also that module functionality is only triggered if your language's filetype is correctly identified. +If Neovim does not detect your language's filetype by default, you can use [Neovim's `vim.filetype.add()`](https://neovim.io/doc/user/lua.html#vim.filetype.add()) (0.7.0 and above) to add a custom detection rule. + +If you use a git repository for your parser and want to use a specific version, you can set the `revision` key +in the `install_info` table for you parser config. + +## Adding queries + +Queries are what `nvim-treesitter` uses to extract information from the syntax tree; +they are located in the `queries/{language}/*` runtime directories (see `:h rtp`), +like the `queries` folder of this plugin, e.g. `queries/{language}/{locals,highlights,textobjects}.scm`. +Other modules may require additional queries such as `folding.scm`. You can find a +list of all supported capture names in [CONTRIBUTING.md](https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md#parser-configurations). + +All queries found in the runtime directories will be combined. +By convention, if you want to write a query, use the `queries/` directory, +but if you want to extend a query use the `after/queries/` directory. + +If you want to completely override a query, you can use `:h set_query()`. +For example, to override the `injections` queries from `c` with your own: + +```lua +require("vim.treesitter.query").set_query("c", "injections", "(comment) @comment") +``` + +Note: when using `set_query`, all queries in the runtime directories will be ignored. + +## Adding modules + +If you wish you write your own module, you need to support + +- tree-sitter language detection support; +- attaching and detaching to buffers; +- all nvim-treesitter commands. + +At the top level, you can use the `define_modules` function to define one or more modules or module groups: + +```lua +require'nvim-treesitter'.define_modules { + my_cool_plugin = { + attach = function(bufnr, lang) + -- Do cool stuff here + end, + detach = function(bufnr) + -- Undo cool stuff here + end, + is_supported = function(lang) + -- Check if the language is supported + end + } +} +``` + +with the following properties: + +- `module_path` specifies a require path (string) that exports a module with an `attach` and `detach` function. This is not required if the functions are on this definition. +- `enable` determines if the module is enabled by default. This is usually overridden by the user. +- `disable` takes a list of languages that this module is disabled for. This is usually overridden by the user. +- `is_supported` takes a function that takes a language and determines if this module supports that language. +- `attach` takes a function that attaches to a buffer. This is required if `module_path` is not provided. +- `detach` takes a function that detaches from a buffer. This is required if `module_path` is not provided. + +# Extra features + +### Statusline indicator + +```vim +echo nvim_treesitter#statusline(90) " 90 can be any length +module->expression_statement->call->identifier +``` + +### Utilities + +You can get some utility functions with + +```lua +local ts_utils = require 'nvim-treesitter.ts_utils' +``` + +Check [`:h nvim-treesitter-utils`](doc/nvim-treesitter.txt) for more information. + +# Troubleshooting + +Before doing anything, make sure you have the latest version of this plugin and run `:checkhealth nvim_treesitter`. +It can also help to update the parsers via `:TSUpdate`. + +#### Feature `X` does not work for `{language}`... + +First, check the `health#nvim_treesitter#check` and the `health#treesitter#check` sections of `:checkhealth` for any warning. +If there is one, it's highly likely that this is the cause of the problem. + +Next check the `## Parser/Features` subsection of the `health#nvim_treesitter#check` section of `:checkhealth` to ensure the desired module is enabled for your language. +If not, you might be missing query files; see [Adding queries](#adding-queries). + +Finally, ensure Neovim is correctly identifying your language's filetype using the `:echo &filetype` command while one of your language's files is open in Neovim. +If not, add a short Vimscript file to nvim-treesitter's `ftdetect` runtime directory following [Neovim's documentation](https://neovim.io/doc/user/filetype.html#new-filetype) on filetype detection. +You can also quickly & temporarily set the filetype for a single buffer with the `:set filetype=langname` command to test whether it fixes the problem. + +If everything is okay, then it might be an actual error. +In that case, feel free to [open an issue here](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose). + +#### I get `module 'vim.treesitter.query' not found` + +Make sure you have the latest version of Neovim. + +#### I get `Error detected while processing .../plugin/nvim-treesitter.vim` every time I open Neovim + +This is probably due to a change in a parser's grammar or its queries. +Try updating the parser that you suspect has changed (`:TSUpdate {language}`) or all of them (`:TSUpdate`). +If the error persists after updating all parsers, +please [open an issue](https://github.com/nvim-treesitter/nvim-treesitter/issues/new/choose). + +#### I get `query error: invalid node type at position` + +This could be due a query file outside this plugin using outdated nodes, +or due to an outdated parser. + +- Make sure you have the parsers up to date with `:TSUpdate` +- Make sure you don't have more than one `parser` runtime directory. + You can execute this command `:echo nvim_get_runtime_file('parser', v:true)` to find all runtime directories. + If you get more than one path, remove the ones that are outside this plugin (`nvim-treesitter` directory), + so the correct version of the parser is used. + +#### I experience weird highlighting issues similar to [#78](https://github.com/nvim-treesitter/nvim-treesitter/issues/78) + +This is a well known issue, which arises when the tree and the buffer have gotten out of sync. +As this is an upstream issue, we don't have any definite fix. +To get around this, you can force reparsing the buffer with + +```vim +:write | edit | TSBufEnable highlight +``` + +This will save, restore and enable highlighting for the current buffer. + +#### I experience bugs when using `nvim-treesitter`'s `foldexpr` similar to [#194](https://github.com/nvim-treesitter/nvim-treesitter/issues/194) + +This might happen, and is known to happen, with `vim-clap`. +To avoid these kind of errors, please use `setlocal` instead of `set` for the respective filetypes. + +#### I run into errors like `module 'nvim-treesitter.configs' not found` at startup + +This is because of `rtp` management in `nvim`, adding `packadd +nvim-treesitter` should fix the issue. + +#### I want to use Git instead of curl for downloading the parsers + +In your Lua config: + +```lua +require("nvim-treesitter.install").prefer_git = true +``` + +#### I want to use a HTTP proxy for downloading the parsers + +You can either configure curl to use additional CLI arguments in your Lua config: +```lua +require("nvim-treesitter.install").command_extra_args = { + curl = { "--proxy", "" }, +} +``` +or you can configure git via `.gitconfig` and use git instead of curl + +```lua +require("nvim-treesitter.install").prefer_git = true +``` + +#### I want to use a mirror instead of "https://github.com/" + +In your Lua config: + +```lua +for _, config in pairs(require("nvim-treesitter.parsers").get_parser_configs()) do + config.install_info.url = config.install_info.url:gsub("https://github.com/", "something else") +end + +require'nvim-treesitter.configs'.setup { + -- + -- +} +``` diff --git a/bundle/nvim-treesitter/after/ftplugin/elixir.vim b/bundle/nvim-treesitter/after/ftplugin/elixir.vim new file mode 100644 index 000000000..463eea989 --- /dev/null +++ b/bundle/nvim-treesitter/after/ftplugin/elixir.vim @@ -0,0 +1 @@ +setlocal commentstring=#\ %s diff --git a/bundle/nvim-treesitter/after/ftplugin/graphql.vim b/bundle/nvim-treesitter/after/ftplugin/graphql.vim new file mode 100644 index 000000000..463eea989 --- /dev/null +++ b/bundle/nvim-treesitter/after/ftplugin/graphql.vim @@ -0,0 +1 @@ +setlocal commentstring=#\ %s diff --git a/bundle/nvim-treesitter/after/ftplugin/heex.vim b/bundle/nvim-treesitter/after/ftplugin/heex.vim new file mode 100644 index 000000000..1ec0d53e9 --- /dev/null +++ b/bundle/nvim-treesitter/after/ftplugin/heex.vim @@ -0,0 +1 @@ +setlocal commentstring=<%#\ %s\ %> diff --git a/bundle/nvim-treesitter/after/ftplugin/query.vim b/bundle/nvim-treesitter/after/ftplugin/query.vim new file mode 100644 index 000000000..a13b72624 --- /dev/null +++ b/bundle/nvim-treesitter/after/ftplugin/query.vim @@ -0,0 +1 @@ +setlocal commentstring=;\ %s diff --git a/bundle/nvim-treesitter/after/ftplugin/surface.vim b/bundle/nvim-treesitter/after/ftplugin/surface.vim new file mode 100644 index 000000000..7bbb073f5 --- /dev/null +++ b/bundle/nvim-treesitter/after/ftplugin/surface.vim @@ -0,0 +1 @@ +setlocal commentstring={!--\ %s\ --} diff --git a/bundle/nvim-treesitter/assets/example-cpp.png b/bundle/nvim-treesitter/assets/example-cpp.png new file mode 100644 index 0000000000000000000000000000000000000000..a35d1d3d50a4a52174f7ad3255b34889f96279ec GIT binary patch literal 874960 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%0D;|??4qY~K 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 z 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

    h>FPbH3eFNl5OJ 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%0DEL=}5edev1xc|8g-#YdOk{exJf%1GRFU_x> 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ȕ>qS+|5$ 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

      b)8IeN9r3Lu1;eH~1~_y*$OMj&)( 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 KS8~Vt+5Z6Z^z88f literal 0 HcmV?d00001 diff --git a/bundle/nvim-treesitter/assets/logo.png b/bundle/nvim-treesitter/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a60e536bcaf45d9612175d50ce817678bb23fb6a GIT binary patch literal 26664 zcmV)$K#sqOP)Mz2EPgbE~>%wOUQ;FbijYwbP;MR&~`q z_vHVvp~=a;?5bBqUUS{+te(E^@%O*=UAmCZwSDGC4*-Dm0*96XzypAi*>V7o^>#m< z&;I*A+^kL>&DQBB{6bJ?Z+vaM#Z4dCKK4YTuVp@|X&J;`f6?mHpZ~)b?6sR-AuQ&F z`1QZHv%LH1$DQ>TT{_)yRIvau5)I!w>o0=*_y7Gf>g3Ux<$d%K_7>mS~G ze5S{r%VbBb^i3bx{NH!{_13HVw~uda^!3aa$wptmnJ9Ag8-KO^^LIb%oOjVH^u!qW zLnr8Sd(DQ|+3PR5>TJhq-<$eDAqUzkpT66S7Y6r=UwcK{ZFfK0^1*+(x8ti14|M!! z_s;0+-}=92I?lOFPQ+?|^M|+mq;F%(MUB3e`J$#{km&1w z>;qjcfo$u(*jc^dYWy5G?fVeC4mLG1IOV-awtyNRo%&fkH8Tc@#62|g1-f||&HE_=uPk)4ay&E&dbuYc>iWJ~Ar zGks^T-uQ;r|MR6sWlwM4OvXGHNo(Hhh}C)1hd1BVx3OhoqpxYMG_MRIA~6xY_AS?U zetYY~vFqOX2Qxahr9GMc>(6`*+(-hKXs!Hk$(QLC0IvihmY52IWGx<&K%U|>R&kuf5>B)_?lJ4h$c0H8!L^V2_htfDr#QBbD_K*Undna9XH^tV(3tu)wut5;6&ly`JQY5A9p1#d3AN|6YW_<(C37UFy+^Foi>DJBv)wi)_eWR~zwlrr3 zv6ijvYx(pKznA`tPu``Kf05PRL!aBdtJgBH#=f2y7AV{_w;ROS=;DKoDI#1 zL83Rj^EcZ+f7g!4g_penEDOAS+rm48t9|TEZ~vf(#9nZm}uDb3i5BuV0}fBMg&r9C~D`+BaC6S0=ucO!f_w*lpo{gJJmpoUNKwMz>`OUJZq5NFHf@32>%7gzZ# z$hNNVbCnq-X%=2Xb^@&SZa!Be)|zAAZ5`3G44L-_4$%v8+Xkdm zWfJ;6O?s3@sPp?L`_1@mpeDyb8^%Jz-XA^%;D$~x8k1Iev_lNpi+VSSmiDu|dL0*H z*Z#)uqFN?|1etE*%fbafNDyv>BnO^5_>QkZfv~I6;x&nz;Z|@r+7i%niY}De&u(cZ%qHlz9asL zqeo~AQjd5%T(Q;oDClyT^n5bHGovi2ObkSJE~4`Z5TM3J=r5{a$Xwxd71%(RsdhI0 zCo(vxE$70Qyy|Sf)n0ee>+I$0RzV=tg7GFNKqgzjJG_ss&D-6Wv*a`XX-Tqgn zkGKBiJult-#--D;$J5J_TH2r27%4w_|3hSFl#8KzSH_b7ei<~a*g&7Dp%Wma z0IOpW_ydROug+%ZJCrIYB}A%~y<1i8U%Ec>z-kcDDCo>6s&<#3?YG9>@SE>L!(11# z;13S)`EwH>5=qd08PxbN**5mt3&L}uG%G#yC)Zy!U|C zkVEDu?|f>??*&wU#z(;FS_*1noLsT8a|w7SkJ9(Dy$9UOUj3J{r+4w0#@1sa$9y!r zg(OA@$3@jCmjzIo-=i&opT?4)izQKTGczg;jN#% z?6FJVxa{2k+V#pxfE42K?;if*TprZ9NN&VhcHIXz-`lsbd0oKMSFwuuT=Bji-GM5V z8XF>GG*n{>Ia-x*wU_N(AQvy=$(+v`F$3Uix-{Wl{y#o?rlI|lN4Dw7aaL1;V}dAn zG7Ty-LK2C|eBRm){>VvySe#TFJcn#;r+5XpE-?*7&V>Li#gs8|AKB6d@f-i}=IFJ* z@j1Duj~9{bttkJ*W zOf;jUy~17J{<^dI^0x_`fMbJTwRO{k*0`d!b`qlqyM;{#DM2Pupt6%>PoTaYyY@GJ zqx{&t|Lh;#|77*J>O}uuouBkTgRRGh0D4!kYGv8v2~(#ANQHvHOC%)NeQTh+<8iQ8 zo)7-XqhNI}1(9q8kj}E zWCn{z=KHedLNj8J(gSzit^VM{J9Iv`L7h5I4B{W&1J?3&6ro0)JtQXrvbz`jqx(QE zUr!7p((O*J8K9@Q-`PcC1a%;av( zb2MGVSp|~GG)h{+1_@ zaY3??g@jVZo`u@>vquXctFc&hlbj6mx`C}K~cgJ5f7n9654pO}9 zJ6|DBPBvrG%{8s`I-i>wVaCN%3bIEiR*-5VkCOZ1SG~-B(JQYzeO#3pEm7P;zE$b0XL@xg3|%L2xES6QmMF zU-~~jA<}J~Q+6#C${N*{Xq;5GU_y~ZNVTzAjs zt_Kb7Ad*gF7CHLvAKF7+GhzlQ*~xJ7D99ztLFXn&I!(RCBKZCL`Ss*D#bzR-2i5x2 zt}*~bKp=zIB4h?582|)DK$X(ql@%yogYxjN0@$%s+FxPeVAhfJiy z2sx@gC?T9JFIyV9@_&A+dR*bgj_b?_1^R+0b$AT%ngS?sG@KYC&o%(sA|%Zy9>Q6@ zv`;)m3=@)4#sL5jG!OhiTbh~V-u9*OhDY3Im5Wul>$_j16+4!siG?Z?SM$OfqU^QZn7_U$^Q%owd6R(LC^?yqa;Pxw<;-0Pwv)4OXV(7GNT!P z$;z;55E)gVq``Bc?csUMJmhsV2DeF>7payo>P`$5PqJfx)GIdRk=gxy+t}W*9rlWO z9vSP=;-FgJez0V2WZsQRRG7>UA{OyLh@$OCW(td$BK#If$=px=b=TXz_u;2*E}SUk z=lDF&8A^9WSG?&%7u}QUiZrwkZB`88?|b%#Ix}*_KXr@@WQtbXHV66&Ib#f0xoXLf z&eAGOY3sQR*y}HZ=xeV3H?e31$3`@OfBY~-jFH^*wB!Cbk#ZU!Q!zXxul1j#Qnj8<$MVC=5aQ+q={8~}DuRw;u&yp>m zbCV$3yJ^4mJx7at5O{Ssx=8)<>HWF?gMJVX28#Pp9J;WTs0p`f1C z-3uz81AFa-s3N^I_Upg4QgO_E~$T1tD?yc3X&pGRYMhvG6R%P5=3?`0@<~gJXY3{6(rH@WvjvJ=;m|g zCg6PdX(4cG+fhpeuTkg-p{3S3s(hVRO1ElFTUu)!dFYOPfBD0|d-g-~`xu*qY9T@@ z>ei|oKYH=c>dho`swnjK@3@`wpNb%)4c6ji;G0@_8OaWeJlL5+F!CSoae5ZEr2?UDyA zmgN1*B>*~x)jpYS=b|gkk#T|wLdNb`#8r!}o$N{uYEWW{@H}|!Eyo`8x?-a~iwB`e zz2euLnlDJxi=k;^5FqhBBS)4lziHL~x#44%+_q?K`n>sjjLktc=CL(89ENuvbB_Z1yzMyC{;GKJRM$uq6qSo%z>oshzpLKF=yus*}Bvo~G6P_0FX+0vcSwKsm`;(Jn^k(w_qb7qk8Ge7@^e`Mb{8n=paqPW-z-=htJ z@16CVNu@#K7*}K}uCgrh{^0jkPcMCs5+f*pvX-qOi6q-u@8?O*#aR^FFc?=*=D!k+ z>ud&OlwHASW03pSGmIr|fMkm)_)T@P-x$G$ig~gdJX3G(Y`BD0 zY9OQ8c&MT=cC(V(Rk4(rWc3UuI=P2C7x8)MTs%HA14rxqarRz`WNTQ%t|rIXT{||+ zd0eP|xe?B#3Zm&aSp#4Q$u4Ayi=b*oc1Tsw(~W>Xbez<&mF0&*>0#M|)wt(*i1=N= zBzQjMQ;wQGlV_`Qd2-|bx@GeZUiZEWJ|1gvk~4iSji-9Eh=z1m)>ab-vQKpP|xv_0B;IC&5a^7AjI za#*xW)Yu4EtzBVk0-1xV0&^3j7U5^!-e*}tXhseR;}_DdR5cpIo${v2WflPABOHyN z80B<#rNHj#Gs%bM{-OYx_Br-)DSZ?zQBN`qexhqN|bz2rCF^_451ef96He^0tQ+BxIr(@3g6k3hOJa{dh; z*@BW}Q7wMbj2Xl~w*OhYGJDyYm$&@C?>v(F|ksVbh$v2z+Q6! z_=k3xlyT1Rb^Co}AIGVWAWFz#NQ+{QIasp}Dj6BWjl zOBH~WT&OwPok+8KWl3TLRJlmP_@#=W{as<6xWDi$732NYA zH9E+yS}8$| zoMd;j6y$+hl7FNW#5<%TG)QqKFu~_+AcPJs2^R_5wNUzySJ-kSST=9?x#iN1<%hn0 z@GlVTb3^LuZ!a4tvUn4u9 zT%s&rof+lCLnms06S$}e?E{%?r4`&-vWk%tC&$S?3G5H6XBovnM6zw_$&G5FjNQR+ zjCvv~a|GYil9M`CE}MNK>|IlekEMF}64*;uaRO!{&8hr*o(6l_dPpC- z$LmaH{2<(6IZ{`JK3;GmSFo6>ks(u@PMK4Mz2E%66R*4P3wysX(`VCYn$~Jj!!6Yr zz3{quW|EoPAjN#yJ8|TxU|F|XIw^up1yR`y8Rxo?rQ}6=Z`)vXF99`pjO~nM8vNsj zxXz=cjco;-Jw% zMbk}^BCAzpO4Uaj0k4bdKTL#O#uHp;?|TLe;uQ3Dj+CZg&bo5O4^Rqm2J@V$T<}MJ zcKe?9f9`i5c;&&zhZkaprl!czPj^Nyy6)C3KTdT<=A~!LtlYe%$9{TeFh6B$2dPjr zxiTZ{b;9q;CGd|OWY3V&U@ct*-l5(6y1SPW|Inz%8-$uY6BUH z%wi1eAWa=VC;LG|2+xD+5|8B=70M(knqw#n*+?s0EP~a!nBydl13_+?Z0iEq(hkmw z^C$^(S=;dns+|BWEirR#SQU(Jc>GDYwt_rrFJBMd{%s&yI(Z&A5m4hpT$+kf1R0=^ z1FLs6_=k5>4LeR=|HwYDSDwenAqHwxMiXpQqnd+E5wCbWsh&h@6F)JZ1t}=;6f;Oz ziBUGWTTsauRJ_PhP%zcT7*_)ai3yN_k)dTvC)azRw6gg2#4p&QI&+_`c(0u26$CFx zLJG0(=R-f*e)qt4`=1@XKXa-uKI_4ni~JXK>D7@^UC}LXx^>Hced|M8UpYBcoSf}A zvyvd?XMg_FDGQ^tz*&0{Ve{f7L&Ka5X*UY~u|wo0rIZa+g`#mPuCf*_r-VXkZ_s8` zMpU&7s=FFKK@x-lg~55ymcae03$l`}l;%=>J!t65u(*o#8;XbrtrMgTG7_iYpa6CY z%hoQ#*u&tHI#?v;E}H@sL!&;QpwiF zL7I=6M#ZY8bXW9}H{G)3Ka!o1X?GQ?rdg+&c>A~Cf2Pmv-qqms?<3e80yc;xIpC*! zu-9*a^3Er~UU8nWPb@+(ArDuvKrU8dEU(1nuWp1J>VzltKuwO39YbCxRGDyMqn%@- z?80$Cw0Cnv+^9&Xf^ocrJzN1i5Jl>dDGcC*y>t~v+Dpu2YTzK*AwAyqkU{XYLD}qF z=)6}fx^cs`i_hAzcOj7u6Nj2_OLawG{H9wr-;?T$w9WK)&H70fAG_zyiV9PuZn-gv zZ%|#g^1(m26Ev>IhxSkeol@Tq?gH7lm|7LcSc>s@O|3VW1Vka7FeRNn!`p9ji7ZJK zX&W40P3jRD^k!eHr_TUNBu&#C)0PcbjUx$%yJp6!;wW66i?)e(WG^`j?2VT~JW^7v z(X3AjgaU0@GDxYK^LEWUH~wQR?YwY@p@l(y!#Uxs>Q?O1H+^XHoyo4~jM749FG03F z@-(S5zR#d;gvq8Clz%m&_{Z5cCu()S_T3x)X133u$*3vZyl10SSM0K1zh(11 z(Ujdf-D76WAZl>nXyM@>KSTLZl(4738#x6Y+83!-kjvJA@=BD$M7dX!8JeQy{=Jl9 zP769t%*+Tts)Z)8%1wYmbtji$d@N~!D&$#>awDM7PKm?`BbNjh+7HN_z(rJw8rlG8 zlr;Dk_aoaxfGQQ)0ftN!m?s2@8lmbzH95*~shx{xTx8tRvkyae{8YJmF_Mm)*Trr9 zD;C|f@`{ctXZswQi2S(%$JOIsYe(d=RA+SBU9RS&Oc(C??)M1=q*wr9N634mi$%6M zP}Nzy(gf`?4C+?M5r7+&-*zrxsGwvk*%q|YI}vupD(-P8Q*E5S9vIu1QFi?%c>y3( znKFb0sZ?t4IC-9^_I+%KJKmal^Puj$x^)_VCO8hG!%z7doCwv&cc(_Z>KRS;$2^Pw z*Ztvze;;dE@Tyi*t5{RE8PJ>Fjdyqtfx%VZH3rAl+!)7p!9TKxjQnJz5PD~%C1!Ygr$_Ntx9`>OJny}=7`u+t zv_|?I_+ySGxBYv6qD~zvk~A1ONk+38Iu8D^17tXRhjtO@0T}NQ1oh$NvZ-UYsNoK| zhdqDl)rZAQRaJwglWg!yg=y*;c)Umwne=&y%x3D|gU#w&LoQwsjnOp*Y4{K{;3=0V z!h2{lIQB9XNFu0_Q(&*z1m*3IP92MKscgpKwGAe&8)J}Y z&tzYC{0yjHNN|`NCF35?Me0-lSxT{(iq?YCMW7Tb6sWlm;dl+6m~siaRAO~YFho&D zA~RLJl2X@lX}k7)7kpv?t6EJLD4Y)wGWU|(olpF?&P~z;C4AcvZjENGxqxcU30cH( zO)D3e(RS%9M<1$JCyiw$j@7$XKV=Ynf3fJ$g5NUf#dm^eC@LoB+O* z(M784g|M+Fw?VKLuLxVU@pa@GbRwPvogD}N=zeHR<)`FD32Ux*>+BS7iL8FbZ>@b# zZO>9O@*6$xYrr3KXAp1KlXv>3`q^dcm&qpZPaFYf)dq0ZT?FNAkAOOHn0I#BW2AEv zU@cuu=_i4GLGcMLxdRAbM+;f5Vv6FQIO@ zqo=0a5>?2t8fTh$A`@DRmov)Adseh@4d-X~U=qbFrF2#R5uyzvus> zSi`AftoH{7d9gq(5oAjzN33yTyK%NDj60Vb=9D>YJ)5E9MY0OT9qkI+Wn8WCVGyld z1OaNV+C<;mYc3>k2AOOnH!r~m+3u7ZLXAO9Z963_dOm0DraOY_CvNrZM7hxpH3yAC zGEoZE25HyMKtFv;_r%s+_0IKwIv>xbj`T|v>v`|Yp`AYxtsR8)9-x5)tFpb$OyIUo zmI?vvj_q*tTUZPzw`du6mWn5tK?H;X(j^i4Ybkvfc*j*a47k)bu1|8z!xfSJZ~*uXU;kZN8@O-MyPy&#&uA z=Rlfo+Brw_!XV{sKmUXP2)kno2)3yeG#&q}xq*sSMi@%hr;;6ExZkT*<;9ziTrNsZpMhAOReySEiVX z&Sf|w*gz6dvSdCBQ7f;cRw18J45YrxoOR8gZTjQ_QneONpl}9aWL_8qN(Ha{^n>^6 zu^~zTq&Cr|BCpQLR#R!Xgfn;1AkK{P$=kXanH?uGs%8e+K$-6ePgmNkewoRN6IpgG zW!x<{Mk(`FH@A-v5za%?re-~8!KSm51QkS3qv;L?t471!iG++q@I-iCRQYm~kcfFx zR0d(yPsIwhmPPT4UUK8A-=CLfRAVYllztf~JnIeG{_t(&<{cXXXTzmbcaD+-Cmk^h z+7D>_DxZRRgu;lEF*{Cn1J#ck<6OoP1O`ER7Owt_87?=$)SrJAnKuUU4(z(eJGy_!>RSutXC5R>-tz7zsh%Q8g$-37WQ>V1Qky85 zu~cLv5z|u;RVmuh97DNYr20$}00XsMqZD>UDxENhB-$XjTWww74;%kyzWX;1hNgwPd$MCn%bzK)xH&3iWelN~wTHP?jH=y_iQ5i)NK z0u!Uf^3xA|87Hxbr=j%hBNU7)?|PE*uV~dq{a>0!mr9#7^)jg8<7__!;8BjtK|7Q< zrgtD2{-(1m1QB#0L&-uB_mWYm(8ehgxQ5;I6AVxk{o#|uwD?|S##l0i zN8pOzy_CDe+Ad2F-(zo8xm3BkgaALxsEBTqyUv<+38?<~$B$58F);E~ZW7A-ICGdJ zk@=je0xiq5P&h(CNjfe!NkK%}(#fE3is6OS$$nxqJdPk!$A`dyf(kLMETNI98@avc z*H`>y&zkh|`Fvi#q!*@nWe_zqaKhX7?0@+K2f@AYaza?7wgCieJVt5^VML*x=<#Q0%BYq%4$n(}RSL2;1Ci(X|W?kP?~LDedrVlamo_a#T$gW?g$D5+LXVMm*S>N;#z zlW5=)zbDaQ8tM2RxEH>ZT(&Y6=k{x)VtEFqYnTe4)a1AUuJ%JDM!R4evxS28Kk`H@gG8|c+xw#lUKfFYdQU- zXBoMB$>WqW*t%$(#}eE--Pjh=jgd>1VR~YmLltnnHW`CPktDkYRW_7JRcY{q?<)i+ zK(_TTgTzholoO@;c2u)S1sgoha6g3{Mb;^sw^Se;i0~%Ws19T{blHuo-rwGvXlU>7 zUnH7$27z*^P~N@u^Jq}}$M%!jWA&~9|Hy7O(ukBscSP)?UbkQqefsOVwa; zQ9Y)DGEF*H&C?X8x1p-_+V@=Wf9L(V%>y-Bby^TA7E<}?`~O*IGul70hrCbz;4zMZ zCsN@`PpXW?kUg9_ViQ<`3P9i@G4^tqq9#fvq&94BSm;FfS7fYDgnbc%NWKVSDy$6E87nAy18b{GsDiOHXj46j;o&(T~!r>i38_0>#yW zF1umXt?j*ux-_!fqli#?0Lsbcl zcHF;Q=9UR2O3vvaytvzaYZ(M0KS`B~6l0N+1CS^YN(GLn7xUyL1Jf-R92e}x%c-i7 zV1o!AsKh-&`uA~;Se0f2sHinwyPC4u5v%pp?`tl|phl}s3r58Pt`phe_3!%{p^Ffl z=m^C$f_4VfD6^|K^z)-#K!_y~!vOesG{*emdz|qbVCx!KQ*zT57*-V3Gn68fxf?9_ z)H%1rF5E%J2DVx|DR7C5CgKSwAK1>pM)HzbVetpYKuiXJtV0pVEVkZNZC7u4?b6rR z>KXo$YRDi!=!^e-3pfq|AfR19bs?oZ$VDqSa*dKD#*-e6b1JV56AUxq<&ohY^hig> z>RxILZC1T-63dQ7tWu#0mYWF21yi^co<|!DVH~|{DHUL$grN#UwyJ(20oIkdACv*CO>YtNxz)J@Wcwn5 z8nt@Ya;(O7&Tv0P2VAWu~!##y;b zR)wxy@;nvTRZHF{RF#6FCu-WM*xgIbG^6I%2?B#46!**sR~b^9wG>#LOF3e1N_vA? zga*HivuZ~Gb>?#!PmxVRsqYN)z@D|KcW`D)P6KGgC7r*z>9xJrH2ONuMXEW2sH6LS z3_`Ge6cjE6jcxpLIRDrc+ro^5jDdCw8rGJ>$SA%~D?9;H7xNT-_XiGuKX8y#I5l{b zR4>8;PPQ=f3BkyYru{*14ay+FQwFeK=BU0&d7&)fDiX~rJf>_{ylwqQqG@N^n6tH@ zM&E;(Y}2KhGl(u^$JNBx(}W=6d0ZbNBq*GmM&$XKQDz?BKz^b)Y#ME_z2n; zu_SnhcXJwuYf?*aU(;!drf57x-YW0VF6upk6CBkn|5QH*86$D>j#W3x(N%c7)GsmU zj2pCt!+TXOGDt)`$pu&xlW|BrliX&q%Gd)L|f$GB`hju>zL9r69 z$fW`!9VSvVA*o)Sn&kwb2|mXwf?9KwKBI%waTX`PjK&G#luCIMEg-vlIYOQp=6DNE zew0cUGn#1a3M1vTQ2OX6EQ|CQD{he#$%;?GTdd@6J2mAtS}|G)fd~+Np^y}RlT?P><*O9BP8!Ki?cu7X|^X_Mv)3(Qs6Os1-t%0)%8}_wS*mHbjBDmYV5Q zO=?q?OFh_4MWMB51x3V>5hU6UnGqA?5T>CIoxE~f5Jp863?-OBNTKnNA;VaUj}oNe z&vCZf>X-K1wCW|@jR3+v=g<}FBSD5wjEhuT7L9L8A;F1BEz>k-_?8Ofy&~Jd*dD^f zHUi}VB?oz^Vkwd^UjN>yYLk?#s-ex|MmW}I#+R+#?CCP~=`z_uebU3W(!n_b50>wN zfU<7<3Rn1`4un9fsr8ys ztE9#KKB#My;z>O=$PxHhoS8={P-yu3Tz5{4=9r)%+8H=TZh~7QluL$zxQ`-%HBik+ zF+86zZegQhHU3G?VT+~RWv}{!^Z%+|&zGK|77Ih{&VcI1AmDogYJA9myXg?&1SN-P z>E!m#T7_A(luAN|bdC|@jWKU^_i_(*lsNfG&ce-Q$gUBI7KRi>h7gibQqbUbqf`uq z=ZB!*dNI!uqr?Dr5EN#aK%p_x8~!ZkvaNsRlHXo^Y5T?Xdc-xu^*wIriP9r8%&`uX0s(Aj(M)z~&o&0a zb*U(dJ|~y4Da=BnI}+vQq4^9aOrq^W*TpCZq?-99Q>6%S-zOis*)OSl!=L6Hw{%x* z`73^B-Mj1ZjHxAY6F9qH&>22`svm>cZokgw$YAC)bkq0-C4{sM`nzRREo2avCO_FK zf>BLmnhTpqMVibo<`o+A2HYB)s41+<1Na74*JEUN*|C@;3PA$lcqU1bYTA9@G~JQh z6jTFb4i6uG=Fa|qsK}RvyKQ()?>qapwAUO6TkC~^@IDi&pNe&K?;x%GabCG8`c1%Y zrZs`EI9?I1=n)2Y8yh02fhrPCay>cDXzUYXrnW?cebH%5>UcXDo`=TvJ+Rt(_(HUa zu!nA7POYbeMRFLB6-55tr~c#cKaC#CKGx{EkGXHcdDS0m_^cg~wawoCr42HB64Ce| zt!Ku2L=ZmF7^yTQ1-uetV3~?R5lc|qL|EMaki1Os1gOF!ceKq{6)8`|+SgUL}I z7Pl?{v^ykwrO2h5XS*iI!Qx>ph7FPq=Ya)fhWKp7m z9H<{5G6;^D9XD=TRmo3RKE1bBUuY!7RAQS$Q)gXbimLdFf3iPYz3-!6-T#@1Q~76V zcXR4S?$z(!^iQ^18>sqUs#tR%q2Vy8JY)oOqM&r6>^(9}Ld8tlOxhs2jcN~0;0U*F zqkiUv9F@+}s!wC)SOTGqgGM(YwzFDA-Z9O~nNVIEH1jT@$UYNjI&>(J(jpT>;8T5Y;C}g-WlH(`jJm z*sdqOb>JTx)B<5%w@co*^4*=QQfub<5z`vf=(#_gEfSypw6C9vMXHls=BrdZfzeh@ zb%4UjPw0xKKHaaRc~A<8VG_c?%1v@=iS2SHE0hXCf^6$yrpZlmewT3#(>OuPHxpc> z&q6mdk44Q#H5e&!=5^-D?;QN}#9)4BJ?~jQ~gAjyiUuK2WncU>6- zq;(8f4ur@ewBlzcD2g8T2Ps$CDbi+ULZdn}#;GY$6Xc_$Mwj<7bs)H()wzVfF6Jq6 zP8Ear7ta&8ca5WfqW6^MuER0I65-RxD=Po)Pj0(egDy7#G}fH9*1p7xF1TUY@6PM< z)eA$#Qd&1BgZL*84^t{RMX~v6)yPSXsH0j$9i}v+i&QI&CV^0wa_sgkX8AjZgNbOf zSe=U){wI-QNns-FpgdBaB&u2XI*7cZ)S{GMMN#?? z+?exr@inXdyme`O-q0B}EDRNECiA|o45CX#P^bDC{V-5*49pIBt_*TJ)n)`LR?xf9 zjfAdS88L>p$=DT^ODSgEQb~6Qj&2_Y}ldb%{ zS0a^3jSaGm5sh1{Z-4-c+cD)@50FD#i=me-&Ai2qEO}G zSBksVR=Hz|G_T@8RxPPKE=w0Goy|>F_LUCzIB)HqG6Wj&+z-*XZc()==GfcSxtKqr zp6Z(FKL~g(*q7bR(^3^4yJO$SCkFEeXK^2zikyg*c=exb`uJSO85wHcmJ!v2rs{O} zt*@I`$ea#>f+5NYy<@DZqRGn=g3{m#N7q32&|eedAdeU4cX4#xHTxLP7}+hpH}%+3 zkccC%#Ff7aGmC0Qf_xvE)t%>awVDJ}o#+Ke5|&ma zNz#z-S6!L_|M;PxqH#t6w8!t*_jeP6`NNH$;&a=ah!ub3A8-2D%pU53q~??$>QsLb zsu%!m3aS^Um4B*xmo}vcpqgHT=|5-+s!%1PC_DA^5TV)?980Yh;Pfe=ro0dOs)z5< z=(i}%#hS_QLRIVMckF#%6NEPAye-+-_L}pqUiyaFJl{sEPSbZ{HLC=HDmYN!RCIEy z66|PIW^X{$lFi^?IqsBHd1}0a#(W`9>F-ogSS2A)tzs8)g>?C}_@An3{;4%soxOw- z&!vqsqXYM!eDL7IC%@i!IWYI_^50(n!DMH&ZKn5N0a0^G5F(uDwnM$l{fUt>~kCg1F{$G~TQJ1<3AGKEtt4+64blqSzL_R=G@g4FGyp z_vQY7-TATHc&Wb$@)75>$%xhYsy{scTvoN3RDuMNYB$QbxC9FlQe zx!`mYI#!vuhUJ(TNFd)&TMdC#wlHcBmBhtxGtqgNs@^%X`FVwj^7uoy@BZMt+^Yst z&!*06*SuoUYi4pxqgAJKL&b7q2ArY9015mlRSSmXMyvKWuPJVlWp7k&f@?T{qvLRz zfv!xa+@J`my7Sa?DDaL2C?~wrtYLBvJb2>nLyw&NUZd5d`Pg3aTkHQ%q{m6k_FgnG zHLHrH366)r8E|3;MM|jlD6it8#eV@ZyK7vxl#?Yn(GhKvGRILuY^$LAEpEYg(Rk=G zCU-L097g)EXsH|@jK}<;=Y%8m@E7-dC_i2tZhX$}+_p%{>3aG9KJS)!d;HBq%_~7j zO~T1+R(u^y{(SbdE3pU-8CW}y|A^<207(yl9}vu~prdiq<_N{~vmpmC>~_RIE}cC1Jl zFfLj`KPhvp1PyAX7(LN=wa!Q=8K|3;X)TRodS^(r(z?1{{tOp1GurXvV|N{WYUl@z zR+Hvqd-*%g|9B+jBX(clM9O(omeZ{zyDRLilt)jvxmsK~CC^A&zL`Uz8 zBk5l<>#%XTNDnZb`7^mnpVd=&aQ{-Ow zS_eRG8laS;zl>yJ8{-Y$Rp`F~@%^=>?GG{_!V>=f8>ODWoEdL?6WSH z7#vP=|MW0RSDgWwry6jsx_&*Z9|?vw5q4^mz`;Xu|DuXkE`s*T&kd@~1Ks!OZSNJn zpKJIGpW~M7jIDq1Ti5;Z>A$ZDE^WG7lS&ZHl0uIUv(9hQ+##qO)Klv}batFOOHGau zFav8x#$q&uPUI3cpAqwr4Wmr{Rh3KGuSDvrad;twD%I4ihisHWwkG#wd?0uH@oygd za4p8JH=TEN@9!?Tu>FE5A2z|vpVrpAHi$_abWHC+U3DQ{y*x=LGps&=2$0q}if(eX zC|QvvIUDt1o>i4(;9lny2}3ztUO5D@CY8%_Ik<@S34T}PUWKxKam8U!1A6v94t;It zK<42lm?m@GBA33Eyjs<&)xQVET z$%qE!Jy;6BfIB>gsu={;E#C`qd}&xWV!GodO)gduL~A!o75uz?am{q>`~PX%dxY;V z_?{!JOOqQezJB%Zh4=ZFz;SaYk!oWUk}@~o3{%nR$^}amk_3VqbVg$Qp423hTH^Z# zzUO)FK#(FIY{5Cgn2F|n6emUou@nNv4syGMSX8TfFg}nw_V_ms{(a-8%G|e&*DU+J zj+H5H@3ugoN1Iy3qP`x+)k>4UT$&0sYS|U{uU4G1Wjsx~ILXIQ9}qd^S5r3d^W71j zTTC;0d=;{M@O|Jq29w>(=Wea#eb{m5k=sX)Ww$oEIBL$DfauHLwee%NOK$mv(p@5C8h5F=k0$48p@5IFLT>kmLx8|==#;~S|}=3(*_EK z<%VerMr3m>T7Vpeasun!72A zq88GY&2HQ3VN1n|iiMLssQUonN+gch%}PoK7eA zOzhivXa8p#KgH*`Y0z%cIo*HKd|T5p2xwQ04*_kXC)iahq-kKost>t-DgE4BT9~h; zD{1OM6upoGHFBcTkkjl-3~~l23xXUnY4mt3scPCJGg4`89@O|C8}Q1nnVa`awDp_& zKQT6t-PLH|xVdbEM=1ojDYxM~aCZKfKGi$b#DOAL1QPD9L0Jq}f8|pEktQe_;gkwe zK`SBmtQ4H5g_Ap%;n+r%M4_a^>PDPZ0YmbFQDKzLp01!w*X&Oq59Bx?1AbP}KeHuN zwI2V{o|_l6R}1*>0#dbJkm@Z#Y-9kLY9&cQP&Zvz3I^X0dB$x{4ve9&4B7HK?J3<3mYdOPj=HM1UxRY6|pq`2+QSYcMwHKm56Kw z$@^*uvu{OJT1;d>ke^vhFiYl_Q?ik&TG=n+OEUn`Hs5vlgdKB#)- zC(U~W5RG%Dt})D2sleY66p%Rv)jRwfi7|Foxd0H0H%y5>{_Myz2kt-duZ^xjpT%bC z%_^IlbemJvnkF@jy+u$`i|UPUQqjGsMNpNTDd2qrV;(1aX4Fh>#~`vBa-t!MyCyp$ z#x{saO$q8v$fgOTQV>-)U2t`|3^Lx@5EUz+M{nQx$wH=dq>X^lqhvc?3su?3G8iaSp<-Y1@ zb12Vb>uRz!bbf-`K?g`H#AsB=;7)AVj5I+H)e{{Btdin8e|Gyv3KOMcjlPb#5=wg~RoBqcyiomX(t|uG z%AqpSf;vYTXwfPutxbP(dLP&hxd~2DK}qA4d2$Eo>Oqc{sOk%XOc+gaHKDF5o+7|F z?iGS+8+E}o_3A=OkX?Oq?i)TIM5@+pyZ&lwK2FopS+CKF+F-d0OVz4>`vWq(HA@b! z#4g!bx>8A?eClZqK_+f+9I96o6ERf>C>79dh{UJ?Xs}P^8EO7p`NUAc z57Qe2jq_?)9+VmZ-mX$rNr%RuccY+7S?X&}6JFYtR1>3Rg^|c0t5jh%sfnWp&-}&+|}evYdJ9E4$7KAZ#aQgLIl^?KvyeUBwbc#_8(1 za$*ow@f6}J@0EBp7Xtjj{t82&-9f>?2~x5AlLyJ*rmnX^?YcI_Rj5AMoT*FaLWA9j z^4KPmnCzHXl3Otles7f3FLw1dB%1zwwC~=NcMUu<{N09of#zY0q}{+2tiOsi1FAn8 zhdEG+y4Z%sdDydqad@Yowkt18O9`@Z0VlB(G_mDr2qzTxK#4->?7)ydmQ4~x#uA`1 zLktcPH0bfm)E15~2XKh&7*`;+FX^oN{doa;Q^)w zN+e>&Xp&+u!j4b}UWOo2eRa7jGoaFBdGx8T?7W3?)tYRZDY5=00CB z7ISQPhp`Ti`kj+1grpUFmyEi^fD6oEs%X;LgTg4v^-`SKTPlPlwUiWD%rS%TD4gh9vqlS!IS3G*utI>7u6qIJw5Yxek{R|Y zK|$tam7f6F(gjvmU*(n=wTSEmU|{J08;kl9DvqENvlz9B(@Mkdh+Qc}vV}{Tq;Y2L8zMl7IHuS_7cYV++c#{qH+s<*bEJ2c_*~CcwjZj_H zpCb~Z`f!?zZZ()X+Z#dRB7w!3XgO!t}28}%p@;j+hgw?Anz;Zz%A_W2y?CPcBsv$b3L>tC78N$_f z%XULVcvSzWkD}#*Om{ZD1Oe)#d-Pj_dq(eVyd0S0q!j|(CR4TQjm>+ERUY!BGD2TF?v97}sTVdOrd?;iHD=LX8r#>1=eK%^C zjHRiOr;Nr?;zUHMV?{mh(QN6dJNEvyU-Bm#35`X-SaaMg+p4{)H3OwiV;WUxG(0&MefRyu<;GnS)bY_@cw5XclacF>Zp%Vi&7{i^UgA<`r+VJK~ ziQEIopyXDY8k7Pkm-)K^}I*3rLn`4$9DZ>|Htd4!q;+h5>8E3t(j1LRV>>j z5G-vvO9?kI)h}Hxv2>6&xnk9@NnUkhVV!wMe%VwAI;=`jCN5|0hH3G@Al5RHVCbJJ z;!@s#1RLwYF(^?C1d;6Qy}TB;q87C02LoRlIh1*`x?!LXpb9`vQ~)2$qz?`EaDWODJdsx>iAF~! z+SpK+7FaziUsQuzQ4{h@ND>2-q=1= zb5bVgpuoHgYSbxi5>L{32*{yxQA5#9W=dm+ClBrauS1`1f;m3tjnEn8{Ht0sq58%_ zlsd>!a$PBMB5d7CRxheaR%;KtS%Y*E-{*)rN(D6FBMDQ>F2h=Lw$qJ7s7_oAVMqC= zs>xBRCqb1>COg92$iwBEeIp5utrYVhW9^#=Y<2= zIZ!y5p|V!$=izYfRM68L7_L&7h&omLfh0*nn7zmXsCpT21!5RsR4Eh!2F8?L7pvN_ znUr@C)TvL7nl{np&^;XP2kbzQi8fH#v7l~5%C?>h>v^B%N~mf*^R>M4Rf_7+O?^56NmJ=;Rnb(~xHHG`5X$VGH0|0nmE1DwiQ@bz zN_#gyo+9hqm^17uW&UzLSLH@&17k|#B6CuQDT}YocB$4xCfgSjgCGs>9Y3_^?)`sX zPee9tYSrd@a}w^nt6I~g`o=+8J0oDK_C$!23w+6>770)kAhg0Bgk*nI6&nQo(s2?K z8VP{uhHFpph=nQf1S_h;F!@&1`+m3idh7zP*p^mf_u>fxnwDTSmGikVMoFw zL@P*Br+7t-5!^iwgk>V>riB_FBU^g-btK77i)UH7e&dKn_6I zznkiLpXQ5D)!O={UGLR1#oKH`vR#|Nu;(I)N|WV*C;xr-t8+tzebYT}y<4y)a8;&G zPNuI1$z`-9Oy?&*m*Kfv%5%~o83mI6y3vX}N2b9^Z&{$c5`Cs7$13|Nk6#O8ygSh; z=&YLTcOO)NbGWoow-l;Y5tE{Vsv25CZHq6e>wTI>8s0m;ci)3YKHcaXlzCCLlCDAj zpE>2niiaP&ZReE}$8$Spa$J2GBodE=D|e7EsLe`kAVWj%6{Vvm&!|9>1S;n_H3bCy&0IYu=hQVU?S>gqT#*cyY@ZMe{QH+Xs}OX=9aSMfvsQOef3P$ zs%omQk)G;UM-s#<1EB7YQY6ZGRAehqOykUVMFx@ZT!trm(MX6YR7OfiG0||g$|~bg zd_}QKIKbngYQ+2`CoAGUkp#&sRm_2iwJ>mqoI45+`o~SIbVU@y(pP-6Cm+(LTqG^3EA4ywDsxJB~rCM zzw-k%)PU+ncGL#>JgQc4vOMs_?K3yX&qVcQkoHB(Nma63?){M+qt7{tEv7`k!_H8; zst`(>NI0dr$G{)z4XP}6Hs5EvqEracPpDNJF(`x)d17F`T9DBs z1t4`{0<69bzXHu&qCPDe+&=Qyq5B3tPoBeh-s)X|;-(!qy^9MMI?DCXGpiVTA46sbaX#gk#|j$ma66EVkqWjt-F6uFi} zNC#9fhRcwnI4(8gG0P2}m)yXn;}u2a$#B=?(V}DRD9FyfMOMqwtLt^YYDwF^vG*T~ znbN_gL2a1jCZ!C~;$bRt?4PfDRX+x4>0BeCN!II89YP}*S8}pHxK)~rr&#^L)!Zvp zBISn2=#HmBPmYl7LeeDcIcU_TpwQ?p{*i} zgMjQK9-LgyvS-Ds>vg|sNvLW)`S~3mn(uKNVX&jBB^*g=)ze?0AmF?)2h@{6q?_18 z6O&pqbN_5Iu#IOaNHiqLQOHuRmM#^itQcG%<%0Iv1spH~BeailM4UWRW-Mykri}_! z1exmOD#fb)>Y6~Z?GTR(&&v=&MLvf?Ly?JAa8_>l&3fIhTGQZ;kw^L;IsWB3FZwmv zB561O%pJS0nmC@@HQ)ECeiEd$s~g-n=*$qgVX1|I798QuXH60z2k%hL(z$U670kc| zj0_QgQUidq`VyMJYJ8A^=g)Gu98djpN*p>1J1 z+yViO^J3O`#tb%AwM<5)LkVKs!;I>#LAp^=w`43y(umryxluYdk=9^!uK=rS)eZH! zXSJr%WI6Zb7k2zvqpxEQlz;YXyRSd;!13?Z>IC)lVhKGl%t?e)Uh9CK90$95CHMTW zBV=RfA~*UE(cSY|v)c19!~mrNO9@nilI^4xp@C0mB<)Kp{njZeZ=&W#>hK#?DYQbV zRxYw<%Rmaz1yBN{iJt(3Aa&M~bqhLRcsiZfI`r_slc&DbctJ4Ztx#*`fVwhBBp#!5 zl31DxoxBpEhLGf-^4UDAPNh8Pv6GZ=7!avO(lY3ZCaR7TR@z(@sC*Eq4u%hnr%j5x zGOpgKwdujRL-0Dwsno9rpHV+V#)?JN&mSM;al8^(9eppY+dZojJ@eJwAM=aesd<{a z^`OGGukC*Gkq3_dsMaT{8-rNwOJ7CMpOGlXI7SA5Y!WoEP4t^U6EuTNTWyQ^werH0 zk}xXn#!RrVU{Kk!WPk_bgq?IFaR$ex9wQDLuhE$#`=eFLyW1#?HqvW`$){-Njx-f`HwyzS2mR_pv7-eNhh8fy6e=op&!<< z0C6_|kU6gFf8h9k)a$;~g+XMhV~sHRPUN9NNnwBy{J|rYejY~Om#vE`0$VaD9I9Yw zxFe&G3YD9nR1iW&!SB&_K?X8Ho~sB=4SSG2Z@{T3=L#7ouuHV*A5tn(Z$rYx%1@B= zkkJ&#wjNLu!_36e2CHx5uh!$f)tk0{Vdn?^qCeK?>v$e2Z2Q`toBHdZR#j7d7^J0} z68&(}Q7nW~(+i+Z9R$G7qDi(ROuaeSZdg+us9dB5CEM8jTg(!Zaak_6lGeE~F4;BX zv8$J(@S1SADxId-2C>OoMaTOd_iHC4N6is^!tWa5h`;Z1O9pBUR|0$K`q$UvzSWyh z)!OmRy&syB1yY;d3WaTV?0IuNB}YK@VUW&cFQPPZ(?*TjoJC^%8Yev3Bz_5G!o)(H zDD6YIR0RDaXwnM?K#dMm3Z#J5DzsO0VS+o==En_&7I&@Egxbi!a6nP?1V!Y@ zUa?(Lp-4(3T0u4?O-q4L@Eo_kSiS~2$Jez>dv`H-!c=LBj=o=k_g8`rlNu= z&tnD)stl!FX~rXLwmp#9a4fCDnssnuEJ1Qyd(PdefQqV!32|&`k*bH|B12M(XsSt( z0B$@clI<(&aqk*IJHNgER=?;^H2OMlDckn-J#XoMu)bEilO0S0cxe^gowrC1e zsR&m45)jJ3oN89Ph$#siE?22J>FlLg3NeiG*#RIVA75QFV!L21UUNZK@`Tova0403nPIbv zC%N$^s!$Q`cP?8NF?=Y_`SDYrC)gQ-->b2cJVv?55pmz603)T{ldIQaH?TtHTS}fa zygsg8^i2(XiEGrUbXS4B?1C$6eeW7gJHNf}gMP`Mm~MTB76bw_*E$bmjyLx|c>ITr z{{2u71`#bC%c+P76bJOWSAuL?#L%7qmEPy^l<9#U2~*gi(yyE*In{QcbU^8Y>R7ym z4RZ3H_@)p_8Fi_TVTC3~$ky;ta%D%^u(!B3w`^Ym8V&PkvXbkClFoKPj}Nj}Y+@MH z$T6^5dQAK33`s)Sy<(L}_O7Y*{c9v;PvlPSyYtZBPIuYoCOUJ9!56lFeb1YlL2?9C zdkGR>`eHJ&P2f+aJHbD`pAk(=RxPz=HqfEuxx#&^Zo|}}qrEXPOpHYhb|yzCjzSH1 z@I9(gIF<<%azvf;tthpHNN`kra+H%HCx#(tlR(}p%L)66SnW$eQ8qDmt0Gt-&!~ca zi6xTOU@u$sJGH)ljiv)XKJuNh!xN88YmVzV!Gj`mG~DJmoode@EvZd7q1EUKnq=Og zr)lL!JA#aI)2A>r&XuB!UMtlZN)rG0Ua|?Ozq#^2p$g_iIiV0$ADra4;-g_6OVflW zhrq}&mJG;r@iZ|bNr&77r^VxU$|GsPF_;S3eH;05hL6%;@8~Yh)$%+p-Bmu=E4G|7 znZ0MDXTG@OeSXP5Gf2P`Ivtv3+Em!_4U!y9p;lE>Z5br;|Fd`Pv2C4I{M`FpJ9g|i zc5KIK*R)9+vR3Wds+~Hz4s~oihANGR#0F&uO&gOyO#Hzg2q6I)V$!BcNGl-NG>O8X zw51ZXAk?uHuI{<# z_dAc@X?07!&}!M143#7Tjjk=8|cQ^;W9kLKpZa1)0&?sm~P zr* zm4u_AzLo>z;EGDdi)Lq0Z%$gj+%opkG z{iyWCBNiv?nHiun6L!&31`=M`lx-(h+r?v-_b-g+25+3oVz)aoTN>i9YM?%y1O5*X zOTxAh{^obJioqvNuo)F8U9k6hC=QW%D!YhL0$R*q=PxJLa(I=1SZzU|nP~xwiXwem z*5Q=`U1A7|I|p{~YRFZnW^W^-6eJwEb>pBFs>!=r#d1~r-V})f{+(pY3t0w8JW7F( z5W@4hJop!{L*h_u!}F52qv@I#uVo+ZANdI|b_1v--44VuhYpN>?aDy?!K!MjIS1hm zP}ar82*M#uc}HP+{-UxPP5hg3QjGKBCIBbdN()$-1n3{U35>tFomE;^9zT$K)&c42 z6A&qzLWe?0AAVfUM>w2wc|r1b3HT-}Vn~bgAbUI)kHw=)VFBbw9|~b(L!~{Ei)m%O zB<4;yOfwB3WlEF|=hj^Z8*K~Komh4<7mFR6_{9xl!mWf3V5Q*$qhFe;B*I$QUuT$IC`S`m_ygo6+Vw#8!$x-D`o`#MEr zL9qr)^l>>{0^;!q#GMV-J4Zx+6|O`OYABqH)7&gZ8B{-M3kpJ?ONq031NfJ8t_BiX z339jxKo@%yWl!Ki$L7zyRMUG|CwAfJrPuS*g)`T#6y934YUse|ll2}s%2rbck-dRF zTx26jV8+gf2U)9<2IWK1QX=kKCYpHdHFmR8#y7zSrcr1Zx@lo)IsTc zK(wi}v;qlri_dLhs@&86J+gAc?pof@da-l+hJSh;sC6@lr4An)+dVaqXb9(knmdRu zyc6d?bX7=;R*Hl6X|XD8XP0c15wMlmId9>-#7bU7GK~a1upE^B?bu_5&c>sdgPf`rNHv0&uZl+^P?A!O}uuS|IK!e`iE83rquG_vNy0nY_PRg4j3B9 zku`$w@`ucxB(xG2fGq15FpI;U);4^wNw`P6<@v+zXaQwezu*C)$+2jR3>=}E#5;5$ z`93RUqpX-!qm#fX~wd0JLfTKUcjlU>t)##Sfw0Zha6f} zsj*=HM2iRLd>rKVFc|0l`JxpXi70Efecj5l%1;O zywi-?AmR?xevl0R<(fLwj9#v!zaG49^LZ=YvSBNni@aL zvZ**LWpyw$%Cf1X6(4!m9Q*fg$g=(}(z$vo)>`;OZqJ+JgO9sK3ZgJsNDtD5nX|Gl zbT1A|<>o}{IdMS@V#!26DoJA6=|j)yXO8YMV}nPGb8o!@u2$XAyQNQd`+OKph@;)n zw{53!{+%~)V`-Bbqs+=q<KeAxJTg5LgIwzOX>Cq%5yjuzz70S4ZwEnG6+hKju&UZ> zrp`fDtbf+I@zbx--0W$VpF3d0&g|!J_wx60c-8$aJ9ZD2iMg_B6B1-={t9YavFr@C zcgXFXn6|YhKQ#37Z$E8DPyXRfu19kFe9rqHe?|^=f6;mGj!*EL@%INie<9hU)W0I?_j}vRzAHfJ>#z#R} z-j9P-*3>X}G=8kO`u3~eHinKbN|=^>VUO(gg{}F?@v?y2wT$#^-NY8A<1`&lEyj79 z)jHM%Hf{OVrv0{qECT>DdT8v4Mvfe1s~rb1^}@{{1}*3lO3%8l@+cv>y`np}kQT#J zsR>|eeqMj?$g}FPUp`G!6N{(4suc}ZNN2>b)b)*Jrjty~6&LNiO=_iCHA!5=(cbIZ z0SuJrp|LN=PcbtXo-`b7&#db*< z+ofNJH->hNzj^tUc!R^LYFknV0br6u6ioBdOcKdBC{D1ZM=oh6|G1N>xu#B)Hj`0< zs)KvZK5i6@TWE`K99!D{A+0z=I(t6L)O + Thomas Vigouroux + Stephan Seitz + Steven Sojka + Santos Gallegos + https://github.com/nvim-treesitter/nvim-treesitter/graphs/contributors + + Type |gO| to see the table of contents. + +============================================================================== +INTRODUCTION *nvim-treesitter-intro* + +nvim-treesitter wraps the Neovim treesitter API to provide functionalities +such as highlighting and incremental selection, and a command to easily +install parsers. + +============================================================================== +QUICK START *nvim-treesitter-quickstart* + +Install the parser for your language + +> + :TSInstall {language} +< + +To get a list of supported languages + +> + :TSInstallInfo +< + +By default, everything is disabled. +To enable supported features, put this in your `init.lua` file: + +> + require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" + ensure_installed = { "c", "lua", "rust" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- List of parsers to ignore installing (for "all") + ignore_install = { "javascript" }, + + highlight = { + -- `false` will disable the whole extension + enable = true, + + -- list of language that will be disabled + disable = { "c", "rust" }, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, + } +< + +See |nvim-treesitter-modules| for a list of all available modules and its options. + +============================================================================== +MODULES *nvim-treesitter-modules* + +|nvim-treesitter| provides several functionalities via modules (and submodules), +each module makes use of the query files defined for each language, + +All modules are disabled by default, and some provide default keymaps. +Each module corresponds to an entry in the dictionary passed to the +`nvim-treesitter.configs.setup` function, this should be in your `init.lua` file. + +> + require'nvim-treesitter.configs'.setup { + -- Modules and its options go here + highlight = { enable = true }, + incremental_selection = { enable = true }, + textobjects = { enable = true }, + } +< + +All modules share some common options, like `enable` and `disable`. +When `enable` is `true` this will enable the module for all supported languages, +if you want to disable the module for some languages you can pass a list to the `disable` option. + +> + require'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + disable = { "cpp", "lua" }, + }, + } +< + +For more fine-grained control, `disable` can also take a function and +whenever it returns `true`, the module is disabled for that buffer. +The function is called once when a module starts in a buffer and receives the +language and buffer number as arguments: + +> + require'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + disable = function(lang, bufnr) -- Disable in large C++ buffers + return lang == "cpp" and vim.api.nvim_buf_line_count(bufnr) > 50000 + end, + }, + } +< + +Options that define or accept a keymap use the same format you use to define +keymaps in Neovim, so you can write keymaps as `gd`, `a`, `a` +`` (control + a), `` (alt + n), `` (enter), etc. + +External plugins can provide their own modules with their own options, +those can also be configured using the `nvim-treesitter.configs.setup` +function. + +------------------------------------------------------------------------------ +HIGHLIGHT *nvim-treesitter-highlight-mod* + +Consistent syntax highlighting. + +Query files: `highlights.scm`. +Supported options: + +- enable: `true` or `false`. +- disable: list of languages. +- additional_vim_regex_highlighting: `true` or `false`, or a list of languages. + Set this to `true` if you depend on 'syntax' being enabled + (like for indentation). Using this option may slow down your editor, + and you may see some duplicate highlights. + Defaults to `false`. + +> + require'nvim-treesitter.configs'.setup { + highlight = { + enable = true, + custom_captures = { + -- Highlight the @foo.bar capture group with the "Identifier" highlight group. + ["foo.bar"] = "Identifier", + }, + -- Setting this to true or a list of languages will run `:h syntax` and tree-sitter at the same time. + additional_vim_regex_highlighting = false, + }, + } +< + +You can also set custom highlight captures +> + lua < + require'nvim-treesitter.configs'.setup { + incremental_selection = { + enable = true, + keymaps = { + init_selection = "gnn", + node_incremental = "grn", + scope_incremental = "grc", + node_decremental = "grm", + }, + }, + } +< + +------------------------------------------------------------------------------ +INDENTATION *nvim-treesitter-indentation-mod* + +Indentation based on treesitter for the |=| operator. +NOTE: this is an experimental feature. + +Query files: `indents.scm`. +Supported options: +- enable: `true` or `false`. +- disable: list of languages. +> + require'nvim-treesitter.configs'.setup { + indent = { + enable = true + }, + } +< +============================================================================== +COMMANDS *nvim-treesitter-commands* + + *:TSInstall* +:TSInstall {language} ...~ + +Install one or more treesitter parsers. +You can use |:TSInstall| `all` to install all parsers. Use |:TSInstall!| to +force the reinstallation of already installed parsers. + *:TSInstallSync* +:TSInstallSync {language} ...~ + +Perform the |:TSInstall| operation synchronously. + + *:TSInstallInfo* +:TSInstallInfo~ + +List information about currently installed parsers + + *:TSUpdate* +:TSUpdate {language} ...~ + +Update the installed parser for one more {language} or all installed parsers +if {language} is omitted. The specified parser is installed if it is not already +installed. + + *:TSUpdateSync* +:TSUpdateSync {language} ...~ + +Perform the |:TSUpdate| operation synchronously. + + *:TSUninstall* +:TSUninstall {language} ...~ + +Deletes the parser for one or more {language}. You can use 'all' for language +to uninstall all parsers. + + *:TSBufEnable* +:TSBufEnable {module}~ + +Enable {module} on the current buffer. +A list of modules can be found at |:TSModuleInfo| + + *:TSBufDisable* +:TSBufDisable {module}~ + +Disable {module} on the current buffer. +A list of modules can be found at |:TSModuleInfo| + + *:TSBufToggle* +:TSBufToggle {module}~ + +Toggle (enable if disabled, disable if enabled) {module} on the current +buffer. +A list of modules can be found at |:TSModuleInfo| + + *:TSEnable* +:TSEnable {module} [{language}]~ + +Enable {module} for the session. +If {language} is specified, enable module for the session only for this +particular language. +A list of modules can be found at |:TSModuleInfo| +A list of languages can be found at |:TSInstallInfo| + + *:TSDisable* +:TSDisable {module} [{language}]~ + +Disable {module} for the session. +If {language} is specified, disable module for the session only for this +particular language. +A list of modules can be found at |:TSModuleInfo| +A list of languages can be found at |:TSInstallInfo| + + *:TSToggle* +:TSToggle {module} [{language}]~ + +Toggle (enable if disabled, disable if enabled) {module} for the session. +If {language} is specified, toggle module for the session only for this +particular language. +A list of modules can be found at |:TSModuleInfo| +A list of languages can be found at |:TSInstallInfo| + + *:TSModuleInfo* +:TSModuleInfo [{module}]~ + +List the state for the given module or all modules for the current session in +a new buffer. + +These highlight groups are used by default: +> + highlight default TSModuleInfoGood guifg=LightGreen gui=bold + highlight default TSModuleInfoBad guifg=Crimson + highlight default link TSModuleInfoHeader Type + highlight default link TSModuleInfoNamespace Statement + highlight default link TSModuleInfoParser Identifier +< + + *:TSEditQuery* +:TSEditQuery {query-group} [{lang}]~ + +Edit the query file for a {query-group} (e.g. highlights, locals) for given +{lang}. If there are multiple the user is prompted to select one of them. +If no such file exists, a buffer for a new file in the user's config directory +is created. If {lang} is not specified, the language of the current buffer +is used. + + *:TSEditQueryUserAfter* +:TSEditQueryUserAfter {query-group} [{lang}]~ + +Same as |:TSEditQuery| but edits a file in the `after` directory of the +user's config directory. Useful to add custom extensions for the queries +provided by a plugin. + +============================================================================== +UTILS *nvim-treesitter-utils* + +Nvim treesitter has some wrapper functions that you can retrieve with: +> + local ts_utils = require 'nvim-treesitter.ts_utils' +< +Methods + *ts_utils.get_node_at_cursor* +get_node_at_cursor(winnr)~ + +`winnr` will be 0 if nil. +Returns the node under the cursor. + + *ts_utils.get_node_text* +get_node_text(node, bufnr)~ + +Returns the text content of a `node`. + + *ts_utils.is_parent* +is_parent(dest, source)~ + +Determines whether `dest` is a parent of `source`. +Returns a boolean. + + *ts_utils.get_named_children* +get_named_children(node)~ + +Returns a table of named children of `node`. + + *ts_utils.get_next_node* +get_next_node(node, allow_switch_parent, allow_next_parent)~ + +Returns the next node within the same parent. +If no node is found, returns `nil`. +If `allow_switch_parent` is true, it will allow switching parent +when the node is the last node. +If `allow_next_parent` is true, it will allow next parent if +the node is the last node and the next parent doesn't have children. + + *ts_utils.get_previous_node* +get_previous_node(node, allow_switch_parents, allow_prev_parent)~ + +Returns the previous node within the same parent. +`allow_switch_parent` and `allow_prev_parent` follow the same rule +as |ts_utils.get_next_node| but if the node is the first node. + + *ts_utils.goto_node* +goto_node(node, goto_end, avoid_set_jump)~ + +Sets cursor to the position of `node` in the current windows. +If `goto_end` is truthy, the cursor is set to the end the node range. +Setting `avoid_set_jump` to `true`, avoids setting the current cursor position +to the jump list. + + *ts_utils.swap_nodes* +swap_nodes(node_or_range1, node_or_range2, bufnr, cursor_to_second)~ + +Swaps the nodes or ranges. +set `cursor_to_second` to true to move the cursor to the second node + + *ts_utils.memoize_by_buf_tick* +memoize_by_buf_tick(fn, options)~ + +Caches the return value for a function and returns the cache value if the tick +of the buffer has not changed from the previous. + + `fn`: a function that takes any arguments + and returns a value to store. + `options?`: + - `bufnr`: a function/value that extracts the bufnr from the given arguments. + - `key`: a function/value that extracts the cache key from the given arguments. + `returns`: a function to call with bufnr as argument to + retrieve the value from the cache + + *ts_utils.node_to_lsp_range* +node_to_lsp_range(node)~ + +Get an lsp formatted range from a node range + + *ts_utils.get_node_range* +get_node_range(node_or_range)~ + +Get the range from either a node or a range + + *ts_utils.node_length* +node_length(node)~ + +Get the byte length of node range + + *ts_utils.update_selection* +update_selection(buf, node)~ + +Set the selection to the node range + + *ts_utils.highlight_range* +highlight_range(range, buf, hl_namespace, hl_group)~ + +Set a highlight that spans the given range + + *ts_utils.highlight_node* +highlight_node(node, buf, hl_namespace, hl_group)~ + +Set a highlight that spans the given node's range + +============================================================================== +FUNCTIONS *nvim-treesitter-functions* + + *nvim_treesitter#statusline()* +nvim_treesitter#statusline(opts)~ + +Returns a string describing the current position in the file. This +could be used as a statusline indicator. +Default options (lua syntax): +> + { + indicator_size = 100, + type_patterns = {'class', 'function', 'method'}, + transform_fn = function(line) return line:gsub('%s*[%[%(%{]*%s*$', '') end, + separator = ' -> ' + } +< +- `indicator_size` - How long should the string be. If longer, it is cut from + the beginning. +- `type_patterns` - Which node type patterns to match. +- `transform_fn` - Function used to transform the single item in line. By + default removes opening brackets and spaces from end. +- `separator` - Separator between nodes. + + *nvim_treesitter#foldexpr()* +nvim_treesitter#foldexpr()~ + +Functions to be used to determine the fold level at a given line number. +To use it: > + set foldmethod=expr + set foldexpr=nvim_treesitter#foldexpr() +< + +This will respect your 'foldminlines' and 'foldnestmax' settings. + +Note: This is highly experimental, and folding can break on some types of + edits. If you encounter such breakage, hiting `zx` should fix folding. + In any case, feel free to open an issue with the reproducing steps. + +============================================================================== +HIGHLIGHTS *nvim-treesitter-highlights* + +The following is a list of highlights groups, the syntactic elements they +apply to, and some examples. + + *hl-TSAttribute* +`TSAttribute` +Annotations that can be attached to the code to denote some kind of meta +information. e.g. C++/Dart attributes. + + *hl-TSBoolean* +`TSBoolean` +Boolean literals: `True` and `False` in Python. + + *hl-TSCharacter* +`TSCharacter` +Character literals: `'a'` in C. + + *hl-TSCharacterSpecial* +`TSCharacterSpecial` +Special characters. + + *hl-TSComment* +`TSComment` +Line comments and block comments. + + *hl-TSConditional* +`TSConditional` +Keywords related to conditionals: `if`, `when`, `cond`, etc. + + *hl-TSConstant* +`TSConstant` +Constants identifiers. These might not be semantically constant. +E.g. uppercase variables in Python. + + *hl-TSConstBuiltin* +`TSConstBuiltin` +Built-in constant values: `nil` in Lua. + + *hl-TSConstMacro* +`TSConstMacro` +Constants defined by macros: `NULL` in C. + + *hl-TSConstructor* +`TSConstructor` +Constructor calls and definitions: `{}` in Lua, and Java constructors. + + *hl-TSDebug* +`TSDebug` +Debugging statements. + + *hl-TSDefine* +`TSDefine` +Preprocessor #define statements. + + *hl-TSError* +`TSError` +Syntax/parser errors. This might highlight large sections of code while the +user is typing still incomplete code, use a sensible highlight. + + *hl-TSException* +`TSException` +Exception related keywords: `try`, `except`, `finally` in Python. + + *hl-TSField* +`TSField` +Object and struct fields. + + *hl-TSFloat* +`TSFloat` +Floating-point number literals. + + *hl-TSFunction* +`TSFunction` +Function calls and definitions. + + *hl-TSFuncBuiltin* +`TSFuncBuiltin` +Built-in functions: `print` in Lua. + + *hl-TSFuncMacro* +`TSFuncMacro` +Macro defined functions (calls and definitions): each `macro_rules` in +Rust. + + *hl-TSInclude* +`TSInclude` +File or module inclusion keywords: `#include` in C, `use` or `extern crate` in +Rust. + + *hl-TSKeyword* +`TSKeyword` +Keywords that don't fit into other categories. + + *hl-TSKeywordFunction* +`TSKeywordFunction` +Keywords used to define a function: `function` in Lua, `def` and `lambda` in +Python. + + *hl-TSKeywordOperator* +`TSKeywordOperator` +Unary and binary operators that are English words: `and`, `or` in Python; +`sizeof` in C. + + *hl-TSKeywordReturn* +`TSKeywordReturn` +Keywords like `return` and `yield`. + + *hl-TSLabel* +`TSLabel` +GOTO labels: `label:` in C, and `::label::` in Lua. + + *hl-TSMethod* +`TSMethod` +Method calls and definitions. + + *hl-TSNamespace* +`TSNamespace` +Identifiers referring to modules and namespaces. + + *hl-None* +`TSNone` +No highlighting (sets all highlight arguments to `NONE`). this group is used +to clear certain ranges, for example, string interpolations. Don't change the +values of this highlight group. + + *hl-TSNumber* +`TSNumber` +Numeric literals that don't fit into other categories. + + *hl-TSOperator* +`TSOperator` +Binary or unary operators: `+`, and also `->` and `*` in C. + + *hl-TSParameter* +`TSParameter` +Parameters of a function. + + *hl-TSParameterReference* +`TSParameterReference` +References to parameters of a function. + + *hl-TSPreProc* +`TSPreProc` +Preprocessor #if, #else, #endif, etc. + + *hl-TSProperty* +`TSProperty` +Same as `TSField`. + + *hl-TSPunctDelimiter* +`TSPunctDelimiter` +Punctuation delimiters: Periods, commas, semicolons, etc. + + *hl-TSPunctBracket* +`TSPunctBracket` +Brackets, braces, parentheses, etc. + + *hl-TSPunctSpecial* +`TSPunctSpecial` +Special punctuation that doesn't fit into the previous categories. + + *hl-TSRepeat* +`TSRepeat` +Keywords related to loops: `for`, `while`, etc. + + *hl-StorageClass* +`TSStorageClass` +Keywords that affect how a variable is stored: `static`, `comptime`, `extern`, +etc. + + *hl-TSString* +`TSString` +String literals. + + *hl-TSStringRegex* +`TSStringRegex` +Regular expression literals. + + *hl-TSStringEscape* +`TSStringEscape` +Escape characters within a string: `\n`, `\t`, etc. + + *hl-TSStringSpecial* +`TSStringSpecial` +Strings with special meaning that don't fit into the previous categories. + + *hl-TSSymbol* +`TSSymbol` +Identifiers referring to symbols or atoms. + + *hl-TSTag* +`TSTag` +Tags like HTML tag names. + + *hl-TSTagAttribute* +`TSTagAttribute` +HTML tag attributes. + + *hl-TSTagDelimiter* +`TSTagDelimiter` +Tag delimiters like `<` `>` `/`. + + *hl-TSText* +`TSText` +Non-structured text. Like text in a markup language. + + *hl-TSSTrong* +`TSStrong` +Text to be represented in bold. + + *hl-TSEmphasis* +`TSEmphasis` +Text to be represented with emphasis. + + *hl-TSUnderline* +`TSUnderline` +Text to be represented with an underline. + + *hl-TSStrike* +`TSStrike` +Strikethrough text. + + *hl-TSTitle* +`TSTitle` +Text that is part of a title. + + *hl-TSLiteral* +`TSLiteral` +Literal or verbatim text. + + *hl-TSURI* +`TSURI` +URIs like hyperlinks or email addresses. + + *hl-TSMath* +`TSMath` +Math environments like LaTeX's `$ ... $` + + *hl-TSTextReference* +`TSTextReference` +Footnotes, text references, citations, etc. + + *hl-TSEnvironment* +`TSEnvironment` +Text environments of markup languages. + + *hl-TSEnvironmentName* +`TSEnvironmentName` +Text/string indicating the type of text environment. Like the name of a +`\begin` block in LaTeX. + + *hl-TSNote* +`TSNote` +Text representation of an informational note. + + *TSWarning* +`TSWarning` +Text representation of a warning note. + + *TSDanger* +`TSDanger` +Text representation of a danger note. + + *hl-TSTodo* +`TSTodo` +Anything that needs extra attention, such as keywords like TODO or FIXME. + + *hl-TSType* +`TSType` +Type (and class) definitions and annotations. + + *hl-TSTypeBuiltin* +`TSTypeBuiltin` +Built-in types: `i32` in Rust. + + *hl-TSTypeQualifier* +`TSTypeQualifier` +Qualifiers on types, e.g. `const` or `volatile` in C or `mut` in Rust. + + *hl-TSTypeDefinition* +`TSTypeDefinition` +Type definitions, e.g. `typedef` in C. + + *hl-TSVariable* +`TSVariable` +Variable names that don't fit into other categories. + + *hl-TSVariableBuiltin* +`TSVariableBuiltin` +Variable names defined by the language: `this` or `self` in Javascript. + +============================================================================== +PERFORMANCE *nvim-treesitter-performance* + +`nvim-treesitter` checks the 'runtimepath' on startup in order to discover +available parsers and queries and index them. As a consequence, a very long +'runtimepath' might result in delayed startup times. + + +vim:tw=78:ts=8:expandtab:noet:ft=help:norl: diff --git a/bundle/nvim-treesitter/ftdetect/cooklang.vim b/bundle/nvim-treesitter/ftdetect/cooklang.vim new file mode 100644 index 000000000..4f165b94f --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/cooklang.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.cook set filetype=cooklang diff --git a/bundle/nvim-treesitter/ftdetect/fusion.vim b/bundle/nvim-treesitter/ftdetect/fusion.vim new file mode 100644 index 000000000..7a7839b23 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/fusion.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.fusion setfiletype fusion diff --git a/bundle/nvim-treesitter/ftdetect/gdresource.vim b/bundle/nvim-treesitter/ftdetect/gdresource.vim new file mode 100644 index 000000000..df6b5b095 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/gdresource.vim @@ -0,0 +1,2 @@ +autocmd BufRead,BufNewFile *.tscn setlocal ft=gdresource +autocmd BufRead,BufNewFile *.tres setlocal ft=gdresource diff --git a/bundle/nvim-treesitter/ftdetect/gdscript.vim b/bundle/nvim-treesitter/ftdetect/gdscript.vim new file mode 100644 index 000000000..eaae36f38 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/gdscript.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.gd set ft=gdscript diff --git a/bundle/nvim-treesitter/ftdetect/glimmer.vim b/bundle/nvim-treesitter/ftdetect/glimmer.vim new file mode 100644 index 000000000..510b0c3d8 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/glimmer.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.hbs set ft=handlebars diff --git a/bundle/nvim-treesitter/ftdetect/glsl.vim b/bundle/nvim-treesitter/ftdetect/glsl.vim new file mode 100644 index 000000000..6d74fdd9b --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/glsl.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.glsl set filetype=glsl diff --git a/bundle/nvim-treesitter/ftdetect/gowork.vim b/bundle/nvim-treesitter/ftdetect/gowork.vim new file mode 100644 index 000000000..47edcb63c --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/gowork.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile go.work set filetype=gowork diff --git a/bundle/nvim-treesitter/ftdetect/graphql.vim b/bundle/nvim-treesitter/ftdetect/graphql.vim new file mode 100644 index 000000000..c4f3b7540 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/graphql.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.graphql,*.graphqls,*.gql setfiletype graphql diff --git a/bundle/nvim-treesitter/ftdetect/hack.vim b/bundle/nvim-treesitter/ftdetect/hack.vim new file mode 100644 index 000000000..e835a27a3 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/hack.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.hack,*.hackpartial setfiletype hack diff --git a/bundle/nvim-treesitter/ftdetect/hcl.vim b/bundle/nvim-treesitter/ftdetect/hcl.vim new file mode 100644 index 000000000..9d0c7fadf --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/hcl.vim @@ -0,0 +1,2 @@ +autocmd BufRead,BufNewFile *.hcl set filetype=hcl +autocmd BufRead,BufNewFile *.tf,*.tfvars set filetype=terraform diff --git a/bundle/nvim-treesitter/ftdetect/heex.vim b/bundle/nvim-treesitter/ftdetect/heex.vim new file mode 100644 index 000000000..6c7658877 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/heex.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.heex set filetype=heex diff --git a/bundle/nvim-treesitter/ftdetect/hjson.vim b/bundle/nvim-treesitter/ftdetect/hjson.vim new file mode 100644 index 000000000..65ed94625 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/hjson.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.hjson set filetype=hjson diff --git a/bundle/nvim-treesitter/ftdetect/json5.vim b/bundle/nvim-treesitter/ftdetect/json5.vim new file mode 100644 index 000000000..ba74f217a --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/json5.vim @@ -0,0 +1 @@ +autocmd BufNewFile,BufRead *.json5 set ft=json5 diff --git a/bundle/nvim-treesitter/ftdetect/ledger.vim b/bundle/nvim-treesitter/ftdetect/ledger.vim new file mode 100644 index 000000000..808e77e9e --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/ledger.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.ldg,*.ledger,*.journal setfiletype ledger diff --git a/bundle/nvim-treesitter/ftdetect/nix.vim b/bundle/nvim-treesitter/ftdetect/nix.vim new file mode 100644 index 000000000..96bff17d6 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/nix.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.nix setfiletype nix diff --git a/bundle/nvim-treesitter/ftdetect/prisma.vim b/bundle/nvim-treesitter/ftdetect/prisma.vim new file mode 100644 index 000000000..704717ef3 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/prisma.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.prisma set filetype=prisma diff --git a/bundle/nvim-treesitter/ftdetect/pug.vim b/bundle/nvim-treesitter/ftdetect/pug.vim new file mode 100644 index 000000000..3ca05c4a2 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/pug.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.pug setlocal filetype=pug diff --git a/bundle/nvim-treesitter/ftdetect/ql.vim b/bundle/nvim-treesitter/ftdetect/ql.vim new file mode 100644 index 000000000..b3dd5757f --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/ql.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.ql,*.qll setfiletype ql diff --git a/bundle/nvim-treesitter/ftdetect/query.vim b/bundle/nvim-treesitter/ftdetect/query.vim new file mode 100644 index 000000000..8339b6ba9 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/query.vim @@ -0,0 +1,11 @@ +" Last Change: 2020 Sep 01 + +function! s:shouldFt(path) + let l:q_dir = fnamemodify(a:path, ":p:h:h:t") + + if l:q_dir =~? "queries" + setlocal ft=query + endif +endfunction + +autocmd BufNewFile,BufRead *.scm call s:shouldFt(expand("%")) diff --git a/bundle/nvim-treesitter/ftdetect/surface.vim b/bundle/nvim-treesitter/ftdetect/surface.vim new file mode 100644 index 000000000..6fb2a69be --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/surface.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.sface set filetype=surface diff --git a/bundle/nvim-treesitter/ftdetect/teal.vim b/bundle/nvim-treesitter/ftdetect/teal.vim new file mode 100644 index 000000000..ffc63f143 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/teal.vim @@ -0,0 +1 @@ +autocmd BufRead,BufNewFile *.tl setfiletype teal diff --git a/bundle/nvim-treesitter/ftdetect/tlaplus.vim b/bundle/nvim-treesitter/ftdetect/tlaplus.vim new file mode 100644 index 000000000..a60919b21 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/tlaplus.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.tla set filetype=tla diff --git a/bundle/nvim-treesitter/ftdetect/yang.vim b/bundle/nvim-treesitter/ftdetect/yang.vim new file mode 100644 index 000000000..295e7c3d3 --- /dev/null +++ b/bundle/nvim-treesitter/ftdetect/yang.vim @@ -0,0 +1 @@ +au BufRead,BufNewFile *.yang set filetype=yang diff --git a/bundle/nvim-treesitter/lockfile.json b/bundle/nvim-treesitter/lockfile.json new file mode 100644 index 000000000..cc26503f2 --- /dev/null +++ b/bundle/nvim-treesitter/lockfile.json @@ -0,0 +1,332 @@ +{ + "astro": { + "revision": "6602ccbf9a5f79845dad62f1e118e07f97e3533c" + }, + "bash": { + "revision": "275effdfc0edce774acf7d481f9ea195c6c403cd" + }, + "beancount": { + "revision": "78b8ddca3ab774573a4e3bf64eabd79e9452cea9" + }, + "bibtex": { + "revision": "ccfd77db0ed799b6c22c214fe9d2937f47bc8b34" + }, + "c": { + "revision": "e348e8ec5efd3aac020020e4af53d2ff18f393a9" + }, + "c_sharp": { + "revision": "5b6ae1f88e741b9ed738891ad1362fb9f2041671" + }, + "clojure": { + "revision": "879f0e726295807d917d576fcf9e1e432c4c20fc" + }, + "cmake": { + "revision": "5020572408a386d5d2dfac3516584f5edda7a49b" + }, + "comment": { + "revision": "a37ca370310ac6f89b6e0ebf2b86b2219780494e" + }, + "commonlisp": { + "revision": "c7e814975ab0d0d04333d1f32391c41180c58919" + }, + "cooklang": { + "revision": "5e113412aadb78955c27010daa4dbe1d202013cf" + }, + "cpp": { + "revision": "a832195eb3685a279856bb480ce19cff19554b6d" + }, + "css": { + "revision": "a03f1d2d1dfbf6f8e0fdca5f9ff030228241eb57" + }, + "cuda": { + "revision": "5178a7a5b25dc7ee4a69bf72f31bd6d3ff0a0795" + }, + "d": { + "revision": "c2fbf21bd3aa45495fe13247e040ad5815250032" + }, + "dart": { + "revision": "6a25376685d1d47968c2cef06d4db8d84a70025e" + }, + "devicetree": { + "revision": "877adbfa0174d25894c40fa75ad52d4515a36368" + }, + "dockerfile": { + "revision": "25c71d6a24cdba8f0c74ef40d4d2d93defd7e196" + }, + "dot": { + "revision": "917230743aa10f45a408fea2ddb54bbbf5fbe7b7" + }, + "eex": { + "revision": "f742f2fe327463335e8671a87c0b9b396905d1d1" + }, + "elixir": { + "revision": "1dabc1c790e07115175057863808085ea60dd08a" + }, + "elm": { + "revision": "9835f900e4df40277f0701d1bc0b6cee0853f81b" + }, + "elvish": { + "revision": "e50787cadd3bc54f6d9c0704493a79078bb8a4e5" + }, + "erlang": { + "revision": "fab680273af1a8f5cc0c3a0c62cbf5b1bea71f39" + }, + "fennel": { + "revision": "d37fd84a702b78ff0282f223ece83c61ab062a6e" + }, + "fish": { + "revision": "d482d70ea8e191c05b2c1b613ed6fdff30a14da0" + }, + "foam": { + "revision": "fdb7f14b885abfc4df57728c9b2a2f2ad24d3cb7" + }, + "fortran": { + "revision": "f0f2f100952a353e64e26b0fa710b4c296d7af13" + }, + "fusion": { + "revision": "19db2f47ba4c3a0f6238d4ae0e2abfca16e61dd6" + }, + "gdscript": { + "revision": "2a6abdaa47fcb91397e09a97c7433fd995ea46c6" + }, + "gleam": { + "revision": "cfcbca3f8f734773878e00d7bfcedea98eb10be2" + }, + "glimmer": { + "revision": "5caf63ac0e3c549b90c9aeb042871206b4b7bc16" + }, + "glsl": { + "revision": "ffb93961426926554a0ba4a389ea6e9d6fafdea9" + }, + "go": { + "revision": "c8fed1f0847a65a04a4b8cb7655f5f416e0742ca" + }, + "godot_resource": { + "revision": "b6ef0768711086a86b3297056f9ffb5cc1d77b4a" + }, + "gomod": { + "revision": "e8f51f8e4363a3d9a427e8f63f4c1bbc5ef5d8d0" + }, + "gowork": { + "revision": "6dd9dd79fb51e9f2abc829d5e97b15015b6a8ae2" + }, + "graphql": { + "revision": "5e66e961eee421786bdda8495ed1db045e06b5fe" + }, + "hack": { + "revision": "d434b4e6c9af0524b163d7a912c8ce79d2b1f778" + }, + "haskell": { + "revision": "ed976b81b00ce7b72b99bca75e7a616cc526220c" + }, + "hcl": { + "revision": "d559c46ba170808b23a73da0cf49f315d221d095" + }, + "heex": { + "revision": "592e22292a367312c35e13de7fdb888f029981d6" + }, + "help": { + "revision": "41ac50500e68fadc139737bbee2a0618628b822b" + }, + "hjson": { + "revision": "02fa3b79b3ff9a296066da6277adfc3f26cbc9e0" + }, + "hocon": { + "revision": "bb412e2633f4a3611a4e16efe58d917093bb4782" + }, + "html": { + "revision": "161a92474a7bb2e9e830e48e76426f38299d99d1" + }, + "http": { + "revision": "bfddd16b1cf78e0042fd1f6846a179f76a254e20" + }, + "java": { + "revision": "881b84fe7078651af5077cc4cea4c85f9fddde3b" + }, + "javascript": { + "revision": "fdeb68ac8d2bd5a78b943528bb68ceda3aade2eb" + }, + "jsdoc": { + "revision": "189a6a4829beb9cdbe837260653b4a3dfb0cc3db" + }, + "json": { + "revision": "203e239408d642be83edde8988d6e7b20a19f0e8" + }, + "json5": { + "revision": "5dd5cdc418d9659682556b6adca2dd9ace0ac6d2" + }, + "jsonc": { + "revision": "02b01653c8a1c198ae7287d566efa86a135b30d5" + }, + "julia": { + "revision": "12ea597262125fc22fd2e91aa953ac69b19c26ca" + }, + "kotlin": { + "revision": "a4f71eb9b8c9b19ded3e0e9470be4b1b77c2b569" + }, + "lalrpop": { + "revision": "7744b56f03ac1e5643fad23c9dd90837fe97291e" + }, + "latex": { + "revision": "ab9c1c59de5da1a8d8c629c81d856a6378b6f116" + }, + "ledger": { + "revision": "1050a25df55a62878102d10e524b5184b316b7ad" + }, + "llvm": { + "revision": "e9948edc41e9e5869af99dddb2b5ff5cc5581af6" + }, + "lua": { + "revision": "2b4ffd5a5ffd0c6b4c84f0d9e003050a70db2a37" + }, + "make": { + "revision": "a4b9187417d6be349ee5fd4b6e77b4172c6827dd" + }, + "markdown": { + "revision": "d24196f9b3e5af6fcb2ec2a0b6cbc5c06f58b85e" + }, + "ninja": { + "revision": "0a95cfdc0745b6ae82f60d3a339b37f19b7b9267" + }, + "nix": { + "revision": "6d6aaa50793b8265b6a8b6628577a0083d3b923d" + }, + "norg": { + "revision": "17d61df817c1e0a9cdef8d915d4e4c556b7cf68c" + }, + "ocaml": { + "revision": "23d419ba45789c5a47d31448061557716b02750a" + }, + "ocaml_interface": { + "revision": "23d419ba45789c5a47d31448061557716b02750a" + }, + "ocamllex": { + "revision": "ac1d5957e719d49bd6acd27439b79843e4daf8ed" + }, + "pascal": { + "revision": "2fd40f477d3e2794af152618ccfac8d92eb72a66" + }, + "perl": { + "revision": "bbf86084d9b7eb4768f3fb9fe094b3e0600057b1" + }, + "php": { + "revision": "3c17a28da38afac41332d3ce79bbd8951867f346" + }, + "phpdoc": { + "revision": "d9150d4cb5941f6ff10adba89bfa1f11f4b05b37" + }, + "pioasm": { + "revision": "924aadaf5dea2a6074d72027b064f939acf32e20" + }, + "prisma": { + "revision": "bf0833cbedb2c5b39250f5ba900f1239a16c6749" + }, + "pug": { + "revision": "5875f9a7d94836708119b0a1102bb5792e8bf673" + }, + "python": { + "revision": "78c4e9b6b2f08e1be23b541ffced47b15e2972ad" + }, + "ql": { + "revision": "8e7fd7e638d4a0ec7a792ee16b19dbc6407aa810" + }, + "query": { + "revision": "5217c6805c09f8fc00ed13d17d5fcb791437aee6" + }, + "r": { + "revision": "cc04302e1bff76fa02e129f332f44636813b0c3c" + }, + "rasi": { + "revision": "e2961f02244c068a67549adf896b0779e4a29516" + }, + "regex": { + "revision": "e1cfca3c79896ff79842f057ea13e529b66af636" + }, + "rego": { + "revision": "858ca3013da4d50ea1bdb32162a2bfb43641b422" + }, + "rst": { + "revision": "b74770c0166f28c1a0ab293513a78712ca1c338b" + }, + "ruby": { + "revision": "0b107de5415e7470a30ef1a390d9db3306432bdb" + }, + "rust": { + "revision": "0509e440ae042db6483984b3a56b3c5f24b5d9b9" + }, + "scala": { + "revision": "ec6047f531e7d4c13787d4ff208b94a84de34165" + }, + "scheme": { + "revision": "a1d2233f4e5498bb305858323c93525e1dd165c0" + }, + "scss": { + "revision": "c478c6868648eff49eb04a4df90d703dc45b312a" + }, + "slint": { + "revision": "0d4dda94f96623302dfc234e06be62a5717f47da" + }, + "solidity": { + "revision": "52ed0880c0126df2f2c7693f215fe6f38e4a2e0a" + }, + "sparql": { + "revision": "05f949d3c1c15e3261473a244d3ce87777374dec" + }, + "supercollider": { + "revision": "0f0e5b5a96dd3e048a9c3db648ed969c44068bff" + }, + "surface": { + "revision": "f4586b35ac8548667a9aaa4eae44456c1f43d032" + }, + "svelte": { + "revision": "84c90ee15f851e1541c25c86e8a4338f5b4d5af2" + }, + "swift": { + "revision": "897df54ad1b2d103dcab3df94f335fceefa230dc" + }, + "teal": { + "revision": "fcc5f6f4d194dede4e676834ff28a506e39e17b4" + }, + "tlaplus": { + "revision": "dde405e5128c3c47ab8aa014d21b6e5296ca450f" + }, + "todotxt": { + "revision": "0207f6a4ab6aeafc4b091914d31d8235049a2578" + }, + "toml": { + "revision": "8bd2056818b21860e3d756b5a58c4f6e05fb744e" + }, + "tsx": { + "revision": "8e9dba7bd7cf089838a036a98be94db53ba2d0a9" + }, + "turtle": { + "revision": "085437f5cb117703b7f520dd92161140a684f092" + }, + "typescript": { + "revision": "8e9dba7bd7cf089838a036a98be94db53ba2d0a9" + }, + "vala": { + "revision": "31a08784cc74b61cb10c5d8314cf8a8aa98aa9a8" + }, + "verilog": { + "revision": "8f6b1f357d1231c420404b5f7a368a73c25adfa2" + }, + "vim": { + "revision": "68f7cacfd9ae4698181511c9fdd6641bc25a260b" + }, + "vue": { + "revision": "91fe2754796cd8fba5f229505a23fa08f3546c06" + }, + "wgsl": { + "revision": "5ca98b174f7dddf69fb7a80c54d49badd1f1f8c4" + }, + "yaml": { + "revision": "0e36bed171768908f331ff7dff9d956bae016efb" + }, + "yang": { + "revision": "8e9d175982afcefa3dac8ca20d40d1643accd2bd" + }, + "zig": { + "revision": "4cff36421dae9c05388b86cd64d2bab4b9ed6676" + } +} diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter.lua b/bundle/nvim-treesitter/lua/nvim-treesitter.lua new file mode 100644 index 000000000..af46bd017 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter.lua @@ -0,0 +1,88 @@ +if not pcall(require, "vim.treesitter.languagetree") then + error "nvim-treesitter requires a more recent Neovim nightly version!" +end + +local install = require "nvim-treesitter.install" +local utils = require "nvim-treesitter.utils" +local ts_utils = require "nvim-treesitter.ts_utils" +local info = require "nvim-treesitter.info" +local configs = require "nvim-treesitter.configs" +local parsers = require "nvim-treesitter.parsers" + +-- Registers all query predicates +require "nvim-treesitter.query_predicates" + +local M = {} + +function M.setup() + utils.setup_commands("install", install.commands) + utils.setup_commands("info", info.commands) + utils.setup_commands("configs", configs.commands) + configs.init() +end + +function M.define_modules(...) + configs.define_modules(...) +end + +local get_line_for_node = function(node, type_patterns, transform_fn) + local node_type = node:type() + local is_valid = false + for _, rgx in ipairs(type_patterns) do + if node_type:find(rgx) then + is_valid = true + break + end + end + if not is_valid then + return "" + end + local line = transform_fn(vim.trim(ts_utils.get_node_text(node)[1] or "")) + -- Escape % to avoid statusline to evaluate content as expression + return line:gsub("%%", "%%%%") +end + +-- Trim spaces and opening brackets from end +local transform_line = function(line) + return line:gsub("%s*[%[%(%{]*%s*$", "") +end + +function M.statusline(opts) + if not parsers.has_parser() then + return + end + local options = opts or {} + if type(opts) == "number" then + options = { indicator_size = opts } + end + local indicator_size = options.indicator_size or 100 + local type_patterns = options.type_patterns or { "class", "function", "method" } + local transform_fn = options.transform_fn or transform_line + local separator = options.separator or " -> " + + local current_node = ts_utils.get_node_at_cursor() + if not current_node then + return "" + end + + local lines = {} + local expr = current_node + + while expr do + local line = get_line_for_node(expr, type_patterns, transform_fn) + if line ~= "" and not vim.tbl_contains(lines, line) then + table.insert(lines, 1, line) + end + expr = expr:parent() + end + + local text = table.concat(lines, separator) + local text_len = #text + if text_len > indicator_size then + return "..." .. text:sub(text_len - indicator_size, text_len) + end + + return text +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/caching.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/caching.lua new file mode 100644 index 000000000..cff0b5a1f --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/caching.lua @@ -0,0 +1,48 @@ +local api = vim.api + +local M = {} + +--- Creates a cache table for buffers keyed by a type name. +--- Cache entries attach to the buffer and cleanup entries +--- as buffers are detached. +function M.create_buffer_cache() + local cache = {} + + local items = setmetatable({}, { + __index = function(tbl, key) + rawset(tbl, key, {}) + return rawget(tbl, key) + end, + }) + + function cache.set(type_name, bufnr, value) + if not cache.has(type_name, bufnr) then + -- Clean up the cache if the buffer is detached + -- to avoid memory leaks + api.nvim_buf_attach(bufnr, false, { + on_detach = function() + cache.remove(type_name, bufnr) + return true + end, + }) + end + + items[type_name][bufnr] = value + end + + function cache.get(type_name, bufnr) + return items[type_name][bufnr] + end + + function cache.has(type_name, bufnr) + return cache.get(type_name, bufnr) ~= nil + end + + function cache.remove(type_name, bufnr) + items[type_name][bufnr] = nil + end + + return cache +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/configs.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/configs.lua new file mode 100644 index 000000000..d4aa98e89 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/configs.lua @@ -0,0 +1,559 @@ +local api = vim.api + +local queries = require "nvim-treesitter.query" +local ts_query = require "vim.treesitter.query" +local parsers = require "nvim-treesitter.parsers" +local utils = require "nvim-treesitter.utils" +local caching = require "nvim-treesitter.caching" + +local M = {} + +local config = { + modules = {}, + sync_install = false, + ensure_installed = {}, + ignore_install = {}, + update_strategy = "lockfile", +} +-- List of modules that need to be setup on initialization. +local queued_modules_defs = {} +-- Whether we've initialized the plugin yet. +local is_initialized = false +local builtin_modules = { + highlight = { + module_path = "nvim-treesitter.highlight", + -- @deprecated: use `highlight.set_custom_captures` instead + custom_captures = {}, + enable = false, + is_supported = function(lang) + return queries.has_highlights(lang) + end, + additional_vim_regex_highlighting = false, + }, + incremental_selection = { + module_path = "nvim-treesitter.incremental_selection", + enable = false, + keymaps = { + init_selection = "gnn", + node_incremental = "grn", + scope_incremental = "grc", + node_decremental = "grm", + }, + is_supported = function() + return true + end, + }, + indent = { + module_path = "nvim-treesitter.indent", + enable = false, + is_supported = queries.has_indents, + }, +} + +local attached_buffers_by_module = caching.create_buffer_cache() + +-- Resolves a module by requiring the `module_path` or using the module definition. +local function resolve_module(mod_name) + local config_mod = M.get_module(mod_name) + + if not config_mod then + return + end + + if type(config_mod.attach) == "function" and type(config_mod.detach) == "function" then + return config_mod + elseif type(config_mod.module_path) == "string" then + return require(config_mod.module_path) + end +end + +-- Enables and attaches the module to a buffer for lang. +-- @param mod path to module +-- @param bufnr buffer number, defaults to current buffer +-- @param lang language, defaults to current language +local function enable_module(mod, bufnr, lang) + local module = M.get_module(mod) + if not module then + return + end + + bufnr = bufnr or api.nvim_get_current_buf() + lang = lang or parsers.get_buf_lang(bufnr) + + if not module.enable then + if module.enabled_buffers then + module.enabled_buffers[bufnr] = true + else + module.enabled_buffers = { [bufnr] = true } + end + end + + M.attach_module(mod, bufnr, lang) +end + +-- Enables autocomands for the module. +-- After the module is loaded `loaded` will be set to true for the module. +-- @param mod path to module +local function enable_mod_conf_autocmd(mod) + local config_mod = M.get_module(mod) + if not config_mod or config_mod.loaded then + return + end + + local cmd = string.format("lua require'nvim-treesitter.configs'.reattach_module('%s')", mod) + api.nvim_command(string.format("autocmd NvimTreesitter FileType * %s", cmd)) + + config_mod.loaded = true +end + +-- Enables the module globally and for all current buffers. +-- After enabled, `enable` will be set to true for the module. +-- @param mod path to module +local function enable_all(mod) + local config_mod = M.get_module(mod) + if not config_mod then + return + end + + enable_mod_conf_autocmd(mod) + config_mod.enable = true + config_mod.enabled_buffers = nil + + for _, bufnr in pairs(api.nvim_list_bufs()) do + enable_module(mod, bufnr) + end +end + +-- Disables and detaches the module for a buffer. +-- @param mod path to module +-- @param bufnr buffer number, defaults to current buffer +local function disable_module(mod, bufnr) + local module = M.get_module(mod) + if not module then + return + end + + bufnr = bufnr or api.nvim_get_current_buf() + if module.enabled_buffers then + module.enabled_buffers[bufnr] = false + end + M.detach_module(mod, bufnr) +end + +-- Disables autocomands for the module. +-- After the module is unloaded `loaded` will be set to false for the module. +-- @param mod path to module +local function disable_mod_conf_autocmd(mod) + local config_mod = M.get_module(mod) + if not config_mod or not config_mod.loaded then + return + end + -- TODO(kyazdani): detach the correct autocmd... doesn't work when using %s, cmd. + -- This will remove all autocomands! + api.nvim_command "autocmd! NvimTreesitter FileType *" + config_mod.loaded = false +end + +-- Disables the module globally and for all current buffers. +-- After disabled, `enable` will be set to false for the module. +-- @param mod path to module +local function disable_all(mod) + local config_mod = M.get_module(mod) + if not config_mod then + return + end + + config_mod.enabled_buffers = nil + disable_mod_conf_autocmd(mod) + config_mod.enable = false + + for _, bufnr in pairs(api.nvim_list_bufs()) do + disable_module(mod, bufnr) + end +end + +-- Toggles a module for a buffer +-- @param mod path to module +-- @param bufnr buffer number, defaults to current buffer +-- @param lang language, defaults to current language +local function toggle_module(mod, bufnr, lang) + bufnr = bufnr or api.nvim_get_current_buf() + lang = lang or parsers.get_buf_lang(bufnr) + + if attached_buffers_by_module.has(mod, bufnr) then + disable_module(mod, bufnr) + else + enable_module(mod, bufnr, lang) + end +end + +-- Toggles the module globally and for all current buffers. +-- @param mod path to module +local function toggle_all(mod) + local config_mod = M.get_module(mod) + if not config_mod then + return + end + + if config_mod.enable then + disable_all(mod) + else + enable_all(mod) + end +end + +-- Recurses through all modules including submodules +-- @param accumulator function called for each module +-- @param root root configuration table to start at +-- @param path prefix path +local function recurse_modules(accumulator, root, path) + root = root or config.modules + + for name, module in pairs(root) do + local new_path = path and (path .. "." .. name) or name + + if M.is_module(module) then + accumulator(name, module, new_path, root) + elseif type(module) == "table" then + recurse_modules(accumulator, module, new_path) + end + end +end + +-- Shows current configuration of all nvim-treesitter modules +-- @param process_function function used as the `process` parameter +-- for vim.inspect (https://github.com/kikito/inspect.lua#optionsprocess) +local function config_info(process_function) + process_function = process_function + or function(item, path) + if path[#path] == vim.inspect.METATABLE then + return + end + if path[#path] == "is_supported" then + return + end + return item + end + print(vim.inspect(config, { process = process_function })) +end + +if not vim.ui then + vim.ui = { + select = function(items, opts, on_choice) + vim.validate { + items = { items, "table", false }, + on_choice = { on_choice, "function", false }, + } + opts = opts or {} + local choices = { opts.prompt or "Select one of:" } + local format_item = opts.format_item or tostring + for i, item in pairs(items) do + table.insert(choices, string.format("%d: %s", i, format_item(item))) + end + local choice = vim.fn.inputlist(choices) + if choice < 1 or choice > #items then + on_choice(nil, nil) + else + on_choice(items[choice], choice) + end + end, + } +end + +function M.edit_query_file(query_group, lang) + lang = lang or parsers.get_buf_lang() + local files = ts_query.get_query_files(lang, query_group, true) + if #files == 0 then + utils.notify "No query file found! Creating a new one!" + M.edit_query_file_user_after(query_group, lang) + elseif #files == 1 then + vim.cmd(":edit " .. files[1]) + else + vim.ui.select(files, { prompt = "Select a file:" }, function(file) + if file then + vim.cmd(":edit " .. file) + end + end) + end +end + +function M.edit_query_file_user_after(query_group, lang) + lang = lang or parsers.get_buf_lang() + local folder = utils.join_path(vim.fn.stdpath "config", "after", "queries", lang) + local file = utils.join_path(folder, query_group .. ".scm") + if vim.fn.isdirectory(folder) ~= 1 then + vim.ui.select({ "Yes", "No" }, { prompt = '"' .. folder .. '" does not exist. Create it?' }, function(choice) + if choice == "Yes" then + vim.fn.mkdir(folder, "p", "0755") + vim.cmd(":edit " .. file) + end + end) + else + vim.cmd(":edit " .. file) + end +end + +M.commands = { + TSBufEnable = { + run = enable_module, + args = { + "-nargs=1", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSBufDisable = { + run = disable_module, + args = { + "-nargs=1", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSBufToggle = { + run = toggle_module, + args = { + "-nargs=1", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSEnable = { + run = enable_all, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSDisable = { + run = disable_all, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSToggle = { + run = toggle_all, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, + TSConfigInfo = { + run = config_info, + args = { + "-nargs=0", + }, + }, + TSEditQuery = { + run = M.edit_query_file, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#available_query_groups", + }, + }, + TSEditQueryUserAfter = { + run = M.edit_query_file_user_after, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#available_query_groups", + }, + }, +} + +-- @param mod: module (string) +-- @param lang: the language of the buffer (string) +-- @param bufnr: the bufnr (number) +function M.is_enabled(mod, lang, bufnr) + if not parsers.list[lang] or not parsers.has_parser(lang) then + return false + end + + local module_config = M.get_module(mod) + if not module_config then + return false + end + + local buffer_enabled = module_config.enabled_buffers and module_config.enabled_buffers[bufnr] + local config_enabled = module_config.enable or buffer_enabled + if not config_enabled or not module_config.is_supported(lang) then + return false + end + + local disable = module_config.disable + if type(disable) == "function" then + if disable(lang, bufnr) then + return false + end + elseif type(disable) == "table" then + -- Otherwise it's a list of languages + for _, parser in pairs(disable) do + if lang == parser then + return false + end + end + end + + return true +end + +-- Setup call for users to override module configurations. +-- @param user_data module overrides +function M.setup(user_data) + config.modules = vim.tbl_deep_extend("force", config.modules, user_data) + config.ignore_install = user_data.ignore_install or {} + + local ensure_installed = user_data.ensure_installed or {} + if #ensure_installed > 0 then + if user_data.sync_install then + require("nvim-treesitter.install").ensure_installed_sync(ensure_installed) + else + require("nvim-treesitter.install").ensure_installed(ensure_installed) + end + end + + config.modules.ensure_installed = nil + + recurse_modules(function(_, _, new_path) + local data = utils.get_at_path(config.modules, new_path) + if data.enable then + enable_all(new_path) + end + end, config.modules) +end + +-- Defines a table of modules that can be attached/detached to buffers +-- based on language support. A module consist of the following properties: +-- * @enable Whether the modules is enabled. Can be true or false. +-- * @disable A list of languages to disable the module for. Only relevant if enable is true. +-- * @keymaps A list of user mappings for a given module if relevant. +-- * @is_supported A function which, given a ft, will return true if the ft works on the module. +-- * @module_path A string path to a module file using `require`. The exported module must contain +-- an `attach` and `detach` function. This path is not required if `attach` and `detach` +-- functions are provided directly on the module definition. +-- * @attach An attach function that is called for each buffer that the module is enabled for. This is required +-- if a `module_path` is not specified. +-- * @detach A detach function that is called for each buffer that the module is enabled for. This is required +-- if a `module_path` is not specified. +-- Modules are not setup until `init` is invoked by the plugin. This allows modules to be defined in any order +-- and can be loaded lazily. +-- @example +-- require"nvim-treesitter".define_modules { +-- my_cool_module = { +-- attach = function() +-- do_some_cool_setup() +-- end, +-- detach = function() +-- do_some_cool_teardown() +-- end +-- } +-- } +function M.define_modules(mod_defs) + if not is_initialized then + table.insert(queued_modules_defs, mod_defs) + return + end + + recurse_modules(function(key, mod, _, group) + group[key] = vim.tbl_extend("keep", mod, { + enable = false, + disable = {}, + is_supported = function() + return true + end, + }) + end, mod_defs) + + config.modules = vim.tbl_deep_extend("keep", config.modules, mod_defs) + + for _, mod in ipairs(M.available_modules(mod_defs)) do + local module_config = M.get_module(mod) + if module_config and module_config.enable then + enable_mod_conf_autocmd(mod) + end + end +end + +-- Attaches a module to a buffer +-- @param mod_name the module name +-- @param bufnr the bufnr +-- @param lang the language of the buffer +function M.attach_module(mod_name, bufnr, lang) + bufnr = bufnr or api.nvim_get_current_buf() + lang = lang or parsers.get_buf_lang(bufnr) + local resolved_mod = resolve_module(mod_name) + + if resolved_mod and not attached_buffers_by_module.has(mod_name, bufnr) and M.is_enabled(mod_name, lang, bufnr) then + attached_buffers_by_module.set(mod_name, bufnr, true) + resolved_mod.attach(bufnr, lang) + end +end + +-- Detaches a module to a buffer +-- @param mod_name the module name +-- @param bufnr the bufnr +function M.detach_module(mod_name, bufnr) + local resolved_mod = resolve_module(mod_name) + bufnr = bufnr or api.nvim_get_current_buf() + + if resolved_mod and attached_buffers_by_module.has(mod_name, bufnr) then + attached_buffers_by_module.remove(mod_name, bufnr) + resolved_mod.detach(bufnr) + end +end + +-- Same as attach_module, but if the module is already attached, detach it first. +-- @param mod_name the module name +-- @param bufnr the bufnr +-- @param lang the language of the buffer +function M.reattach_module(mod_name, bufnr, lang) + M.detach_module(mod_name, bufnr) + M.attach_module(mod_name, bufnr, lang) +end + +-- Gets available modules +-- @param root root table to find modules +function M.available_modules(root) + local modules = {} + + recurse_modules(function(_, _, path) + table.insert(modules, path) + end, root) + + return modules +end + +-- Gets a module config by path +-- @param mod_path path to the module +-- @returns the module or nil +function M.get_module(mod_path) + local mod = utils.get_at_path(config.modules, mod_path) + + return M.is_module(mod) and mod or nil +end + +-- Determines whether the provided table is a module. +-- A module should contain an attach and detach function. +-- @param mod the module table +function M.is_module(mod) + return type(mod) == "table" + and ((type(mod.attach) == "function" and type(mod.detach) == "function") or type(mod.module_path) == "string") +end + +-- Initializes built-in modules and any queued modules +-- registered by plugins or the user. +function M.init() + is_initialized = true + M.define_modules(builtin_modules) + + for _, mod_def in ipairs(queued_modules_defs) do + M.define_modules(mod_def) + end +end + +function M.get_update_strategy() + return config.update_strategy +end + +function M.get_ignored_parser_installs() + return config.ignore_install or {} +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/fold.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/fold.lua new file mode 100644 index 000000000..01a7c08e9 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/fold.lua @@ -0,0 +1,112 @@ +local api = vim.api +local tsutils = require "nvim-treesitter.ts_utils" +local query = require "nvim-treesitter.query" +local parsers = require "nvim-treesitter.parsers" + +local M = {} + +-- This is cached on buf tick to avoid computing that multiple times +-- Especially not for every line in the file when `zx` is hit +local folds_levels = tsutils.memoize_by_buf_tick(function(bufnr) + local max_fold_level = api.nvim_win_get_option(0, "foldnestmax") + local trim_level = function(level) + if level > max_fold_level then + return max_fold_level + end + return level + end + + local parser = parsers.get_parser(bufnr) + + if not parser then + return {} + end + + local matches = query.get_capture_matches_recursively(bufnr, function(lang) + if query.has_folds(lang) then + return "@fold", "folds" + elseif query.has_locals(lang) then + return "@scope", "locals" + end + end) + + -- start..stop is an inclusive range + local start_counts = {} + local stop_counts = {} + + local prev_start = -1 + local prev_stop = -1 + + local min_fold_lines = api.nvim_win_get_option(0, "foldminlines") + + for _, node in ipairs(matches) do + local start, _, stop, stop_col = node.node:range() + + if stop_col == 0 then + stop = stop - 1 + end + + local fold_length = stop - start + 1 + local should_fold = fold_length > min_fold_lines + + -- Fold only multiline nodes that are not exactly the same as previously met folds + -- Checking against just the previously found fold is sufficient if nodes + -- are returned in preorder or postorder when traversing tree + if should_fold and not (start == prev_start and stop == prev_stop) then + start_counts[start] = (start_counts[start] or 0) + 1 + stop_counts[stop] = (stop_counts[stop] or 0) + 1 + prev_start = start + prev_stop = stop + end + end + + local levels = {} + local current_level = 0 + + -- We now have the list of fold opening and closing, fill the gaps and mark where fold start + for lnum = 0, api.nvim_buf_line_count(bufnr) do + local prefix = "" + + local last_trimmed_level = trim_level(current_level) + current_level = current_level + (start_counts[lnum] or 0) + local trimmed_level = trim_level(current_level) + current_level = current_level - (stop_counts[lnum] or 0) + local next_trimmed_level = trim_level(current_level) + + -- Determine if it's the start/end of a fold + -- NB: vim's fold-expr interface does not have a mechanism to indicate that + -- two (or more) folds start at this line, so it cannot distinguish between + -- ( \n ( \n )) \n (( \n ) \n ) + -- versus + -- ( \n ( \n ) \n ( \n ) \n ) + -- If it did have such a mechanism, (trimmed_level - last_trimmed_level) + -- would be the correct number of starts to pass on. + if trimmed_level - last_trimmed_level > 0 then + prefix = ">" + elseif trimmed_level - next_trimmed_level > 0 then + -- Ending marks tend to confuse vim more than it helps, particularly when + -- the fold level changes by at least 2; we can uncomment this if + -- vim's behavior gets fixed. + -- prefix = "<" + prefix = "" + end + + levels[lnum + 1] = prefix .. tostring(trimmed_level) + end + + return levels +end) + +function M.get_fold_indic(lnum) + if not parsers.has_parser() or not lnum then + return "0" + end + + local buf = api.nvim_get_current_buf() + + local levels = folds_levels(buf) or {} + + return levels[lnum] or "0" +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/health.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/health.lua new file mode 100644 index 000000000..8cbe0db1c --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/health.lua @@ -0,0 +1,168 @@ +local api = vim.api +local fn = vim.fn + +local queries = require "nvim-treesitter.query" +local info = require "nvim-treesitter.info" +local shell = require "nvim-treesitter.shell_command_selectors" +local install = require "nvim-treesitter.install" +local utils = require "nvim-treesitter.utils" + +local health_start = vim.fn["health#report_start"] +local health_ok = vim.fn["health#report_ok"] +local health_error = vim.fn["health#report_error"] +local health_warn = vim.fn["health#report_warn"] + +local M = {} + +local NVIM_TREESITTER_MINIMUM_ABI = 13 + +local function install_health() + health_start "Installation" + + if fn.executable "tree-sitter" == 0 then + health_warn( + "`tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar," + .. " not required for :TSInstall)" + ) + else + health_ok( + "`tree-sitter` found " + .. (utils.ts_cli_version() or "(unknown version)") + .. " (parser generator, only needed for :TSInstallFromGrammar)" + ) + end + + if fn.executable "node" == 0 then + health_warn( + "`node` executable not found (only needed for :TSInstallFromGrammar," .. " not required for :TSInstall)" + ) + else + local handle = io.popen "node --version" + local result = handle:read "*a" + handle:close() + local version = vim.split(result, "\n")[1] + health_ok("`node` found " .. version .. " (only needed for :TSInstallFromGrammar)") + end + + if fn.executable "git" == 0 then + health_error("`git` executable not found.", { + "Install it with your package manager.", + "Check that your `$PATH` is set correctly.", + }) + else + health_ok "`git` executable found." + end + + local cc = shell.select_executable(install.compilers) + if not cc then + health_error("`cc` executable not found.", { + "Check that any of " + .. vim.inspect(install.compilers) + .. " is in your $PATH" + .. ' or set the environment variable CC or `require"nvim-treesitter.install".compilers` explicitly!', + }) + else + local version = vim.fn.systemlist(cc .. (cc == "cl" and "" or " --version"))[1] + health_ok( + "`" + .. cc + .. "` executable found. Selected from " + .. vim.inspect(install.compilers) + .. (version and ("\nVersion: " .. version) or "") + ) + end + if vim.treesitter.language_version then + if vim.treesitter.language_version >= NVIM_TREESITTER_MINIMUM_ABI then + health_ok( + "Neovim was compiled with tree-sitter runtime ABI version " + .. vim.treesitter.language_version + .. " (required >=" + .. NVIM_TREESITTER_MINIMUM_ABI + .. "). Parsers must be compatible with runtime ABI." + ) + else + health_error( + "Neovim was compiled with tree-sitter runtime ABI version " + .. vim.treesitter.language_version + .. ".\n" + .. "nvim-treesitter expects at least ABI version " + .. NVIM_TREESITTER_MINIMUM_ABI + .. "\n" + .. "Please make sure that Neovim is linked against are recent tree-sitter runtime when building" + .. " or raise an issue at your Neovim packager. Parsers must be compatible with runtime ABI." + ) + end + end +end + +local function query_status(lang, query_group) + local ok, err = pcall(queries.get_query, lang, query_group) + if not ok then + return "x", err + elseif not err then + return "." + else + return "✓" + end +end + +function M.check() + local error_collection = {} + -- Installation dependency checks + install_health() + queries.invalidate_query_cache() + -- Parser installation checks + local parser_installation = { "Parser/Features H L F I J" } + for _, parser_name in pairs(info.installed_parsers()) do + local installed = #api.nvim_get_runtime_file("parser/" .. parser_name .. ".so", false) + + -- Only append information about installed parsers + if installed >= 1 then + local multiple_parsers = installed > 1 and "+" or "" + local out = " - " .. parser_name .. multiple_parsers .. string.rep(" ", 15 - (#parser_name + #multiple_parsers)) + for _, query_group in pairs(queries.built_in_query_groups) do + local status, err = query_status(parser_name, query_group) + out = out .. status .. " " + if err then + table.insert(error_collection, { parser_name, query_group, err }) + end + end + table.insert(parser_installation, out) + end + end + local legend = [[ + + Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections + +) multiple parsers found, only one will be used + x) errors found in the query, try to run :TSUpdate {lang}]] + table.insert(parser_installation, legend) + -- Finally call the report function + health_start(table.concat(parser_installation, "\n")) + if #error_collection > 0 then + health_start "The following errors have been detected:" + for _, p in ipairs(error_collection) do + local lang, type, err = unpack(p) + local lines = {} + table.insert(lines, lang .. "(" .. type .. "): " .. err) + local files = vim.treesitter.query.get_query_files(lang, type) + if #files > 0 then + table.insert(lines, lang .. "(" .. type .. ") is concatenated from the following files:") + for _, file in ipairs(files) do + local fd = io.open(file, "r") + if fd then + local ok, file_err = pcall(vim.treesitter.query.parse_query, lang, fd:read "*a") + if ok then + table.insert(lines, '| [OK]:"' .. file .. '"') + else + table.insert(lines, '| [ERROR]:"' .. file .. '", failed to load: ' .. file_err) + end + fd:close() + end + end + end + health_error(table.concat(lines, "\n")) + end + end +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/highlight.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/highlight.lua new file mode 100644 index 000000000..caca7ee00 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/highlight.lua @@ -0,0 +1,159 @@ +local api = vim.api +local ts = vim.treesitter + +local parsers = require "nvim-treesitter.parsers" +local configs = require "nvim-treesitter.configs" + +local M = {} + +local hlmap = vim.treesitter.highlighter.hl_map + +-- nvim-treesitter Highlight Group Mappings +-- Note: Some highlight groups may not be applied upstream, some may be experimental + +hlmap["annotation"] = "TSAnnotation" + +hlmap["attribute"] = "TSAttribute" + +hlmap["boolean"] = "TSBoolean" + +hlmap["character"] = "TSCharacter" +hlmap["character.special"] = "TSCharacterSpecial" + +hlmap["comment"] = "TSComment" + +hlmap["conditional"] = "TSConditional" + +hlmap["constant"] = "TSConstant" +hlmap["constant.builtin"] = "TSConstBuiltin" +hlmap["constant.macro"] = "TSConstMacro" + +hlmap["constructor"] = "TSConstructor" + +hlmap["debug"] = "TSDebug" +hlmap["define"] = "TSDefine" + +hlmap["error"] = "TSError" +hlmap["exception"] = "TSException" + +hlmap["field"] = "TSField" + +hlmap["float"] = "TSFloat" + +hlmap["function"] = "TSFunction" +hlmap["function.builtin"] = "TSFuncBuiltin" +hlmap["function.macro"] = "TSFuncMacro" + +hlmap["include"] = "TSInclude" + +hlmap["keyword"] = "TSKeyword" +hlmap["keyword.function"] = "TSKeywordFunction" +hlmap["keyword.operator"] = "TSKeywordOperator" +hlmap["keyword.return"] = "TSKeywordReturn" + +hlmap["label"] = "TSLabel" + +hlmap["method"] = "TSMethod" + +hlmap["namespace"] = "TSNamespace" + +hlmap["none"] = "TSNone" +hlmap["number"] = "TSNumber" + +hlmap["operator"] = "TSOperator" + +hlmap["parameter"] = "TSParameter" +hlmap["parameter.reference"] = "TSParameterReference" + +hlmap["preproc"] = "TSPreProc" + +hlmap["property"] = "TSProperty" + +hlmap["punctuation.delimiter"] = "TSPunctDelimiter" +hlmap["punctuation.bracket"] = "TSPunctBracket" +hlmap["punctuation.special"] = "TSPunctSpecial" + +hlmap["repeat"] = "TSRepeat" + +hlmap["storageclass"] = "TSStorageClass" + +hlmap["string"] = "TSString" +hlmap["string.regex"] = "TSStringRegex" +hlmap["string.escape"] = "TSStringEscape" +hlmap["string.special"] = "TSStringSpecial" + +hlmap["symbol"] = "TSSymbol" + +hlmap["tag"] = "TSTag" +hlmap["tag.attribute"] = "TSTagAttribute" +hlmap["tag.delimiter"] = "TSTagDelimiter" + +hlmap["text"] = "TSText" +hlmap["text.strong"] = "TSStrong" +hlmap["text.emphasis"] = "TSEmphasis" +hlmap["text.underline"] = "TSUnderline" +hlmap["text.strike"] = "TSStrike" +hlmap["text.title"] = "TSTitle" +hlmap["text.literal"] = "TSLiteral" +hlmap["text.uri"] = "TSURI" +hlmap["text.math"] = "TSMath" +hlmap["text.reference"] = "TSTextReference" +hlmap["text.environment"] = "TSEnvironment" +hlmap["text.environment.name"] = "TSEnvironmentName" + +hlmap["text.note"] = "TSNote" +hlmap["text.warning"] = "TSWarning" +hlmap["text.danger"] = "TSDanger" + +hlmap["todo"] = "TSTodo" + +hlmap["type"] = "TSType" +hlmap["type.builtin"] = "TSTypeBuiltin" +hlmap["type.qualifier"] = "TSTypeQualifier" +hlmap["type.definition"] = "TSTypeDefinition" + +hlmap["variable"] = "TSVariable" +hlmap["variable.builtin"] = "TSVariableBuiltin" + +local function should_enable_vim_regex(config, lang) + local additional_hl = config.additional_vim_regex_highlighting + local is_table = type(additional_hl) == "table" + + return additional_hl and (not is_table or vim.tbl_contains(additional_hl, lang)) +end + +local function enable_syntax(bufnr) + api.nvim_buf_set_option(bufnr, "syntax", "ON") +end + +function M.stop(bufnr) + if ts.highlighter.active[bufnr] then + ts.highlighter.active[bufnr]:destroy() + end +end + +function M.start(bufnr, lang) + local parser = parsers.get_parser(bufnr, lang) + ts.highlighter.new(parser, {}) +end + +function M.attach(bufnr, lang) + local config = configs.get_module "highlight" + M.start(bufnr, lang) + if should_enable_vim_regex(config, lang) then + enable_syntax(bufnr) + end +end + +function M.detach(bufnr) + M.stop(bufnr) + enable_syntax(bufnr) +end + +function M.set_custom_captures(captures) + for k, v in pairs(captures) do + hlmap[k] = v + end +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/incremental_selection.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/incremental_selection.lua new file mode 100644 index 000000000..857f4a482 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/incremental_selection.lua @@ -0,0 +1,148 @@ +local api = vim.api + +local configs = require "nvim-treesitter.configs" +local ts_utils = require "nvim-treesitter.ts_utils" +local locals = require "nvim-treesitter.locals" +local parsers = require "nvim-treesitter.parsers" +local queries = require "nvim-treesitter.query" + +local M = {} + +local selections = {} + +function M.init_selection() + local buf = api.nvim_get_current_buf() + local node = ts_utils.get_node_at_cursor() + selections[buf] = { [1] = node } + ts_utils.update_selection(buf, node) +end + +--- Get the range of the current visual selection. +-- +-- The range start with 1 and the ending is inclusive. +local function visual_selection_range() + local _, csrow, cscol, _ = unpack(vim.fn.getpos "'<") + local _, cerow, cecol, _ = unpack(vim.fn.getpos "'>") + + local start_row, start_col, end_row, end_col + + if csrow < cerow or (csrow == cerow and cscol <= cecol) then + start_row = csrow + start_col = cscol + end_row = cerow + end_col = cecol + else + start_row = cerow + start_col = cecol + end_row = csrow + end_col = cscol + end + + return start_row, start_col, end_row, end_col +end + +local function range_matches(node) + local csrow, cscol, cerow, cecol = visual_selection_range() + local srow, scol, erow, ecol = ts_utils.get_vim_range { node:range() } + return srow == csrow and scol == cscol and erow == cerow and ecol == cecol +end + +local function select_incremental(get_parent) + return function() + local buf = api.nvim_get_current_buf() + local nodes = selections[buf] + + local csrow, cscol, cerow, cecol = visual_selection_range() + -- Initialize incremental selection with current selection + if not nodes or #nodes == 0 or not range_matches(nodes[#nodes]) then + local root = parsers.get_parser():parse()[1]:root() + local node = root:named_descendant_for_range(csrow - 1, cscol - 1, cerow - 1, cecol) + ts_utils.update_selection(buf, node) + if nodes and #nodes > 0 then + table.insert(selections[buf], node) + else + selections[buf] = { [1] = node } + end + return + end + + -- Find a node that changes the current selection. + local node = nodes[#nodes] + while true do + local parent = get_parent(node) + if not parent or parent == node then + -- Keep searching in the main tree + -- TODO: we should search on the parent tree of the current node. + local root = parsers.get_parser():parse()[1]:root() + parent = root:named_descendant_for_range(csrow - 1, cscol - 1, cerow - 1, cecol) + if not parent or root == node or parent == node then + ts_utils.update_selection(buf, node) + return + end + end + node = parent + local srow, scol, erow, ecol = ts_utils.get_vim_range { node:range() } + local same_range = (srow == csrow and scol == cscol and erow == cerow and ecol == cecol) + if not same_range then + table.insert(selections[buf], node) + if node ~= nodes[#nodes] then + table.insert(nodes, node) + end + ts_utils.update_selection(buf, node) + return + end + end + end +end + +M.node_incremental = select_incremental(function(node) + return node:parent() or node +end) + +M.scope_incremental = select_incremental(function(node) + local lang = parsers.get_buf_lang() + if queries.has_locals(lang) then + return locals.containing_scope(node:parent() or node) + else + return node + end +end) + +function M.node_decremental() + local buf = api.nvim_get_current_buf() + local nodes = selections[buf] + if not nodes or #nodes < 2 then + return + end + + table.remove(selections[buf]) + local node = nodes[#nodes] + ts_utils.update_selection(buf, node) +end + +function M.attach(bufnr) + local config = configs.get_module "incremental_selection" + for funcname, mapping in pairs(config.keymaps) do + local mode + if funcname == "init_selection" then + mode = "n" + else + mode = "x" + end + local cmd = string.format(":lua require'nvim-treesitter.incremental_selection'.%s()", funcname) + api.nvim_buf_set_keymap(bufnr, mode, mapping, cmd, { silent = true, noremap = true }) + end +end + +function M.detach(bufnr) + local config = configs.get_module "incremental_selection" + for f, mapping in pairs(config.keymaps) do + if f == "init_selection" then + api.nvim_buf_del_keymap(bufnr, "n", mapping) + else + api.nvim_buf_del_keymap(bufnr, "x", mapping) + end + end +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/indent.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/indent.lua new file mode 100644 index 000000000..de165904e --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/indent.lua @@ -0,0 +1,205 @@ +local parsers = require "nvim-treesitter.parsers" +local queries = require "nvim-treesitter.query" +local tsutils = require "nvim-treesitter.ts_utils" + +local M = {} + +M.avoid_force_reparsing = { + yaml = true, +} + +M.comment_parsers = { + comment = true, + jsdoc = true, + phpdoc = true, +} + +local function get_first_node_at_line(root, lnum) + local col = vim.fn.indent(lnum) + return root:descendant_for_range(lnum - 1, col, lnum - 1, col) +end + +local function get_last_node_at_line(root, lnum) + local col = #vim.fn.getline(lnum) - 1 + return root:descendant_for_range(lnum - 1, col, lnum - 1, col) +end + +local function find_delimiter(bufnr, node, delimiter) + for child, _ in node:iter_children() do + if child:type() == delimiter then + local linenr = child:start() + local line = vim.api.nvim_buf_get_lines(bufnr, linenr, linenr + 1, false)[1] + local end_char = { child:end_() } + return child, #line == end_char[2] + end + end +end + +local get_indents = tsutils.memoize_by_buf_tick(function(bufnr, root, lang) + local map = { + auto = {}, + indent = {}, + indent_end = {}, + dedent = {}, + branch = {}, + ignore = {}, + aligned_indent = {}, + zero_indent = {}, + } + + for name, node, metadata in queries.iter_captures(bufnr, "indents", root, lang) do + map[name][node:id()] = metadata or {} + end + + return map +end, { + -- Memoize by bufnr and lang together. + key = function(bufnr, root, lang) + return tostring(bufnr) .. root:id() .. "_" .. lang + end, +}) + +---@param lnum number (1-indexed) +function M.get_indent(lnum) + local bufnr = vim.api.nvim_get_current_buf() + local parser = parsers.get_parser(bufnr) + if not parser or not lnum then + return -1 + end + + local root_lang = parsers.get_buf_lang(bufnr) + + -- some languages like Python will actually have worse results when re-parsing at opened new line + if not M.avoid_force_reparsing[root_lang] then + -- Reparse in case we got triggered by ":h indentkeys" + parser:parse() + end + + -- Get language tree with smallest range around node that's not a comment parser + local root, lang_tree + parser:for_each_tree(function(tstree, tree) + if not tstree or M.comment_parsers[tree:lang()] then + return + end + local local_root = tstree:root() + if tsutils.is_in_node_range(local_root, lnum - 1, 0) then + if not root or tsutils.node_length(root) >= tsutils.node_length(local_root) then + root = local_root + lang_tree = tree + end + end + end) + + -- Not likely, but just in case... + if not root then + return 0 + end + + local q = get_indents(vim.api.nvim_get_current_buf(), root, lang_tree:lang()) + local is_empty_line = string.match(vim.fn.getline(lnum), "^%s*$") ~= nil + local node + if is_empty_line then + local prevlnum = vim.fn.prevnonblank(lnum) + node = get_last_node_at_line(root, prevlnum) + if q.indent_end[node:id()] then + node = get_first_node_at_line(root, lnum) + end + else + node = get_first_node_at_line(root, lnum) + end + + local indent_size = vim.fn.shiftwidth() + local indent = 0 + local _, _, root_start = root:start() + if root_start ~= 0 then + -- injected tree + indent = vim.fn.indent(root:start() + 1) + end + + -- tracks to ensure multiple indent levels are not applied for same line + local is_processed_by_row = {} + + if q.zero_indent[node:id()] then + return 0 + end + + while node do + -- do 'autoindent' if not marked as @indent + if not q.indent[node:id()] and q.auto[node:id()] and node:start() < lnum - 1 and lnum - 1 <= node:end_() then + return -1 + end + + -- Do not indent if we are inside an @ignore block. + -- If a node spans from L1,C1 to L2,C2, we know that lines where L1 < line <= L2 would + -- have their indentations contained by the node. + if not q.indent[node:id()] and q.ignore[node:id()] and node:start() < lnum - 1 and lnum - 1 <= node:end_() then + return 0 + end + + local srow, _, erow = node:range() + + local is_processed = false + + if + not is_processed_by_row[srow] + and ((q.branch[node:id()] and srow == lnum - 1) or (q.dedent[node:id()] and srow ~= lnum - 1)) + then + indent = indent - indent_size + is_processed = true + end + + -- do not indent for nodes that starts-and-ends on same line and starts on target line (lnum) + if + not is_processed_by_row[srow] + -- Dear stylua, please don't change the semantics of this statement! + -- stylua: ignore start + and (q.indent[node:id()] and srow ~= erow and ((srow ~= lnum - 1) or q.indent[node:id()].start_at_same_line)) + -- stylua: ignore end + then + indent = indent + indent_size + is_processed = true + end + + -- do not indent for nodes that starts-and-ends on same line and starts on target line (lnum) + if q.aligned_indent[node:id()] and srow ~= erow and (srow ~= lnum - 1) then + local metadata = q.aligned_indent[node:id()] + local o_delim_node, is_last_in_line + if metadata.delimiter then + local opening_delimiter = metadata.delimiter and metadata.delimiter:sub(1, 1) + o_delim_node, is_last_in_line = find_delimiter(bufnr, node, opening_delimiter) + else + o_delim_node = node + end + + if o_delim_node then + if is_last_in_line then + -- hanging indent (previous line ended with starting delimiter) + indent = indent + indent_size * 1 + else + local _, o_scol = o_delim_node:start() + return math.max(indent, 0) + o_scol + (metadata.increment or 1) + end + end + end + + is_processed_by_row[srow] = is_processed_by_row[srow] or is_processed + + node = node:parent() + end + + return indent +end + +local indent_funcs = {} + +function M.attach(bufnr) + indent_funcs[bufnr] = vim.bo.indentexpr + vim.bo.indentexpr = "nvim_treesitter#indent()" + vim.api.nvim_command("au Filetype " .. vim.bo.filetype .. " setlocal indentexpr=nvim_treesitter#indent()") +end + +function M.detach(bufnr) + vim.bo.indentexpr = indent_funcs[bufnr] +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/info.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/info.lua new file mode 100644 index 000000000..ed5a90b8d --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/info.lua @@ -0,0 +1,174 @@ +local api = vim.api +local configs = require "nvim-treesitter.configs" +local parsers = require "nvim-treesitter.parsers" + +local M = {} + +local function install_info() + local max_len = 0 + for _, ft in pairs(parsers.available_parsers()) do + if #ft > max_len then + max_len = #ft + end + end + + local parser_list = parsers.available_parsers() + table.sort(parser_list) + for _, ft in pairs(parser_list) do + local is_installed = #api.nvim_get_runtime_file("parser/" .. ft .. ".so", false) > 0 + api.nvim_out_write(ft .. string.rep(" ", max_len - #ft + 1)) + if is_installed then + api.nvim_out_write "[✓] installed\n" + else + api.nvim_out_write "[✗] not installed\n" + end + end +end + +-- Sort a list of modules into namespaces. +-- {'mod1', 'mod2.sub1', 'mod2.sub2', 'mod3'} +-- -> +-- { default = {'mod1', 'mod3'}, mod2 = {'sub1', 'sub2'}} +local function namespace_modules(modulelist) + local modules = {} + for _, module in ipairs(modulelist) do + if module:find "%." then + local namespace, submodule = module:match "^(.*)%.(.*)$" + if not modules[namespace] then + modules[namespace] = {} + end + table.insert(modules[namespace], submodule) + else + if not modules.default then + modules.default = {} + end + table.insert(modules.default, module) + end + end + return modules +end + +local function longest_string_length(list) + local length = 0 + for _, value in ipairs(list) do + if #value > length then + length = #value + end + end + return length +end + +local function append_module_table(curbuf, origbuf, parserlist, namespace, modulelist) + local maxlen_parser = longest_string_length(parserlist) + table.sort(modulelist) + + -- header + local header = ">> " .. namespace .. string.rep(" ", maxlen_parser - #namespace - 1) + for _, module in pairs(modulelist) do + header = header .. module .. " " + end + api.nvim_buf_set_lines(curbuf, -1, -1, true, { header }) + + -- actual table + for _, parser in ipairs(parserlist) do + local padding = string.rep(" ", maxlen_parser - #parser + 2) + local line = parser .. padding + local namespace_prefix = (namespace == "default") and "" or namespace .. "." + for _, module in pairs(modulelist) do + local modlen = #module + module = namespace_prefix .. module + if configs.is_enabled(module, parser, origbuf) then + line = line .. "✓" + else + line = line .. "✗" + end + line = line .. string.rep(" ", modlen + 1) + end + api.nvim_buf_set_lines(curbuf, -1, -1, true, { line }) + end + + api.nvim_buf_set_lines(curbuf, -1, -1, true, { "" }) +end + +local function print_info_modules(parserlist, module) + local origbuf = api.nvim_get_current_buf() + api.nvim_command "enew" + local curbuf = api.nvim_get_current_buf() + + local modules + if module then + modules = namespace_modules { module } + else + modules = namespace_modules(configs.available_modules()) + end + + local namespaces = {} + for k, _ in pairs(modules) do + table.insert(namespaces, k) + end + table.sort(namespaces) + + table.sort(parserlist) + for _, namespace in ipairs(namespaces) do + append_module_table(curbuf, origbuf, parserlist, namespace, modules[namespace]) + end + + api.nvim_buf_set_option(curbuf, "modified", false) + api.nvim_buf_set_option(curbuf, "buftype", "nofile") + api.nvim_exec( + [[ + syntax match TSModuleInfoGood /✓/ + syntax match TSModuleInfoBad /✗/ + syntax match TSModuleInfoHeader /^>>.*$/ contains=TSModuleInfoNamespace + syntax match TSModuleInfoNamespace /^>> \w*/ contained + syntax match TSModuleInfoParser /^[^> ]*\ze / + highlight default TSModuleInfoGood guifg=LightGreen gui=bold + highlight default TSModuleInfoBad guifg=Crimson + highlight default link TSModuleInfoHeader Type + highlight default link TSModuleInfoNamespace Statement + highlight default link TSModuleInfoParser Identifier + ]], + false + ) +end + +local function module_info(module) + if module and not configs.get_module(module) then + return + end + + local parserlist = parsers.available_parsers() + if module then + print_info_modules(parserlist, module) + else + print_info_modules(parserlist) + end +end + +function M.installed_parsers() + local installed = {} + for _, p in pairs(parsers.available_parsers()) do + if parsers.has_parser(p) then + table.insert(installed, p) + end + end + return installed +end + +M.commands = { + TSInstallInfo = { + run = install_info, + args = { + "-nargs=0", + }, + }, + TSModuleInfo = { + run = module_info, + args = { + "-nargs=?", + "-complete=custom,nvim_treesitter#available_modules", + }, + }, +} + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/install.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/install.lua new file mode 100644 index 000000000..b65c4b3f0 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/install.lua @@ -0,0 +1,600 @@ +local api = vim.api +local fn = vim.fn +local luv = vim.loop + +local utils = require "nvim-treesitter.utils" +local parsers = require "nvim-treesitter.parsers" +local info = require "nvim-treesitter.info" +local configs = require "nvim-treesitter.configs" +local shell = require "nvim-treesitter.shell_command_selectors" + +local M = {} +local lockfile = {} + +M.compilers = { vim.fn.getenv "CC", "cc", "gcc", "clang", "cl", "zig" } +M.prefer_git = fn.has "win32" == 1 +M.command_extra_args = {} +M.ts_generate_args = nil + +local started_commands = 0 +local finished_commands = 0 +local failed_commands = 0 +local complete_std_output = {} +local complete_error_output = {} + +local function reset_progress_counter() + if started_commands ~= finished_commands then + return + end + started_commands = 0 + finished_commands = 0 + failed_commands = 0 + complete_std_output = {} + complete_error_output = {} +end + +local function get_job_status() + return "[nvim-treesitter] [" + .. finished_commands + .. "/" + .. started_commands + .. (failed_commands > 0 and ", failed: " .. failed_commands or "") + .. "]" +end + +local function get_parser_install_info(lang, validate) + local parser_config = parsers.get_parser_configs()[lang] + + if not parser_config then + return error("Parser not available for language " .. lang) + end + + local install_info = parser_config.install_info + + if validate then + vim.validate { + url = { install_info.url, "string" }, + files = { install_info.files, "table" }, + } + end + + return install_info +end + +local function load_lockfile() + local filename = utils.join_path(utils.get_package_path(), "lockfile.json") + lockfile = vim.fn.filereadable(filename) == 1 and vim.fn.json_decode(vim.fn.readfile(filename)) or {} +end + +local function get_revision(lang) + if #lockfile == 0 then + load_lockfile() + end + + local install_info = get_parser_install_info(lang) + if install_info.revision then + return install_info.revision + end + + return (lockfile[lang] and lockfile[lang].revision) +end + +local function get_installed_revision(lang) + local lang_file = utils.join_path(utils.get_parser_info_dir(), lang .. ".revision") + if vim.fn.filereadable(lang_file) == 1 then + return vim.fn.readfile(lang_file)[1] + end +end + +local function is_installed(lang) + return #api.nvim_get_runtime_file("parser/" .. lang .. ".so", false) > 0 +end + +local function needs_update(lang) + local revision = get_revision(lang) + return not revision or revision ~= get_installed_revision(lang) +end + +local function outdated_parsers() + return vim.tbl_filter(function(lang) + return needs_update(lang) + end, info.installed_parsers()) +end + +local function onread(handle, is_stderr) + return function(err, data) + if data then + if is_stderr then + complete_error_output[handle] = (complete_error_output[handle] or "") .. data + else + complete_std_output[handle] = (complete_std_output[handle] or "") .. data + end + end + end +end + +function M.iter_cmd(cmd_list, i, lang, success_message) + if i == 1 then + started_commands = started_commands + 1 + end + if i == #cmd_list + 1 then + finished_commands = finished_commands + 1 + return print(get_job_status() .. " " .. success_message) + end + + local attr = cmd_list[i] + if attr.info then + print(get_job_status() .. " " .. attr.info) + end + + if attr.opts and attr.opts.args and M.command_extra_args[attr.cmd] then + vim.list_extend(attr.opts.args, M.command_extra_args[attr.cmd]) + end + + if type(attr.cmd) == "function" then + local ok, err = pcall(attr.cmd) + if ok then + M.iter_cmd(cmd_list, i + 1, lang, success_message) + else + failed_commands = failed_commands + 1 + finished_commands = finished_commands + 1 + return api.nvim_err_writeln( + (attr.err or ("Failed to execute the following command:\n" .. vim.inspect(attr))) .. "\n" .. vim.inspect(err) + ) + end + else + local handle + local stdout = luv.new_pipe(false) + local stderr = luv.new_pipe(false) + attr.opts.stdio = { nil, stdout, stderr } + handle = luv.spawn( + attr.cmd, + attr.opts, + vim.schedule_wrap(function(code) + if code ~= 0 then + stdout:read_stop() + stderr:read_stop() + end + stdout:close() + stderr:close() + handle:close() + if code ~= 0 then + failed_commands = failed_commands + 1 + finished_commands = finished_commands + 1 + if complete_std_output[handle] and complete_std_output[handle] ~= "" then + print(complete_std_output[handle]) + end + + local err_msg = complete_error_output[handle] or "" + api.nvim_err_writeln( + "nvim-treesitter[" + .. lang + .. "]: " + .. (attr.err or ("Failed to execute the following command:\n" .. vim.inspect(attr))) + .. "\n" + .. err_msg + ) + return + end + M.iter_cmd(cmd_list, i + 1, lang, success_message) + end) + ) + luv.read_start(stdout, onread(handle, false)) + luv.read_start(stderr, onread(handle, true)) + end +end + +local function get_command(cmd) + local options = "" + if cmd.opts and cmd.opts.args then + if M.command_extra_args[cmd.cmd] then + vim.list_extend(cmd.opts.args, M.command_extra_args[cmd.cmd]) + end + for _, opt in ipairs(cmd.opts.args) do + options = string.format("%s %s", options, opt) + end + end + + local final = string.format("%s %s", cmd.cmd, options) + if cmd.opts and cmd.opts.cwd then + final = shell.make_directory_change_for_command(cmd.opts.cwd, final) + end + return final +end + +local function iter_cmd_sync(cmd_list) + for _, cmd in ipairs(cmd_list) do + if cmd.info then + print(cmd.info) + end + + if type(cmd.cmd) == "function" then + cmd.cmd() + else + local ret = vim.fn.system(get_command(cmd)) + if vim.v.shell_error ~= 0 then + print(ret) + api.nvim_err_writeln( + (cmd.err and cmd.err .. "\n" or "") .. "Failed to execute the following command:\n" .. vim.inspect(cmd) + ) + return false + end + end + end + + return true +end + +local function run_install(cache_folder, install_folder, lang, repo, with_sync, generate_from_grammar) + parsers.reset_cache() + + local path_sep = utils.get_path_sep() + + local project_name = "tree-sitter-" .. lang + local maybe_local_path = vim.fn.expand(repo.url) + local from_local_path = vim.fn.isdirectory(maybe_local_path) == 1 + if from_local_path then + repo.url = maybe_local_path + end + + -- compile_location only needed for typescript installs. + local compile_location + if from_local_path then + compile_location = repo.url + else + local repo_location = string.gsub(repo.location or project_name, "/", path_sep) + compile_location = cache_folder .. path_sep .. repo_location + end + local parser_lib_name = install_folder .. path_sep .. lang .. ".so" + + generate_from_grammar = repo.requires_generate_from_grammar or generate_from_grammar + + if generate_from_grammar and vim.fn.executable "tree-sitter" ~= 1 then + api.nvim_err_writeln "tree-sitter CLI not found: `tree-sitter` is not executable!" + if repo.requires_generate_from_grammar then + api.nvim_err_writeln( + "tree-sitter CLI is needed because `" + .. lang + .. "` is marked that it needs " + .. "to be generated from the grammar definitions to be compatible with nvim!" + ) + end + return + else + if not M.ts_generate_args then + local ts_cli_version = utils.ts_cli_version() + if ts_cli_version and vim.split(ts_cli_version, " ")[1] > "0.20.2" then + M.ts_generate_args = { "generate", "--abi", vim.treesitter.language_version } + else + M.ts_generate_args = { "generate" } + end + end + end + if generate_from_grammar and vim.fn.executable "node" ~= 1 then + api.nvim_err_writeln "Node JS not found: `node` is not executable!" + return + end + local cc = shell.select_executable(M.compilers) + if not cc then + api.nvim_err_writeln('No C compiler found! "' .. table.concat( + vim.tbl_filter(function(c) + return type(c) == "string" + end, M.compilers), + '", "' + ) .. '" are not executable.') + return + end + local revision = configs.get_update_strategy() == "lockfile" and get_revision(lang) + + local command_list = {} + if not from_local_path then + vim.list_extend(command_list, { shell.select_install_rm_cmd(cache_folder, project_name) }) + vim.list_extend( + command_list, + shell.select_download_commands(repo, project_name, cache_folder, revision, M.prefer_git) + ) + end + if generate_from_grammar then + if repo.generate_requires_npm then + if vim.fn.executable "npm" ~= 1 then + api.nvim_err_writeln("`" .. lang .. "` requires NPM to be installed from grammar.js") + return + end + vim.list_extend(command_list, { + { + cmd = "npm", + info = "Installing NPM dependencies of " .. lang .. " parser", + err = "Error during `npm install` (required for parser generation of " .. lang .. " with npm dependencies)", + opts = { + args = { "install" }, + cwd = compile_location, + }, + }, + }) + end + vim.list_extend(command_list, { + { + cmd = vim.fn.exepath "tree-sitter", + info = "Generating source files from grammar.js...", + err = 'Error during "tree-sitter generate"', + opts = { + args = M.ts_generate_args, + cwd = compile_location, + }, + }, + }) + end + vim.list_extend(command_list, { + shell.select_compile_command(repo, cc, compile_location), + shell.select_mv_cmd("parser.so", parser_lib_name, compile_location), + { + cmd = function() + vim.fn.writefile({ revision or "" }, utils.join_path(utils.get_parser_info_dir(), lang .. ".revision")) + end, + }, + { -- auto-attach modules after installation + cmd = function() + for _, buf in ipairs(vim.api.nvim_list_bufs()) do + if parsers.get_buf_lang(buf) == lang then + for _, mod in ipairs(require("nvim-treesitter.configs").available_modules()) do + require("nvim-treesitter.configs").reattach_module(mod, buf) + end + end + end + end, + }, + }) + if not from_local_path then + vim.list_extend(command_list, { shell.select_install_rm_cmd(cache_folder, project_name) }) + end + + if with_sync then + if iter_cmd_sync(command_list) == true then + print("Treesitter parser for " .. lang .. " has been installed") + end + else + M.iter_cmd(command_list, 1, lang, "Treesitter parser for " .. lang .. " has been installed") + end +end + +local function install_lang(lang, ask_reinstall, cache_folder, install_folder, with_sync, generate_from_grammar) + if is_installed(lang) and ask_reinstall ~= "force" then + if not ask_reinstall then + return + end + + local yesno = fn.input(lang .. " parser already available: would you like to reinstall ? y/n: ") + print "\n " + if not string.match(yesno, "^y.*") then + return + end + end + + local install_info = get_parser_install_info(lang, true) + + run_install(cache_folder, install_folder, lang, install_info, with_sync, generate_from_grammar) +end + +local function install(options) + options = options or {} + local with_sync = options.with_sync + local ask_reinstall = options.ask_reinstall + local generate_from_grammar = options.generate_from_grammar + local exclude_configured_parsers = options.exclude_configured_parsers + + return function(...) + if fn.executable "git" == 0 then + return api.nvim_err_writeln "Git is required on your system to run this command" + end + + local cache_folder, err = utils.get_cache_dir() + if err then + return api.nvim_err_writeln(err) + end + + local install_folder, err = utils.get_parser_install_dir() + if err then + return api.nvim_err_writeln(err) + end + + local languages + local ask + if ... == "all" then + languages = parsers.available_parsers() + ask = false + elseif ... == "maintained" then + languages = parsers.maintained_parsers() + ask = false + else + languages = vim.tbl_flatten { ... } + ask = ask_reinstall + end + + if exclude_configured_parsers then + languages = utils.difference(languages, configs.get_ignored_parser_installs()) + end + + if #languages > 1 then + reset_progress_counter() + end + + for _, lang in ipairs(languages) do + install_lang(lang, ask, cache_folder, install_folder, with_sync, generate_from_grammar) + end + end +end + +function M.update(options) + options = options or {} + return function(...) + M.lockfile = {} + reset_progress_counter() + if ... and ... ~= "all" then + local languages = vim.tbl_flatten { ... } + local installed = 0 + for _, lang in ipairs(languages) do + if (not is_installed(lang)) or (needs_update(lang)) then + installed = installed + 1 + install { + ask_reinstall = "force", + with_sync = options.with_sync, + }(lang) + end + end + if installed == 0 then + utils.notify "Parsers are up-to-date!" + end + else + local parsers_to_update = configs.get_update_strategy() == "lockfile" and outdated_parsers() + or info.installed_parsers() + if #parsers_to_update == 0 then + utils.notify "All parsers are up-to-date!" + end + for _, lang in pairs(parsers_to_update) do + install { + ask_reinstall = "force", + exclude_configured_parsers = true, + with_sync = options.with_sync, + }(lang) + end + end + end +end + +function M.uninstall(...) + local path_sep = "/" + if fn.has "win32" == 1 then + path_sep = "\\" + end + + if vim.tbl_contains({ "all", "maintained" }, ...) then + reset_progress_counter() + local installed = info.installed_parsers() + if ... == "maintained" then + local maintained = parsers.maintained_parsers() + installed = vim.tbl_filter(function(l) + return vim.tbl_contains(maintained, l) + end, installed) + end + for _, langitem in pairs(installed) do + M.uninstall(langitem) + end + elseif ... then + local languages = vim.tbl_flatten { ... } + for _, lang in ipairs(languages) do + local install_dir, err = utils.get_parser_install_dir() + if err then + return api.nvim_err_writeln(err) + end + + local parser_lib = install_dir .. path_sep .. lang .. ".so" + + local command_list = { + shell.select_rm_file_cmd(parser_lib, "Uninstalling parser for " .. lang), + } + M.iter_cmd(command_list, 1, lang, "Treesitter parser for " .. lang .. " has been uninstalled") + end + end +end + +function M.write_lockfile(verbose, skip_langs) + local sorted_parsers = {} + -- Load previous lockfile + load_lockfile() + skip_langs = skip_langs or {} + + for k, v in pairs(parsers.get_parser_configs()) do + table.insert(sorted_parsers, { name = k, parser = v }) + end + + table.sort(sorted_parsers, function(a, b) + return a.name < b.name + end) + + for _, v in ipairs(sorted_parsers) do + if not vim.tbl_contains(skip_langs, v.name) then + -- I'm sure this can be done in aync way with iter_cmd + local sha + if v.parser.install_info.branch then + sha = vim.split( + vim.fn.systemlist( + "git ls-remote " .. v.parser.install_info.url .. " | grep refs/heads/" .. v.parser.install_info.branch + )[1], + "\t" + )[1] + else + sha = vim.split(vim.fn.systemlist("git ls-remote " .. v.parser.install_info.url)[1], "\t")[1] + end + lockfile[v.name] = { revision = sha } + if verbose then + print(v.name .. ": " .. sha) + end + else + print("Skipping " .. v.name) + end + end + + if verbose then + print(vim.inspect(lockfile)) + end + vim.fn.writefile( + vim.fn.split(vim.fn.json_encode(lockfile), "\n"), + utils.join_path(utils.get_package_path(), "lockfile.json") + ) +end + +M.ensure_installed = install { exclude_configured_parsers = true } +M.ensure_installed_sync = install { with_sync = true, exclude_configured_parsers = true } + +M.commands = { + TSInstall = { + run = install { ask_reinstall = true }, + ["run!"] = install { ask_reinstall = "force" }, + args = { + "-nargs=+", + "-bang", + "-complete=custom,nvim_treesitter#installable_parsers", + }, + }, + TSInstallFromGrammar = { + run = install { generate_from_grammar = true, ask_reinstall = true }, + ["run!"] = install { generate_from_grammar = true, ask_reinstall = "force" }, + args = { + "-nargs=+", + "-bang", + "-complete=custom,nvim_treesitter#installable_parsers", + }, + }, + TSInstallSync = { + run = install { with_sync = true, ask_reinstall = true }, + ["run!"] = install { with_sync = true, ask_reinstall = "force" }, + args = { + "-nargs=+", + "-bang", + "-complete=custom,nvim_treesitter#installable_parsers", + }, + }, + TSUpdate = { + run = M.update {}, + args = { + "-nargs=*", + "-complete=custom,nvim_treesitter#installed_parsers", + }, + }, + TSUpdateSync = { + run = M.update { with_sync = true }, + args = { + "-nargs=*", + "-complete=custom,nvim_treesitter#installed_parsers", + }, + }, + TSUninstall = { + run = M.uninstall, + args = { + "-nargs=+", + "-complete=custom,nvim_treesitter#installed_parsers", + }, + }, +} + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/locals.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/locals.lua new file mode 100644 index 000000000..e0da2d02e --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/locals.lua @@ -0,0 +1,349 @@ +-- Functions to handle locals +-- Locals are a generalization of definition and scopes +-- its the way nvim-treesitter uses to "understand" the code + +local queries = require "nvim-treesitter.query" +local ts_utils = require "nvim-treesitter.ts_utils" +local api = vim.api + +local M = {} + +function M.collect_locals(bufnr) + return queries.collect_group_results(bufnr, "locals") +end + +-- Iterates matches from a locals query file. +-- @param bufnr the buffer +-- @param root the root node +function M.iter_locals(bufnr, root) + return queries.iter_group_results(bufnr, "locals", root) +end + +function M.get_locals(bufnr) + return queries.get_matches(bufnr, "locals") +end + +--- Creates unique id for a node based on text and range +-- @param scope: the scope node of the definition +-- @param bufnr: the buffer +-- @param node_text: the node text to use +-- @returns a string id +function M.get_definition_id(scope, node_text) + -- Add a valid starting character in case node text doesn't start with a valid one. + return table.concat({ "k", node_text or "", scope:range() }, "_") +end + +function M.get_definitions(bufnr) + local locals = M.get_locals(bufnr) + + local defs = {} + + for _, loc in ipairs(locals) do + if loc.definition then + table.insert(defs, loc.definition) + end + end + + return defs +end + +function M.get_scopes(bufnr) + local locals = M.get_locals(bufnr) + + local scopes = {} + + for _, loc in ipairs(locals) do + if loc.scope and loc.scope.node then + table.insert(scopes, loc.scope.node) + end + end + + return scopes +end + +function M.get_references(bufnr) + local locals = M.get_locals(bufnr) + + local refs = {} + + for _, loc in ipairs(locals) do + if loc.reference and loc.reference.node then + table.insert(refs, loc.reference.node) + end + end + + return refs +end + +--- Gets a table with all the scopes containing a node +-- The order is from most specific to least (bottom up) +function M.get_scope_tree(node, bufnr) + local scopes = {} + + for scope in M.iter_scope_tree(node, bufnr) do + table.insert(scopes, scope) + end + + return scopes +end + +--- Iterates over a nodes scopes moving from the bottom up +function M.iter_scope_tree(node, bufnr) + local last_node = node + return function() + if not last_node then + return + end + + local scope = M.containing_scope(last_node, bufnr, false) or ts_utils.get_root_for_node(node) + + last_node = scope:parent() + + return scope + end +end + +-- Gets a table of all nodes and their 'kinds' from a locals list +-- @param local_def the local list result +-- @returns a list of node entries +function M.get_local_nodes(local_def) + local result = {} + + M.recurse_local_nodes(local_def, function(def, node, kind) + table.insert(result, vim.tbl_extend("keep", { kind = kind }, def)) + end) + + return result +end + +-- Recurse locals results until a node is found. +-- The accumulator function is given +-- * The table of the node +-- * The node +-- * The full definition match `@definition.var.something` -> 'var.something' +-- * The last definition match `@definition.var.something` -> 'something' +-- @param The locals result +-- @param The accumulator function +-- @param The full match path to append to +-- @param The last match +function M.recurse_local_nodes(local_def, accumulator, full_match, last_match) + if type(local_def) ~= "table" then + return + end + + if local_def.node then + accumulator(local_def, local_def.node, full_match, last_match) + else + for match_key, def in pairs(local_def) do + M.recurse_local_nodes(def, accumulator, full_match and (full_match .. "." .. match_key) or match_key, match_key) + end + end +end + +--- Get a single dimension table to look definition nodes. +-- Keys are generated by using the range of the containing scope and the text of the definition node. +-- This makes looking up a definition for a given scope a simple key lookup. +-- +-- This is memoized by buffer tick. If the function is called in succession +-- without the buffer tick changing, then the previous result will be used +-- since the syntax tree hasn't changed. +-- +-- Usage lookups require finding the definition of the node, so `find_definition` +-- is called very frequently, which is why this lookup must be fast as possible. +-- +-- @param bufnr: the buffer +-- @returns a table for looking up definitions +M.get_definitions_lookup_table = ts_utils.memoize_by_buf_tick(function(bufnr) + local definitions = M.get_definitions(bufnr) + local result = {} + + for _, definition in ipairs(definitions) do + for _, node_entry in ipairs(M.get_local_nodes(definition)) do + local scopes = M.get_definition_scopes(node_entry.node, bufnr, node_entry.scope) + -- Always use the highest valid scope + local scope = scopes[#scopes] + local node_text = ts_utils.get_node_text(node_entry.node, bufnr)[1] + local id = M.get_definition_id(scope, node_text) + + result[id] = node_entry + end + end + + return result +end) + +--- Gets all the scopes of a definition based on the scope type +-- Scope types can be +-- +-- "parent": Uses the parent of the containing scope, basically, skipping a scope +-- "global": Uses the top most scope +-- "local": Uses the containing scope of the definition. This is the default +-- +-- @param node: the definition node +-- @param bufnr: the buffer +-- @param scope_type: the scope type +function M.get_definition_scopes(node, bufnr, scope_type) + local scopes = {} + local scope_count = 1 + + -- Definition is valid for the containing scope + -- and the containing scope of that scope + if scope_type == "parent" then + scope_count = 2 + -- Definition is valid in all parent scopes + elseif scope_type == "global" then + scope_count = nil + end + + local i = 0 + for scope in M.iter_scope_tree(node, bufnr) do + table.insert(scopes, scope) + i = i + 1 + + if scope_count and i >= scope_count then + break + end + end + + return scopes +end + +function M.find_definition(node, bufnr) + local def_lookup = M.get_definitions_lookup_table(bufnr) + local node_text = ts_utils.get_node_text(node, bufnr)[1] + + for scope in M.iter_scope_tree(node, bufnr) do + local id = M.get_definition_id(scope, node_text) + + if def_lookup[id] then + local entry = def_lookup[id] + + return entry.node, scope, entry.kind + end + end + + return node, ts_utils.get_root_for_node(node), nil +end + +-- Finds usages of a node in a given scope. +-- @param node the node to find usages for +-- @param scope_node the node to look within +-- @returns a list of nodes +function M.find_usages(node, scope_node, bufnr) + local bufnr = bufnr or api.nvim_get_current_buf() + local node_text = ts_utils.get_node_text(node, bufnr)[1] + + if not node_text or #node_text < 1 then + return {} + end + + local scope_node = scope_node or ts_utils.get_root_for_node(node) + local usages = {} + + for match in M.iter_locals(bufnr, scope_node) do + if + match.reference + and match.reference.node + and ts_utils.get_node_text(match.reference.node, bufnr)[1] == node_text + then + local def_node, _, kind = M.find_definition(match.reference.node, bufnr) + + if kind == nil or def_node == node then + table.insert(usages, match.reference.node) + end + end + end + + return usages +end + +function M.containing_scope(node, bufnr, allow_scope) + local bufnr = bufnr or api.nvim_get_current_buf() + local allow_scope = allow_scope == nil or allow_scope == true + + local scopes = M.get_scopes(bufnr) + if not node or not scopes then + return + end + + local iter_node = node + + while iter_node ~= nil and not vim.tbl_contains(scopes, iter_node) do + iter_node = iter_node:parent() + end + + return iter_node or (allow_scope and node or nil) +end + +function M.nested_scope(node, cursor_pos) + local bufnr = api.nvim_get_current_buf() + + local scopes = M.get_scopes(bufnr) + if not node or not scopes then + return + end + + local row = cursor_pos.row + local col = cursor_pos.col + local scope = M.containing_scope(node) + + for _, child in ipairs(ts_utils.get_named_children(scope)) do + local row_, col_ = child:start() + if vim.tbl_contains(scopes, child) and ((row_ + 1 == row and col_ > col) or row_ + 1 > row) then + return child + end + end +end + +function M.next_scope(node) + local bufnr = api.nvim_get_current_buf() + + local scopes = M.get_scopes(bufnr) + if not node or not scopes then + return + end + + local scope = M.containing_scope(node) + + local parent = scope:parent() + if not parent then + return + end + + local is_prev = true + for _, child in ipairs(ts_utils.get_named_children(parent)) do + if child == scope then + is_prev = false + elseif not is_prev and vim.tbl_contains(scopes, child) then + return child + end + end +end + +function M.previous_scope(node) + local bufnr = api.nvim_get_current_buf() + + local scopes = M.get_scopes(bufnr) + if not node or not scopes then + return + end + + local scope = M.containing_scope(node) + + local parent = scope:parent() + if not parent then + return + end + + local is_prev = true + local children = ts_utils.get_named_children(parent) + for i = #children, 1, -1 do + if children[i] == scope then + is_prev = false + elseif not is_prev and vim.tbl_contains(scopes, children[i]) then + return children[i] + end + end +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/parsers.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/parsers.lua new file mode 100644 index 000000000..07332d7c0 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/parsers.lua @@ -0,0 +1,1129 @@ +local api = vim.api +local ts = vim.treesitter + +local filetype_to_parsername = { + arduino = "cpp", + javascriptreact = "javascript", + ecma = "javascript", + jsx = "javascript", + PKGBUILD = "bash", + html_tags = "html", + ["typescript.tsx"] = "tsx", + terraform = "hcl", + ["html.handlebars"] = "glimmer", + systemverilog = "verilog", + cls = "latex", + sty = "latex", + OpenFOAM = "foam", + pandoc = "markdown", + rmd = "markdown", +} + +local list = setmetatable({}, { + __newindex = function(table, parsername, parserconfig) + rawset( + table, + parsername, + setmetatable(parserconfig, { + __newindex = function(parserconfigtable, key, value) + if key == "used_by" then + require("nvim-treesitter.utils").notify( + "used_by is deprecated, please use 'filetype_to_parsername'", + vim.log.levels.WARN + ) + filetype_to_parsername[value] = parsername + else + rawset(parserconfigtable, key, value) + end + end, + }) + ) + + filetype_to_parsername[parserconfig.filetype or parsername] = parsername + end, +}) + +list.scheme = { + install_info = { + url = "https://github.com/6cdh/tree-sitter-scheme", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@6cdh" }, +} + +list.javascript = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-javascript", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@steelsojka" }, +} + +list.rego = { + install_info = { + url = "https://github.com/FallenAngel97/tree-sitter-rego", + files = { "src/parser.c" }, + }, + maintainers = { "@FallenAngel97" }, + filetype = "rego", +} + +list.c = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-c", + files = { "src/parser.c" }, + }, + maintainers = { "@vigoux" }, +} + +list.clojure = { + install_info = { + url = "https://github.com/sogaiu/tree-sitter-clojure", + files = { "src/parser.c" }, + }, + maintainers = { "@sogaiu" }, +} + +list.commonlisp = { + install_info = { + url = "https://github.com/theHamsta/tree-sitter-commonlisp", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + filetype = "lisp", + maintainers = { "@theHamsta" }, +} + +list.cpp = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-cpp", + files = { "src/parser.c", "src/scanner.cc" }, + generate_requires_npm = true, + }, + maintainers = { "@theHamsta" }, +} + +list.cuda = { + install_info = { + url = "https://github.com/theHamsta/tree-sitter-cuda", + files = { "src/parser.c", "src/scanner.cc" }, + generate_requires_npm = true, + }, + maintainers = { "@theHamsta" }, +} + +list.d = { + install_info = { + url = "https://github.com/CyberShadow/tree-sitter-d", + files = { "src/parser.c", "src/scanner.cc" }, + requires_generate_from_grammar = true, + }, + maintainers = { "@nawordar" }, + -- Generating grammar takes ~60s + experimental = true, +} + +list.glsl = { + install_info = { + url = "https://github.com/theHamsta/tree-sitter-glsl", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + maintainers = { "@theHamsta" }, +} + +list.dockerfile = { + install_info = { + url = "https://github.com/camdencheek/tree-sitter-dockerfile", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@camdencheek" }, +} + +list.dot = { + install_info = { + url = "https://github.com/rydesun/tree-sitter-dot", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@rydesun" }, +} + +list.rust = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-rust", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@vigoux" }, +} + +list.fusion = { + install_info = { + url = "https://gitlab.com/jirgn/tree-sitter-fusion.git", + files = { "src/parser.c", "src/scanner.c" }, + branch = "main", + }, + maintainers = { "@jirgn" }, +} + +list.ledger = { + install_info = { + url = "https://github.com/cbarrete/tree-sitter-ledger", + files = { "src/parser.c" }, + }, + maintainers = { "@cbarrete" }, +} + +list.lua = { + install_info = { + url = "https://github.com/MunifTanjim/tree-sitter-lua", + branch = "main", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@muniftanjim" }, +} + +list.python = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-python", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@stsewd", "@theHamsta" }, +} + +list.go = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-go", + files = { "src/parser.c" }, + }, + maintainers = { "@theHamsta", "@WinWisely268" }, +} + +list.gomod = { + install_info = { + url = "https://github.com/camdencheek/tree-sitter-go-mod", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@camdencheek" }, + filetype = "gomod", +} + +list.gowork = { + install_info = { + url = "https://github.com/omertuc/tree-sitter-go-work", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@omertuc" }, + filetype = "gowork", +} + +list.graphql = { + install_info = { + url = "https://github.com/bkegley/tree-sitter-graphql", + files = { "src/parser.c" }, + }, + maintainers = { "@bkegley" }, +} + +list.ruby = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-ruby", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@TravonteD" }, +} + +list.perl = { + install_info = { + url = "https://github.com/ganezdragon/tree-sitter-perl", + files = { "src/parser.c", "src/scanner.cc" }, + generate_requires_npm = true, + }, + maintainers = { "@ganezdragon" }, +} + +list.bash = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-bash", + files = { "src/parser.c", "src/scanner.cc" }, + }, + filetype = "sh", + maintainers = { "@TravonteD" }, +} + +list.fish = { + install_info = { + url = "https://github.com/ram02z/tree-sitter-fish", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@ram02z" }, +} + +list.php = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-php", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@tk-shirasaka" }, +} + +list.java = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-java", + files = { "src/parser.c" }, + }, + maintainers = { "@p00f" }, +} + +list.kotlin = { + install_info = { + url = "https://github.com/fwcd/tree-sitter-kotlin", + branch = "main", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@SalBakraa" }, +} + +list.html = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-html", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@TravonteD" }, +} + +list.julia = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-julia", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@mroavi", "@theHamsta" }, +} + +list.json = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-json", + files = { "src/parser.c" }, + }, + maintainers = { "@steelsojka" }, +} + +list.css = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-css", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@TravonteD" }, +} + +list.scss = { + install_info = { + url = "https://github.com/serenadeai/tree-sitter-scss", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@elianiva" }, +} + +list.erlang = { + install_info = { + url = "https://github.com/AbstractMachinesLab/tree-sitter-erlang", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@ostera" }, +} + +list.elixir = { + install_info = { + url = "https://github.com/elixir-lang/tree-sitter-elixir", + files = { "src/parser.c", "src/scanner.cc" }, + branch = "main", + }, + maintainers = { "@jonatanklosko", "@connorlay" }, +} + +list.gleam = { + install_info = { + url = "https://github.com/J3RN/tree-sitter-gleam", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@connorlay" }, +} + +list.surface = { + install_info = { + url = "https://github.com/connorlay/tree-sitter-surface", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "sface", + maintainers = { "@connorlay" }, +} + +list.eex = { + install_info = { + url = "https://github.com/connorlay/tree-sitter-eex", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "eex", + maintainers = { "@connorlay" }, +} + +list.heex = { + install_info = { + url = "https://github.com/connorlay/tree-sitter-heex", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "heex", + maintainers = { "@connorlay" }, +} + +list.ocaml = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-ocaml", + files = { "src/parser.c", "src/scanner.cc" }, + location = "tree-sitter-ocaml/ocaml", + }, + maintainers = { "@undu" }, +} + +list.ocaml_interface = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-ocaml", + files = { "src/parser.c", "src/scanner.cc" }, + location = "tree-sitter-ocaml_interface/interface", + }, + maintainers = { "@undu" }, + filetype = "ocamlinterface", +} + +list.ocamllex = { + install_info = { + url = "https://github.com/atom-ocaml/tree-sitter-ocamllex", + files = { "src/parser.c", "src/scanner.cc" }, + requires_generate_from_grammar = true, + }, + maintainers = { "@undu" }, +} + +list.swift = { + install_info = { + url = "https://github.com/alex-pinkus/tree-sitter-swift", + files = { "src/parser.c", "src/scanner.c" }, + requires_generate_from_grammar = true, + generate_requires_npm = true, + }, +} + +list.c_sharp = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-c-sharp", + files = { "src/parser.c", "src/scanner.c" }, + }, + filetype = "cs", + maintainers = { "@Luxed" }, +} + +list.todotxt = { + install_info = { + url = "https://github.com/arnarg/tree-sitter-todotxt.git", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "todotxt", + maintainers = { "@arnarg" }, + experimental = true, +} + +list.typescript = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-typescript", + files = { "src/parser.c", "src/scanner.c" }, + location = "tree-sitter-typescript/typescript", + generate_requires_npm = true, + }, + maintainers = { "@steelsojka" }, +} + +list.tsx = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-typescript", + files = { "src/parser.c", "src/scanner.c" }, + location = "tree-sitter-tsx/tsx", + generate_requires_npm = true, + }, + filetype = "typescriptreact", + maintainers = { "@steelsojka" }, +} + +list.scala = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-scala", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@stevanmilic" }, +} + +list.supercollider = { + install_info = { + url = "https://github.com/madskjeldgaard/tree-sitter-supercollider", + files = { "src/parser.c", "src/scanner.c" }, + branch = "main", + }, + maintainers = { "@madskjeldgaard" }, + filetype = "supercollider", +} + +list.slint = { + install_info = { + url = "https://github.com/jrmoulton/tree-sitter-slint", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@jrmoulton" }, + experimental = true, +} + +list.haskell = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-haskell", + files = { "src/parser.c", "src/scanner.c" }, + }, +} + +list.hcl = { + install_info = { + url = "https://github.com/MichaHoffmann/tree-sitter-hcl", + files = { "src/parser.c", "src/scanner.cc" }, + branch = "main", + }, + maintainers = { "@MichaHoffmann" }, + filetype = "hcl", +} + +list.markdown = { + install_info = { + url = "https://github.com/MDeiml/tree-sitter-markdown", + files = { "src/parser.c", "src/scanner.cc" }, + branch = "main", + }, + experimental = true, +} + +list.tlaplus = { + install_info = { + url = "https://github.com/tlaplus-community/tree-sitter-tlaplus", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@ahelwer", "@susliko" }, + filetype = "tla", +} + +list.toml = { + install_info = { + url = "https://github.com/ikatyang/tree-sitter-toml", + files = { "src/parser.c", "src/scanner.c" }, + generate_requires_npm = true, + }, + maintainers = { "@tk-shirasaka" }, +} + +list.glimmer = { + install_info = { + url = "https://github.com/alexlafroscia/tree-sitter-glimmer", + files = { "src/parser.c", "src/scanner.c" }, + branch = "main", + }, + readme_name = "Glimmer and Ember", + maintainers = { "@alexlafroscia" }, + filetype = "handlebars", +} + +list.pug = { + install_info = { + url = "https://github.com/zealot128/tree-sitter-pug", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@zealot128" }, + filetype = "pug", +} + +list.vue = { + install_info = { + url = "https://github.com/ikatyang/tree-sitter-vue", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@WhyNotHugo" }, +} + +list.jsonc = { + install_info = { + url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc.git", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + readme_name = "JSON with comments", + maintainers = { "@WhyNotHugo" }, +} + +list.elm = { + install_info = { + url = "https://github.com/elm-tooling/tree-sitter-elm", + files = { "src/parser.c", "src/scanner.cc" }, + }, +} + +list.yaml = { + install_info = { + url = "https://github.com/ikatyang/tree-sitter-yaml", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@stsewd" }, +} + +list.yang = { + install_info = { + url = "https://github.com/Hubro/tree-sitter-yang", + files = { "src/parser.c" }, + }, + maintainers = { "@Hubro" }, + filetype = "yang", +} + +list.ninja = { + install_info = { + url = "https://github.com/alemuller/tree-sitter-ninja", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@alemuller" }, +} + +list.nix = { + install_info = { + url = "https://github.com/cstrahan/tree-sitter-nix", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@leo60228" }, +} + +list.dart = { + install_info = { + url = "https://github.com/UserNobody14/tree-sitter-dart", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@Akin909" }, +} + +list.rst = { + install_info = { + url = "https://github.com/stsewd/tree-sitter-rst", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@stsewd" }, +} + +list.fennel = { + install_info = { + url = "https://github.com/travonted/tree-sitter-fennel", + files = { "src/parser.c" }, + }, + maintainers = { "@TravonteD" }, +} + +list.teal = { + install_info = { + url = "https://github.com/euclidianAce/tree-sitter-teal", + files = { "src/parser.c", "src/scanner.c" }, + requires_generate_from_grammar = true, + }, + maintainers = { "@euclidianAce" }, +} + +list.ql = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-ql", + files = { "src/parser.c" }, + }, + maintainers = { "@pwntester" }, +} + +list.verilog = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-verilog", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + maintainers = { "@zegervdv" }, + -- The parser still uses API version 12, because it does not compile with 13 + experimental = true, +} + +list.pascal = { + install_info = { + url = "https://github.com/Isopod/tree-sitter-pascal.git", + files = { "src/parser.c" }, + }, + maintainers = { "@isopod" }, +} + +-- Parsers for injections +list.phpdoc = { + install_info = { + url = "https://github.com/claytonrcarter/tree-sitter-phpdoc", + files = { "src/parser.c", "src/scanner.c" }, + -- parser.c in the repo still based on TS 0.17 due to other dependencies + requires_generate_from_grammar = true, + generate_requires_npm = true, + }, + maintainers = { "@mikehaertl" }, + experimental = true, +} + +list.regex = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-regex", + files = { "src/parser.c" }, + }, + maintainers = { "@theHamsta" }, +} + +list.comment = { + install_info = { + url = "https://github.com/stsewd/tree-sitter-comment", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@stsewd" }, +} + +list.jsdoc = { + install_info = { + url = "https://github.com/tree-sitter/tree-sitter-jsdoc", + files = { "src/parser.c" }, + }, + maintainers = { "@steelsojka" }, +} + +list.query = { + install_info = { + url = "https://github.com/nvim-treesitter/tree-sitter-query", + files = { "src/parser.c" }, + }, + readme_name = "Tree-sitter query language", + maintainers = { "@steelsojka" }, +} + +list.sparql = { + install_info = { + url = "https://github.com/BonaBeavis/tree-sitter-sparql", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@bonabeavis" }, +} + +list.gdscript = { + install_info = { + url = "https://github.com/PrestonKnopp/tree-sitter-gdscript", + files = { "src/parser.c", "src/scanner.cc" }, + }, + readme_name = "Godot (gdscript)", + maintainers = { "@Shatur95" }, +} + +list.godot_resource = { + install_info = { + url = "https://github.com/PrestonKnopp/tree-sitter-godot-resource", + files = { "src/parser.c", "src/scanner.c" }, + requires_generate_from_grammar = true, + }, + filetype = "gdresource", + readme_name = "Godot Resources (gdresource)", + maintainers = { "@pierpo" }, +} + +list.turtle = { + install_info = { + url = "https://github.com/BonaBeavis/tree-sitter-turtle", + files = { "src/parser.c" }, + branch = "main", + }, + maintainers = { "@bonabeavis" }, +} + +list.devicetree = { + install_info = { + url = "https://github.com/joelspadin/tree-sitter-devicetree", + files = { "src/parser.c" }, + branch = "main", + requires_generate_from_grammar = true, + }, + filetype = "dts", + maintainers = { "@jedrzejboczar" }, +} + +list.svelte = { + install_info = { + url = "https://github.com/Himujjal/tree-sitter-svelte", + files = { "src/parser.c", "src/scanner.c" }, + branch = "master", + }, + maintainers = { "@elianiva" }, +} + +list.r = { + install_info = { + url = "https://github.com/r-lib/tree-sitter-r", + files = { "src/parser.c" }, + }, + maintainers = { "@jimhester" }, +} + +list.beancount = { + install_info = { + url = "https://github.com/polarmutex/tree-sitter-beancount", + files = { "src/parser.c" }, + branch = "master", + }, + maintainers = { "@polarmutex" }, +} + +list.latex = { + install_info = { + url = "https://github.com/latex-lsp/tree-sitter-latex", + files = { "src/parser.c", "src/scanner.c" }, + }, + filetype = "tex", + maintainers = { "@theHamsta, @clason" }, +} + +list.bibtex = { + install_info = { + url = "https://github.com/latex-lsp/tree-sitter-bibtex", + files = { "src/parser.c" }, + }, + filetype = "bib", + maintainers = { "@theHamsta, @clason" }, +} + +list.zig = { + install_info = { + url = "https://github.com/maxxnino/tree-sitter-zig", + files = { "src/parser.c" }, + branch = "main", + }, + filetype = "zig", + maintainers = { "@maxxnino" }, +} + +list.fortran = { + install_info = { + url = "https://github.com/stadelmanma/tree-sitter-fortran", + files = { "src/parser.c", "src/scanner.cc" }, + }, +} + +list.cmake = { + install_info = { + url = "https://github.com/uyha/tree-sitter-cmake", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@uyha" }, +} + +list.vim = { + install_info = { + url = "https://github.com/vigoux/tree-sitter-viml", + files = { "src/parser.c", "src/scanner.c" }, + }, + filetype = "vim", + maintainers = { "@vigoux" }, +} + +list.help = { + install_info = { + url = "https://github.com/vigoux/tree-sitter-vimdoc", + files = { "src/parser.c", "src/scanner.c" }, + }, + filetype = "help", + maintainers = { "@vigoux" }, + experimental = true, +} + +list.json5 = { + install_info = { + url = "https://github.com/Joakker/tree-sitter-json5", + files = { "src/parser.c" }, + }, + filetype = "json5", + maintainers = { "@Joakker" }, +} + +list.pioasm = { + install_info = { + url = "https://github.com/leo60228/tree-sitter-pioasm", + branch = "main", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@leo60228" }, +} + +list.hjson = { + install_info = { + url = "https://github.com/winston0410/tree-sitter-hjson", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + maintainers = { "@winston0410" }, +} + +list.hocon = { + install_info = { + url = "https://github.com/antosha417/tree-sitter-hocon", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + maintainers = { "@antosha417" }, +} + +list.llvm = { + install_info = { + url = "https://github.com/benwilliamgraham/tree-sitter-llvm", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@benwilliamgraham" }, +} + +list.http = { + install_info = { + url = "https://github.com/NTBBloodbath/tree-sitter-http", + branch = "main", + files = { "src/parser.c" }, + generate_requires_npm = true, + }, + maintainers = { "@NTBBloodbath" }, +} + +list.prisma = { + install_info = { + url = "https://github.com/victorhqc/tree-sitter-prisma", + branch = "master", + files = { "src/parser.c" }, + }, + maintainers = { "@elianiva" }, +} + +list.make = { + install_info = { + url = "https://github.com/alemuller/tree-sitter-make", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@lewis6991" }, +} + +list.rasi = { + install_info = { + url = "https://github.com/Fymyte/tree-sitter-rasi", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@Fymyte" }, +} + +list.foam = { + install_info = { + url = "https://github.com/FoamScience/tree-sitter-foam", + branch = "master", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@FoamScience" }, + filetype = "foam", + -- Queries might change over time on the grammar's side + -- Otherwise everything runs fine + experimental = true, +} + +list.hack = { + install_info = { + url = "https://github.com/slackhq/tree-sitter-hack", + branch = "main", + files = { "src/parser.c", "src/scanner.cc" }, + }, +} + +list.norg = { + install_info = { + url = "https://github.com/nvim-neorg/tree-sitter-norg", + branch = "main", + files = { "src/parser.c", "src/scanner.cc" }, + use_makefile = true, + cxx_standard = "c++14", + }, + maintainers = { "@JoeyGrajciar", "@vhyrro", "@mrossinek" }, +} + +list.vala = { + install_info = { + url = "https://github.com/matbme/tree-sitter-vala", + branch = "main", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@matbme" }, +} + +list.lalrpop = { + install_info = { + url = "https://github.com/traxys/tree-sitter-lalrpop", + branch = "master", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainers = { "@traxys" }, +} + +list.solidity = { + install_info = { + url = "https://github.com/YongJieYongJie/tree-sitter-solidity", + branch = "with-generated-c-code", + files = { "src/parser.c" }, + }, + maintainers = { "@YongJieYongJie" }, +} + +list.cooklang = { + install_info = { + url = "https://github.com/addcninblue/tree-sitter-cooklang", + branch = "master", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@addcninblue" }, +} + +list.elvish = { + install_info = { + url = "https://github.com/ckafi/tree-sitter-elvish", + branch = "main", + files = { "src/parser.c" }, + }, + maintainers = { "@ckafi" }, +} + +list.astro = { + install_info = { + url = "https://github.com/virchau13/tree-sitter-astro", + branch = "master", + files = { "src/parser.c", "src/scanner.cc" }, + }, + maintainers = { "@virchau13" }, +} + +list.wgsl = { + install_info = { + url = "https://github.com/szebniok/tree-sitter-wgsl", + files = { "src/parser.c" }, + }, + maintainers = { "@szebniok" }, + filetype = "wgsl", +} + +local M = { + list = list, + filetype_to_parsername = filetype_to_parsername, +} + +function M.ft_to_lang(ft) + local result = filetype_to_parsername[ft] + if result then + return result + else + ft = vim.split(ft, ".", true)[1] + return filetype_to_parsername[ft] or ft + end +end + +function M.available_parsers() + if vim.fn.executable "tree-sitter" == 1 and vim.fn.executable "node" == 1 then + return vim.tbl_keys(M.list) + else + return vim.tbl_filter(function(p) + return not M.list[p].install_info.requires_generate_from_grammar + end, vim.tbl_keys(M.list)) + end +end + +function M.maintained_parsers() + require("nvim-treesitter.utils").notify( + "ensure_installed='maintained' will be removed April 30, 2022. Specify parsers explicitly or use 'all'.", + vim.log.levels.WARN + ) + local has_tree_sitter_cli = vim.fn.executable "tree-sitter" == 1 and vim.fn.executable "node" == 1 + return vim.tbl_filter(function(lang) + return M.list[lang].maintainers + and not M.list[lang].experimental + and (has_tree_sitter_cli or not M.list[lang].install_info.requires_generate_from_grammar) + end, M.available_parsers()) +end + +function M.get_parser_configs() + return M.list +end + +local parser_files + +function M.reset_cache() + parser_files = setmetatable({}, { + __index = function(tbl, key) + rawset(tbl, key, api.nvim_get_runtime_file("parser/" .. key .. ".*", false)) + return rawget(tbl, key) + end, + }) +end + +M.reset_cache() + +function M.has_parser(lang) + lang = lang or M.get_buf_lang(api.nvim_get_current_buf()) + + if not lang or #lang == 0 then + return false + end + -- HACK: nvim internal API + if vim._ts_has_language(lang) then + return true + end + return #parser_files[lang] > 0 +end + +function M.get_parser(bufnr, lang) + bufnr = bufnr or api.nvim_get_current_buf() + lang = lang or M.get_buf_lang(bufnr) + + if M.has_parser(lang) then + return ts.get_parser(bufnr, lang) + end +end + +-- @deprecated This is only kept for legacy purposes. +-- All root nodes should be accounted for. +function M.get_tree_root(bufnr) + bufnr = bufnr or api.nvim_get_current_buf() + return M.get_parser(bufnr):parse()[1]:root() +end + +-- get language of given buffer +-- @param optional buffer number or current buffer +-- @returns language string of buffer +function M.get_buf_lang(bufnr) + bufnr = bufnr or api.nvim_get_current_buf() + return M.ft_to_lang(api.nvim_buf_get_option(bufnr, "ft")) +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/query.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/query.lua new file mode 100644 index 000000000..bad1c27e6 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/query.lua @@ -0,0 +1,390 @@ +local api = vim.api +local tsq = require "vim.treesitter.query" +local tsrange = require "nvim-treesitter.tsrange" +local utils = require "nvim-treesitter.utils" +local parsers = require "nvim-treesitter.parsers" +local caching = require "nvim-treesitter.caching" + +local M = {} + +local EMPTY_ITER = function() end + +M.built_in_query_groups = { "highlights", "locals", "folds", "indents", "injections" } + +-- Creates a function that checks whether a given query exists +-- for a specific language. +local function get_query_guard(query) + return function(lang) + return M.has_query_files(lang, query) + end +end + +for _, query in ipairs(M.built_in_query_groups) do + M["has_" .. query] = get_query_guard(query) +end + +function M.available_query_groups() + local query_files = api.nvim_get_runtime_file("queries/*/*.scm", true) + local groups = {} + for _, f in ipairs(query_files) do + groups[vim.fn.fnamemodify(f, ":t:r")] = true + end + local list = {} + for k, _ in pairs(groups) do + table.insert(list, k) + end + return list +end + +do + local query_cache = caching.create_buffer_cache() + + local function update_cached_matches(bufnr, changed_tick, query_group) + query_cache.set(query_group, bufnr, { + tick = changed_tick, + cache = M.collect_group_results(bufnr, query_group) or {}, + }) + end + + function M.get_matches(bufnr, query_group) + bufnr = bufnr or api.nvim_get_current_buf() + local cached_local = query_cache.get(query_group, bufnr) + if not cached_local or api.nvim_buf_get_changedtick(bufnr) > cached_local.tick then + update_cached_matches(bufnr, api.nvim_buf_get_changedtick(bufnr), query_group) + end + + return query_cache.get(query_group, bufnr).cache + end +end + +local function runtime_queries(lang, query_name) + return api.nvim_get_runtime_file(string.format("queries/%s/%s.scm", lang, query_name), true) or {} +end + +local query_files_cache = {} +function M.has_query_files(lang, query_name) + if not query_files_cache[lang] then + query_files_cache[lang] = {} + end + if query_files_cache[lang][query_name] == nil then + local files = runtime_queries(lang, query_name) + query_files_cache[lang][query_name] = files and #files > 0 + end + return query_files_cache[lang][query_name] +end + +do + local mt = {} + mt.__index = function(tbl, key) + if rawget(tbl, key) == nil then + rawset(tbl, key, {}) + end + return rawget(tbl, key) + end + + -- cache will auto set the table for each lang if it is nil + local cache = setmetatable({}, mt) + + --- Same as `vim.treesitter.query` except will return cached values + function M.get_query(lang, query_name) + if cache[lang][query_name] == nil then + cache[lang][query_name] = tsq.get_query(lang, query_name) + end + + return cache[lang][query_name] + end + + --- Invalidates the query file cache. + --- If lang and query_name is both present, will reload for only the lang and query_name. + --- If only lang is present, will reload all query_names for that lang + --- If none are present, will reload everything + function M.invalidate_query_cache(lang, query_name) + if lang and query_name then + cache[lang][query_name] = nil + if query_files_cache[lang] then + query_files_cache[lang][query_name] = nil + end + elseif lang and not query_name then + query_files_cache[lang] = nil + for query_name, _ in pairs(cache[lang]) do + M.invalidate_query_cache(lang, query_name) + end + elseif not lang and not query_name then + query_files_cache = {} + for lang, _ in pairs(cache) do + for query_name, _ in pairs(cache[lang]) do + M.invalidate_query_cache(lang, query_name) + end + end + else + error "Cannot have query_name by itself!" + end + end +end + +--- This function is meant for an autocommand and not to be used. Only use if file is a query file. +function M.invalidate_query_file(fname) + local fnamemodify = vim.fn.fnamemodify + M.invalidate_query_cache(fnamemodify(fname, ":p:h:t"), fnamemodify(fname, ":t:r")) +end + +local function prepare_query(bufnr, query_name, root, root_lang) + local buf_lang = parsers.get_buf_lang(bufnr) + + if not buf_lang then + return + end + + local parser = parsers.get_parser(bufnr, buf_lang) + if not parser then + return + end + + if not root then + local first_tree = parser:trees()[1] + + if first_tree then + root = first_tree:root() + end + end + + if not root then + return + end + + local range = { root:range() } + + if not root_lang then + local lang_tree = parser:language_for_range(range) + + if lang_tree then + root_lang = lang_tree:lang() + end + end + + if not root_lang then + return + end + + local query = M.get_query(root_lang, query_name) + if not query then + return + end + + return query, + { + root = root, + source = bufnr, + start = range[1], + -- The end row is exclusive so we need to add 1 to it. + stop = range[3] + 1, + } +end + +function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row) + -- A function that splits a string on '.' + local function split(string) + local t = {} + for str in string.gmatch(string, "([^.]+)") do + table.insert(t, str) + end + + return t + end + -- Given a path (i.e. a List(String)) this functions inserts value at path + local function insert_to_path(object, path, value) + local curr_obj = object + + for index = 1, (#path - 1) do + if curr_obj[path[index]] == nil then + curr_obj[path[index]] = {} + end + + curr_obj = curr_obj[path[index]] + end + + curr_obj[path[#path]] = value + end + + local matches = query:iter_matches(qnode, bufnr, start_row, end_row) + + local function iterator() + local pattern, match = matches() + if pattern ~= nil then + local prepared_match = {} + + -- Extract capture names from each match + for id, node in pairs(match) do + local name = query.captures[id] -- name of the capture in the query + if name ~= nil then + local path = split(name .. ".node") + insert_to_path(prepared_match, path, node) + end + end + + -- Add some predicates for testing + local preds = query.info.patterns[pattern] + if preds then + for _, pred in pairs(preds) do + -- functions + if pred[1] == "set!" and type(pred[2]) == "string" then + insert_to_path(prepared_match, split(pred[2]), pred[3]) + end + if pred[1] == "make-range!" and type(pred[2]) == "string" and #pred == 4 then + insert_to_path( + prepared_match, + split(pred[2] .. ".node"), + tsrange.TSRange.from_nodes(bufnr, match[pred[3]], match[pred[4]]) + ) + end + end + end + + return prepared_match + end + end + return iterator +end + +--- Return all nodes corresponding to a specific capture path (like @definition.var, @reference.type) +-- Works like M.get_references or M.get_scopes except you can choose the capture +-- Can also be a nested capture like @definition.function to get all nodes defining a function. +-- +-- @param bufnr the buffer +-- @param captures a single string or a list of strings +-- @param query_group the name of query group (highlights or injections for example) +-- @param root (optional) node from where to start the search +-- @param lang (optional) the language from where to get the captures. +-- Root nodes can have several languages. +function M.get_capture_matches(bufnr, captures, query_group, root, lang) + if type(captures) == "string" then + captures = { captures } + end + local strip_captures = {} + for i, capture in ipairs(captures) do + if capture:sub(1, 1) ~= "@" then + error 'Captures must start with "@"' + return + end + -- Remove leading "@". + strip_captures[i] = capture:sub(2) + end + + local matches = {} + for match in M.iter_group_results(bufnr, query_group, root, lang) do + for _, capture in ipairs(strip_captures) do + local insert = utils.get_at_path(match, capture) + if insert then + table.insert(matches, insert) + end + end + end + return matches +end + +function M.iter_captures(bufnr, query_name, root, lang) + local query, params = prepare_query(bufnr, query_name, root, lang) + if not query then + return EMPTY_ITER + end + + local iter = query:iter_captures(params.root, params.source, params.start, params.stop) + + local function wrapped_iter() + local id, node, metadata = iter() + if not id then + return + end + + local name = query.captures[id] + if string.sub(name, 1, 1) == "_" then + return wrapped_iter() + end + + return name, node, metadata + end + + return wrapped_iter +end + +function M.find_best_match(bufnr, capture_string, query_group, filter_predicate, scoring_function, root) + if string.sub(capture_string, 1, 1) == "@" then + --remove leading "@" + capture_string = string.sub(capture_string, 2) + end + + local best + local best_score + + for maybe_match in M.iter_group_results(bufnr, query_group, root) do + local match = utils.get_at_path(maybe_match, capture_string) + + if match and filter_predicate(match) then + local current_score = scoring_function(match) + if not best then + best = match + best_score = current_score + end + if current_score > best_score then + best = match + best_score = current_score + end + end + end + return best +end + +-- Iterates matches from a query file. +-- @param bufnr the buffer +-- @param query_group the query file to use +-- @param root the root node +-- @param root the root node lang, if known +function M.iter_group_results(bufnr, query_group, root, root_lang) + local query, params = prepare_query(bufnr, query_group, root, root_lang) + if not query then + return EMPTY_ITER + end + + return M.iter_prepared_matches(query, params.root, params.source, params.start, params.stop) +end + +function M.collect_group_results(bufnr, query_group, root, lang) + local matches = {} + + for prepared_match in M.iter_group_results(bufnr, query_group, root, lang) do + table.insert(matches, prepared_match) + end + + return matches +end + +--- Same as get_capture_matches except this will recursively get matches for every language in the tree. +-- @param bufnr The bufnr +-- @param capture_or_fn The capture to get. If a function is provided then that +-- function will be used to resolve both the capture and query argument. +-- The function can return `nil` to ignore that tree. +-- @param query_type The query to get the capture from. This is ignore if a function is provided +-- for the captuer argument. +function M.get_capture_matches_recursively(bufnr, capture_or_fn, query_type) + local type_fn = type(capture_or_fn) == "function" and capture_or_fn + or function() + return capture_or_fn, query_type + end + local parser = parsers.get_parser(bufnr) + local matches = {} + + if parser then + parser:for_each_tree(function(tree, lang_tree) + local lang = lang_tree:lang() + local capture, type_ = type_fn(lang, tree, lang_tree) + + if capture then + vim.list_extend(matches, M.get_capture_matches(bufnr, capture, type_, tree:root(), lang)) + end + end) + end + + return matches +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/query_predicates.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/query_predicates.lua new file mode 100644 index 000000000..be713304c --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/query_predicates.lua @@ -0,0 +1,130 @@ +local query = require "vim.treesitter.query" + +local function error(str) + vim.api.nvim_err_writeln(str) +end + +local function valid_args(name, pred, count, strict_count) + local arg_count = #pred - 1 + + if strict_count then + if arg_count ~= count then + error(string.format("%s must have exactly %d arguments", name, count)) + return false + end + elseif arg_count < count then + error(string.format("%s must have at least %d arguments", name, count)) + return false + end + + return true +end + +query.add_predicate("nth?", function(match, pattern, bufnr, pred) + if not valid_args("nth?", pred, 2, true) then + return + end + + local node = match[pred[2]] + local n = tonumber(pred[3]) + if node and node:parent() and node:parent():named_child_count() > n then + return node:parent():named_child(n) == node + end + + return false +end) + +local function has_ancestor(match, pattern, bufnr, pred) + if not valid_args(pred[1], pred, 2) then + return + end + + local node = match[pred[2]] + local ancestor_types = { unpack(pred, 3) } + if not node then + return true + end + + local just_direct_parent = pred[1]:find("has-parent", 1, true) + + node = node:parent() + while node do + if vim.tbl_contains(ancestor_types, node:type()) then + return true + end + if just_direct_parent then + node = nil + else + node = node:parent() + end + end + return false +end + +query.add_predicate("has-ancestor?", has_ancestor) + +query.add_predicate("has-parent?", has_ancestor) + +query.add_predicate("is?", function(match, pattern, bufnr, pred) + if not valid_args("is?", pred, 2) then + return + end + + -- Avoid circular dependencies + local locals = require "nvim-treesitter.locals" + local node = match[pred[2]] + local types = { unpack(pred, 3) } + + if not node then + return true + end + + local _, _, kind = locals.find_definition(node, bufnr) + + return vim.tbl_contains(types, kind) +end) + +query.add_predicate("has-type?", function(match, pattern, bufnr, pred) + if not valid_args(pred[1], pred, 2) then + return + end + + local node = match[pred[2]] + local types = { unpack(pred, 3) } + + if not node then + return true + end + + return vim.tbl_contains(types, node:type()) +end) + +-- Just avoid some annoying warnings for this directive +query.add_directive("make-range!", function() end) + +query.add_directive("downcase!", function(match, _, bufnr, pred, metadata) + local text, key, value + + if #pred == 3 then + -- (#downcase! @capture "key") + key = pred[3] + value = metadata[pred[2]][key] + else + -- (#downcase! "key") + key = pred[2] + value = metadata[key] + end + + if type(value) == "string" then + text = value + else + local node = match[value] + text = query.get_node_text(node, bufnr) or "" + end + + if #pred == 3 then + metadata[pred[2]][key] = string.lower(text) + else + metadata[key] = string.lower(text) + end +end) diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/shell_command_selectors.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/shell_command_selectors.lua new file mode 100644 index 000000000..e7de09552 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/shell_command_selectors.lua @@ -0,0 +1,264 @@ +local fn = vim.fn +local utils = require "nvim-treesitter.utils" + +local M = {} + +function M.select_mkdir_cmd(directory, cwd, info_msg) + if fn.has "win32" == 1 then + return { + cmd = "cmd", + opts = { + args = { "/C", "mkdir", directory }, + cwd = cwd, + }, + info = info_msg, + err = "Could not create " .. directory, + } + else + return { + cmd = "mkdir", + opts = { + args = { directory }, + cwd = cwd, + }, + info = info_msg, + err = "Could not create " .. directory, + } + end +end + +function M.select_rm_file_cmd(file, info_msg) + if fn.has "win32" == 1 then + return { + cmd = "cmd", + opts = { + args = { "/C", "if", "exist", file, "del", file }, + }, + info = info_msg, + err = "Could not delete " .. file, + } + else + return { + cmd = "rm", + opts = { + args = { file }, + }, + info = info_msg, + err = "Could not delete " .. file, + } + end +end + +function M.select_executable(executables) + return vim.tbl_filter(function(c) + return c ~= vim.NIL and fn.executable(c) == 1 + end, executables)[1] +end + +function M.select_compiler_args(repo, compiler) + if string.match(compiler, "cl$") or string.match(compiler, "cl.exe$") then + return { + "/Fe:", + "parser.so", + "/Isrc", + repo.files, + "-Os", + "/LD", + } + elseif string.match(compiler, "zig$") or string.match(compiler, "zig.exe$") then + return { + "c++", + "-o", + "parser.so", + repo.files, + "-lc", + "-Isrc", + "-shared", + "-Os", + } + else + local args = { + "-o", + "parser.so", + "-I./src", + repo.files, + "-shared", + "-Os", + "-lstdc++", + } + if fn.has "win32" == 0 then + table.insert(args, "-fPIC") + end + return args + end +end + +function M.select_compile_command(repo, cc, compile_location) + local make = M.select_executable { "gmake", "make" } + if + string.match(cc, "cl$") + or string.match(cc, "cl.exe$") + or not repo.use_makefile + or fn.has "win32" == 1 + or not make + then + return { + cmd = cc, + info = "Compiling...", + err = "Error during compilation", + opts = { + args = vim.tbl_flatten(M.select_compiler_args(repo, cc)), + cwd = compile_location, + }, + } + else + return { + cmd = make, + info = "Compiling...", + err = "Error during compilation", + opts = { + args = { + "--makefile=" .. utils.join_path(utils.get_package_path(), "scripts", "compile_parsers.makefile"), + "CC=" .. cc, + "CXX_STANDARD=" .. (repo.cxx_standard or "c++14"), + }, + cwd = compile_location, + }, + } + end +end + +function M.select_install_rm_cmd(cache_folder, project_name) + if fn.has "win32" == 1 then + local dir = cache_folder .. "\\" .. project_name + return { + cmd = "cmd", + opts = { + args = { "/C", "if", "exist", dir, "rmdir", "/s", "/q", dir }, + }, + } + else + return { + cmd = "rm", + opts = { + args = { "-rf", cache_folder .. "/" .. project_name }, + }, + } + end +end + +function M.select_mv_cmd(from, to, cwd) + if fn.has "win32" == 1 then + return { + cmd = "cmd", + opts = { + args = { "/C", "move", "/Y", from, to }, + cwd = cwd, + }, + } + else + return { + cmd = "mv", + opts = { + args = { from, to }, + cwd = cwd, + }, + } + end +end + +function M.select_download_commands(repo, project_name, cache_folder, revision, prefer_git) + local can_use_tar = vim.fn.executable "tar" == 1 and vim.fn.executable "curl" == 1 + local is_github = repo.url:find("github.com", 1, true) + local is_gitlab = repo.url:find("gitlab.com", 1, true) + + revision = revision or repo.branch or "master" + + if can_use_tar and (is_github or is_gitlab) and not prefer_git then + local path_sep = utils.get_path_sep() + local url = repo.url:gsub(".git$", "") + + return { + M.select_install_rm_cmd(cache_folder, project_name .. "-tmp"), + { + cmd = "curl", + info = "Downloading...", + err = "Error during download, please verify your internet connection", + opts = { + args = { + "--silent", + "-L", -- follow redirects + is_github and url .. "/archive/" .. revision .. ".tar.gz" + or url .. "/-/archive/" .. revision .. "/" .. project_name .. "-" .. revision .. ".tar.gz", + "--output", + project_name .. ".tar.gz", + }, + cwd = cache_folder, + }, + }, + M.select_mkdir_cmd(project_name .. "-tmp", cache_folder, "Creating temporary directory"), + { + cmd = "tar", + info = "Extracting...", + err = "Error during tarball extraction.", + opts = { + args = { + "-xvzf", + project_name .. ".tar.gz", + "-C", + project_name .. "-tmp", + }, + cwd = cache_folder, + }, + }, + M.select_rm_file_cmd(cache_folder .. path_sep .. project_name .. ".tar.gz"), + M.select_mv_cmd( + utils.join_path(project_name .. "-tmp", url:match "[^/]-$" .. "-" .. revision), + project_name, + cache_folder + ), + M.select_install_rm_cmd(cache_folder, project_name .. "-tmp"), + } + else + local git_folder = utils.join_path(cache_folder, project_name) + local clone_error = "Error during download, please verify your internet connection" + + return { + { + cmd = "git", + info = "Downloading...", + err = clone_error, + opts = { + args = { + "clone", + repo.url, + project_name, + }, + cwd = cache_folder, + }, + }, + { + cmd = "git", + info = "Checking out locked revision", + err = "Error while checking out revision", + opts = { + args = { + "checkout", + revision, + }, + cwd = git_folder, + }, + }, + } + end +end + +function M.make_directory_change_for_command(dir, command) + if fn.has "win32" == 1 then + return string.format("pushd %s & %s & popd", dir, command) + else + return string.format("cd %s;\n %s", dir, command) + end +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua new file mode 100644 index 000000000..5b7023c57 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/ts_utils.lua @@ -0,0 +1,392 @@ +local api = vim.api + +local parsers = require "nvim-treesitter.parsers" +local utils = require "nvim-treesitter.utils" + +local M = {} + +--- Gets the actual text content of a node +-- @param node the node to get the text from +-- @param bufnr the buffer containing the node +-- @return list of lines of text of the node +function M.get_node_text(node, bufnr) + local bufnr = bufnr or api.nvim_get_current_buf() + if not node then + return {} + end + + -- We have to remember that end_col is end-exclusive + local start_row, start_col, end_row, end_col = M.get_node_range(node) + + if start_row ~= end_row then + local lines = api.nvim_buf_get_lines(bufnr, start_row, end_row + 1, false) + lines[1] = string.sub(lines[1], start_col + 1) + -- end_row might be just after the last line. In this case the last line is not truncated. + if #lines == end_row - start_row + 1 then + lines[#lines] = string.sub(lines[#lines], 1, end_col) + end + return lines + else + local line = api.nvim_buf_get_lines(bufnr, start_row, start_row + 1, false)[1] + -- If line is nil then the line is empty + return line and { string.sub(line, start_col + 1, end_col) } or {} + end +end + +--- Determines whether a node is the parent of another +-- @param dest the possible parent +-- @param source the possible child node +function M.is_parent(dest, source) + if not (dest and source) then + return false + end + + local current = source + while current ~= nil do + if current == dest then + return true + end + + current = current:parent() + end + + return false +end + +--- Get next node with same parent +-- @param node node +-- @param allow_switch_parents allow switching parents if last node +-- @param allow_next_parent allow next parent if last node and next parent without children +function M.get_next_node(node, allow_switch_parents, allow_next_parent) + local destination_node + local parent = node:parent() + + if not parent then + return + end + local found_pos = 0 + for i = 0, parent:named_child_count() - 1, 1 do + if parent:named_child(i) == node then + found_pos = i + break + end + end + if parent:named_child_count() > found_pos + 1 then + destination_node = parent:named_child(found_pos + 1) + elseif allow_switch_parents then + local next_node = M.get_next_node(node:parent()) + if next_node and next_node:named_child_count() > 0 then + destination_node = next_node:named_child(0) + elseif next_node and allow_next_parent then + destination_node = next_node + end + end + + return destination_node +end + +--- Get previous node with same parent +-- @param node node +-- @param allow_switch_parents allow switching parents if first node +-- @param allow_previous_parent allow previous parent if first node and previous parent without children +function M.get_previous_node(node, allow_switch_parents, allow_previous_parent) + local destination_node + local parent = node:parent() + if not parent then + return + end + + local found_pos = 0 + for i = 0, parent:named_child_count() - 1, 1 do + if parent:named_child(i) == node then + found_pos = i + break + end + end + if 0 < found_pos then + destination_node = parent:named_child(found_pos - 1) + elseif allow_switch_parents then + local previous_node = M.get_previous_node(node:parent()) + if previous_node and previous_node:named_child_count() > 0 then + destination_node = previous_node:named_child(previous_node:named_child_count() - 1) + elseif previous_node and allow_previous_parent then + destination_node = previous_node + end + end + return destination_node +end + +function M.get_named_children(node) + local nodes = {} + for i = 0, node:named_child_count() - 1, 1 do + nodes[i + 1] = node:named_child(i) + end + return nodes +end + +function M.get_node_at_cursor(winnr) + winnr = winnr or 0 + local cursor = api.nvim_win_get_cursor(winnr) + local cursor_range = { cursor[1] - 1, cursor[2] } + + local buf = vim.api.nvim_win_get_buf(winnr) + local root_lang_tree = parsers.get_parser(buf) + if not root_lang_tree then + return + end + local root = M.get_root_for_position(cursor_range[1], cursor_range[2], root_lang_tree) + + if not root then + return + end + + return root:named_descendant_for_range(cursor_range[1], cursor_range[2], cursor_range[1], cursor_range[2]) +end + +function M.get_root_for_position(line, col, root_lang_tree) + if not root_lang_tree then + if not parsers.has_parser() then + return + end + + root_lang_tree = parsers.get_parser() + end + + local lang_tree = root_lang_tree:language_for_range { line, col, line, col } + + for _, tree in ipairs(lang_tree:trees()) do + local root = tree:root() + + if root and M.is_in_node_range(root, line, col) then + return root, tree, lang_tree + end + end + + -- This isn't a likely scenario, since the position must belong to a tree somewhere. + return nil, nil, lang_tree +end + +function M.get_root_for_node(node) + local parent = node + local result = node + + while parent ~= nil do + result = parent + parent = result:parent() + end + + return result +end + +function M.highlight_node(node, buf, hl_namespace, hl_group) + if not node then + return + end + M.highlight_range({ node:range() }, buf, hl_namespace, hl_group) +end + +--- Get a compatible vim range (1 index based) from a TS node range. +-- +-- TS nodes start with 0 and the end col is ending exclusive. +-- They also treat a EOF/EOL char as a char ending in the first +-- col of the next row. +function M.get_vim_range(range, buf) + local srow, scol, erow, ecol = unpack(range) + srow = srow + 1 + scol = scol + 1 + erow = erow + 1 + + if ecol == 0 then + -- Use the value of the last col of the previous row instead. + erow = erow - 1 + if not buf or buf == 0 then + ecol = vim.fn.col { erow, "$" } - 1 + else + ecol = #api.nvim_buf_get_lines(buf, erow - 1, erow, false)[1] + end + end + return srow, scol, erow, ecol +end + +function M.highlight_range(range, buf, hl_namespace, hl_group) + local start_row, start_col, end_row, end_col = unpack(range) + vim.highlight.range(buf, hl_namespace, hl_group, { start_row, start_col }, { end_row, end_col }) +end + +-- Set visual selection to node +-- @param selection_mode One of "charwise" (default) or "v", "linewise" or "V", +-- "blockwise" or "" (as a string with 5 characters or a single character) +function M.update_selection(buf, node, selection_mode) + selection_mode = selection_mode or "charwise" + local start_row, start_col, end_row, end_col = M.get_vim_range({ M.get_node_range(node) }, buf) + + vim.fn.setpos(".", { buf, start_row, start_col, 0 }) + + -- Start visual selection in appropriate mode + local v_table = { charwise = "v", linewise = "V", blockwise = "" } + ---- Call to `nvim_replace_termcodes()` is needed for sending appropriate + ---- command to enter blockwise mode + local mode_string = vim.api.nvim_replace_termcodes(v_table[selection_mode] or selection_mode, true, true, true) + vim.cmd("normal! " .. mode_string) + vim.fn.setpos(".", { buf, end_row, end_col, 0 }) +end + +-- Byte length of node range +function M.node_length(node) + local _, _, start_byte = node:start() + local _, _, end_byte = node:end_() + return end_byte - start_byte +end + +--- Determines whether (line, col) position is in node range +-- @param node Node defining the range +-- @param line A line (0-based) +-- @param col A column (0-based) +function M.is_in_node_range(node, line, col) + local start_line, start_col, end_line, end_col = node:range() + if line >= start_line and line <= end_line then + if line == start_line and line == end_line then + return col >= start_col and col < end_col + elseif line == start_line then + return col >= start_col + elseif line == end_line then + return col < end_col + else + return true + end + else + return false + end +end + +function M.get_node_range(node_or_range) + if type(node_or_range) == "table" then + return unpack(node_or_range) + else + return node_or_range:range() + end +end + +function M.node_to_lsp_range(node) + local start_line, start_col, end_line, end_col = M.get_node_range(node) + local rtn = {} + rtn.start = { line = start_line, character = start_col } + rtn["end"] = { line = end_line, character = end_col } + return rtn +end + +--- Memoizes a function based on the buffer tick of the provided bufnr. +-- The cache entry is cleared when the buffer is detached to avoid memory leaks. +-- @param fn: the fn to memoize, taking the bufnr as first argument +-- @param options: +-- - bufnr: extracts a bufnr from the given arguments. +-- - key: extracts the cache key from the given arguments. +-- @returns a memoized function +function M.memoize_by_buf_tick(fn, options) + options = options or {} + + local cache = {} + local bufnr_fn = utils.to_func(options.bufnr or utils.identity) + local key_fn = utils.to_func(options.key or utils.identity) + + return function(...) + local bufnr = bufnr_fn(...) + local key = key_fn(...) + local tick = api.nvim_buf_get_changedtick(bufnr) + + if cache[key] then + if cache[key].last_tick == tick then + return cache[key].result + end + else + local function detach_handler() + cache[key] = nil + end + + -- Clean up logic only! + api.nvim_buf_attach(bufnr, false, { + on_detach = detach_handler, + on_reload = detach_handler, + }) + end + + cache[key] = { + result = fn(...), + last_tick = tick, + } + + return cache[key].result + end +end + +function M.swap_nodes(node_or_range1, node_or_range2, bufnr, cursor_to_second) + if not node_or_range1 or not node_or_range2 then + return + end + local range1 = M.node_to_lsp_range(node_or_range1) + local range2 = M.node_to_lsp_range(node_or_range2) + + local text1 = M.get_node_text(node_or_range1) + local text2 = M.get_node_text(node_or_range2) + + local edit1 = { range = range1, newText = table.concat(text2, "\n") } + local edit2 = { range = range2, newText = table.concat(text1, "\n") } + vim.lsp.util.apply_text_edits({ edit1, edit2 }, bufnr, "utf-8") + + if cursor_to_second then + utils.set_jump() + + local char_delta = 0 + local line_delta = 0 + if + range1["end"].line < range2.start.line + or (range1["end"].line == range2.start.line and range1["end"].character < range2.start.character) + then + line_delta = #text2 - #text1 + end + + if range1["end"].line == range2.start.line and range1["end"].character < range2.start.character then + if line_delta ~= 0 then + --- why? + --correction_after_line_change = -range2.start.character + --text_now_before_range2 = #(text2[#text2]) + --space_between_ranges = range2.start.character - range1["end"].character + --char_delta = correction_after_line_change + text_now_before_range2 + space_between_ranges + --- Equivalent to: + char_delta = #text2[#text2] - range1["end"].character + + -- add range1.start.character if last line of range1 (now text2) does not start at 0 + if range1.start.line == range2.start.line + line_delta then + char_delta = char_delta + range1.start.character + end + else + char_delta = #text2[#text2] - #text1[#text1] + end + end + + api.nvim_win_set_cursor( + api.nvim_get_current_win(), + { range2.start.line + 1 + line_delta, range2.start.character + char_delta } + ) + end +end + +function M.goto_node(node, goto_end, avoid_set_jump) + if not node then + return + end + if not avoid_set_jump then + utils.set_jump() + end + local range = { M.get_vim_range { node:range() } } + local position + if not goto_end then + position = { range[1], range[2] } + else + position = { range[3], range[4] } + end + -- Position is 1, 0 indexed. + api.nvim_win_set_cursor(0, { position[1], position[2] - 1 }) +end + +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/tsrange.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/tsrange.lua new file mode 100644 index 000000000..d41585c60 --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/tsrange.lua @@ -0,0 +1,154 @@ +local M = {} +local TSRange = {} +TSRange.__index = TSRange + +local api = vim.api +local ts_utils = require "nvim-treesitter.ts_utils" +local parsers = require "nvim-treesitter.parsers" + +local function get_byte_offset(buf, row, col) + return api.nvim_buf_get_offset(buf, row) + vim.fn.byteidx(api.nvim_buf_get_lines(buf, row, row + 1, false)[1], col) +end + +function TSRange.new(buf, start_row, start_col, end_row, end_col) + return setmetatable({ + start_pos = { start_row, start_col, get_byte_offset(buf, start_row, start_col) }, + end_pos = { end_row, end_col, get_byte_offset(buf, end_row, end_col) }, + buf = buf, + [1] = start_row, + [2] = start_col, + [3] = end_row, + [4] = end_col, + }, TSRange) +end + +function TSRange.from_nodes(buf, start_node, end_node) + TSRange.__index = TSRange + local start_pos = start_node and { start_node:start() } or { end_node:start() } + local end_pos = end_node and { end_node:end_() } or { start_node:end_() } + return setmetatable({ + start_pos = { start_pos[1], start_pos[2], start_pos[3] }, + end_pos = { end_pos[1], end_pos[2], end_pos[3] }, + buf = buf, + [1] = start_pos[1], + [2] = start_pos[2], + [3] = end_pos[1], + [4] = end_pos[2], + }, TSRange) +end + +function TSRange.from_table(buf, range) + return setmetatable({ + start_pos = { range[1], range[2], get_byte_offset(buf, range[1], range[2]) }, + end_pos = { range[3], range[4], get_byte_offset(buf, range[3], range[4]) }, + buf = buf, + [1] = range[1], + [2] = range[2], + [3] = range[3], + [4] = range[4], + }, TSRange) +end + +function TSRange:parent() + local root_lang_tree = parsers.get_parser(self.buf) + local root = ts_utils.get_root_for_position(self[1], self[2], root_lang_tree) + + return root + and root:named_descendant_for_range(self.start_pos[1], self.start_pos[2], self.end_pos[1], self.end_pos[2]) + or nil +end + +function TSRange:field() end + +function TSRange:child_count() + return #self:collect_children() +end + +function TSRange:named_child_count() + return #self:collect_children(function(c) + return c:named() + end) +end + +function TSRange:iter_children() + local raw_iterator = self:parent().iter_children() + return function() + while true do + local node = raw_iterator() + if not node then + return + end + local _, _, start_byte = node:start() + local _, _, end_byte = node:end_() + if start_byte >= self.start_pos[3] and end_byte <= self.end_pos[3] then + return node + end + end + end +end + +function TSRange:collect_children(filter_fun) + local children = {} + for _, c in self:iter_children() do + if not filter_fun or filter_fun(c) then + table.insert(children, c) + end + end + return children +end + +function TSRange:child(index) + return self:collect_children()[index + 1] +end + +function TSRange:named_child(index) + return self:collect_children(function(c) + return c.named() + end)[index + 1] +end + +function TSRange:start() + return unpack(self.start_pos) +end + +function TSRange:end_() + return unpack(self.end_pos) +end + +function TSRange:range() + return self.start_pos[1], self.start_pos[2], self.end_pos[1], self.end_pos[2] +end + +function TSRange:type() + return "nvim-treesitter-range" +end + +function TSRange:symbol() + return -1 +end + +function TSRange:named() + return false +end + +function TSRange:missing() + return false +end + +function TSRange:has_error() + return #self:collect_children(function(c) + return c:has_error() + end) > 0 and true or false +end + +function TSRange:sexpr() + return table.concat( + vim.tbl_map(function(c) + return c:sexpr() + end, self:collect_children()), + " " + ) +end + +M.TSRange = TSRange +return M diff --git a/bundle/nvim-treesitter/lua/nvim-treesitter/utils.lua b/bundle/nvim-treesitter/lua/nvim-treesitter/utils.lua new file mode 100644 index 000000000..06e0e03fb --- /dev/null +++ b/bundle/nvim-treesitter/lua/nvim-treesitter/utils.lua @@ -0,0 +1,236 @@ +local api = vim.api +local fn = vim.fn +local luv = vim.loop + +local M = {} + +-- Wrapper around vim.notify with common options set. +function M.notify(msg, log_level, opts) + local default_opts = { title = "nvim-treesitter" } + vim.notify(msg, log_level, vim.tbl_extend("force", default_opts, opts or {})) +end + +--- Define user defined vim command which calls nvim-treesitter module function +--- - If module name is 'mod', it should be defined in hierarchy 'nvim-treesitter.mod' +--- - A table with name 'commands' should be defined in 'mod' which needs to be passed as +--- the commands param of this function +--- +---@param mod string, Name of the module that resides in the heirarchy - nvim-treesitter.module +---@param commands table, Command list for the module +--- - {command_name} Name of the vim user defined command, Keys: +--- - {run}: (function) callback function that needs to be executed +--- - {f_args}: (string, default ) +--- - type of arguments that needs to be passed to the vim command +--- - {args}: (string, optional) +--- - vim command attributes +--- +---Example: +--- If module is nvim-treesitter.custom_mod +---
      +---  M.commands = {
      +---      custom_command = {
      +---          run = M.module_function,
      +---          f_args = "",
      +---          args = {
      +---              "-range"
      +---          }
      +---      }
      +---  }
      +---
      +---  utils.setup_commands("custom_mod", require("nvim-treesitter.custom_mod").commands)
      +---  
      +--- +--- Will generate command : +---
      +---  command! -range custom_command \
      +---      lua require'nvim-treesitter.custom_mod'.commands.custom_command['run']()
      +---  
      +function M.setup_commands(mod, commands) + for command_name, def in pairs(commands) do + local f_args = def.f_args or "" + local call_fn = string.format( + "lua require'nvim-treesitter.%s'.commands.%s['run'](%s)", + mod, + command_name, + f_args + ) + local parts = vim.tbl_flatten { + "command!", + def.args, + command_name, + call_fn, + } + api.nvim_command(table.concat(parts, " ")) + end +end + +function M.get_path_sep() + return fn.has "win32" == 1 and "\\" or "/" +end + +-- Returns a function that joins the given arguments with separator. Arguments +-- can't be nil. Example: +--[[ +print(M.generate_join(" ")("foo", "bar")) +--]] +-- prints "foo bar" +function M.generate_join(separator) + return function(...) + return table.concat({ ... }, separator) + end +end + +M.join_path = M.generate_join(M.get_path_sep()) + +local join_space = M.generate_join " " + +function M.get_package_path() + -- Path to this source file, removing the leading '@' + local source = string.sub(debug.getinfo(1, "S").source, 2) + + -- Path to the package root + return fn.fnamemodify(source, ":p:h:h:h") +end + +function M.get_cache_dir() + local cache_dir = fn.stdpath "data" + + if luv.fs_access(cache_dir, "RW") then + return cache_dir + elseif luv.fs_access("/tmp", "RW") then + return "/tmp" + end + + return nil, join_space("Invalid cache rights,", fn.stdpath "data", "or /tmp should be read/write") +end + +-- Returns $XDG_DATA_HOME/nvim/site, but could use any directory that is in +-- runtimepath +function M.get_site_dir() + local path_sep = M.get_path_sep() + return M.join_path(fn.stdpath "data", path_sep, "site") +end + +-- Try the package dir of the nvim-treesitter plugin first, followed by the +-- "site" dir from "runtimepath". "site" dir will be created if it doesn't +-- exist. Using only the package dir won't work when the plugin is installed +-- with Nix, since the "/nix/store" is read-only. +function M.get_parser_install_dir(folder_name) + folder_name = folder_name or "parser" + local package_path = M.get_package_path() + local package_path_parser_dir = M.join_path(package_path, folder_name) + + -- If package_path is read/write, use that + if luv.fs_access(package_path_parser_dir, "RW") then + return package_path_parser_dir + end + + local site_dir = M.get_site_dir() + local path_sep = M.get_path_sep() + local parser_dir = M.join_path(site_dir, path_sep, folder_name) + + -- Try creating and using parser_dir if it doesn't exist + if not luv.fs_stat(parser_dir) then + local ok, error = pcall(vim.fn.mkdir, parser_dir, "p", "0755") + if not ok then + return nil, join_space("Couldn't create parser dir", parser_dir, ":", error) + end + + return parser_dir + end + + -- parser_dir exists, use it if it's read/write + if luv.fs_access(parser_dir, "RW") then + return parser_dir + end + + -- package_path isn't read/write, parser_dir exists but isn't read/write + -- either, give up + return nil, join_space("Invalid cache rights,", package_path, "or", parser_dir, "should be read/write") +end + +function M.get_parser_info_dir() + return M.get_parser_install_dir "parser-info" +end + +-- Gets a property at path +-- @param tbl the table to access +-- @param path the '.' separated path +-- @returns the value at path or nil +function M.get_at_path(tbl, path) + if path == "" then + return tbl + end + local segments = vim.split(path, ".", true) + local result = tbl + + for _, segment in ipairs(segments) do + if type(result) == "table" then + result = result[segment] + end + end + + return result +end + +function M.set_jump() + vim.cmd "normal! m'" +end + +function M.index_of(tbl, obj) + for i, o in ipairs(tbl) do + if o == obj then + return i + end + end +end + +-- Filters a list based on the given predicate +-- @param tbl The list to filter +-- @param predicate The predicate to filter with +function M.filter(tbl, predicate) + local result = {} + + for i, v in ipairs(tbl) do + if predicate(v, i) then + table.insert(result, v) + end + end + + return result +end + +-- Returns a list of all values from the first list +-- that are not present in the second list. +-- @params tbl1 The first table +-- @params tbl2 The second table +function M.difference(tbl1, tbl2) + return M.filter(tbl1, function(v) + return not vim.tbl_contains(tbl2, v) + end) +end + +function M.identity(a) + return a +end + +function M.constant(a) + return function() + return a + end +end + +function M.to_func(a) + return type(a) == "function" and a or M.constant(a) +end + +function M.ts_cli_version() + if fn.executable "tree-sitter" == 1 then + local handle = io.popen "tree-sitter -V" + local result = handle:read "*a" + handle:close() + return vim.split(result, "\n")[1]:match "[^tree%psitter ].*" + end +end + +return M diff --git a/bundle/nvim-treesitter/parser-info/.gitignore b/bundle/nvim-treesitter/parser-info/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/bundle/nvim-treesitter/parser-info/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bundle/nvim-treesitter/parser/.gitignore b/bundle/nvim-treesitter/parser/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/bundle/nvim-treesitter/parser/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bundle/nvim-treesitter/plugin/nvim-treesitter.vim b/bundle/nvim-treesitter/plugin/nvim-treesitter.vim new file mode 100644 index 000000000..c30bcaca5 --- /dev/null +++ b/bundle/nvim-treesitter/plugin/nvim-treesitter.vim @@ -0,0 +1,106 @@ +" Last Change: 2020 Aug 13 + +if exists('g:loaded_nvim_treesitter') + finish +endif + +augroup NvimTreesitter + " on every query file write we want to set an autocommand that will reload the cache + autocmd FileType query + \ autocmd! NvimTreesitter BufWritePost call v:lua.require('nvim-treesitter.query').invalidate_query_file(expand('%:p')) +augroup END + +let g:loaded_nvim_treesitter = 1 + +lua require'nvim-treesitter'.setup() + +function s:has_attr(attr, mode) + let norm_color = synIDattr(hlID('Normal'), a:attr, a:mode) + return strlen(norm_color) > 0 +endfunction + +" if the ctermfg or guifg is not known by nvim then using the +" fg or foreground highlighting value will cause an E419 error +" so we check to see if either highlight has been set if not default to NONE +let cterm_normal = s:has_attr('fg', 'cterm') ? 'fg' : 'NONE' +let gui_normal = s:has_attr('fg', 'gui') ? 'foreground' : 'NONE' + +execute 'highlight default TSNone term=NONE cterm=NONE gui=NONE guifg='.gui_normal.' ctermfg='.cterm_normal + +highlight default link TSPunctDelimiter Delimiter +highlight default link TSPunctBracket Delimiter +highlight default link TSPunctSpecial Delimiter + +highlight default link TSConstant Constant +highlight default link TSConstBuiltin Special +highlight default link TSConstMacro Define +highlight default link TSString String +highlight default link TSStringRegex String +highlight default link TSStringEscape SpecialChar +highlight default link TSStringSpecial SpecialChar +highlight default link TSCharacter Character +highlight default link TSCharacterSpecial SpecialChar +highlight default link TSNumber Number +highlight default link TSBoolean Boolean +highlight default link TSFloat Float + +highlight default link TSFunction Function +highlight default link TSFuncBuiltin Special +highlight default link TSFuncMacro Macro +highlight default link TSParameter Identifier +highlight default link TSParameterReference TSParameter +highlight default link TSMethod Function +highlight default link TSField Identifier +highlight default link TSProperty Identifier +highlight default link TSConstructor Special +highlight default link TSAnnotation PreProc +highlight default link TSAttribute PreProc +highlight default link TSNamespace Include +highlight default link TSSymbol Identifier + +highlight default link TSConditional Conditional +highlight default link TSRepeat Repeat +highlight default link TSLabel Label +highlight default link TSOperator Operator +highlight default link TSKeyword Keyword +highlight default link TSKeywordFunction Keyword +highlight default link TSKeywordOperator TSOperator +highlight default link TSKeywordReturn TSKeyword +highlight default link TSException Exception +highlight default link TSDebug Debug +highlight default link TSDefine Define +highlight default link TSPreProc PreProc +highlight default link TSStorageClass StorageClass + +highlight default link TSTodo Todo + +highlight default link TSType Type +highlight default link TSTypeBuiltin Type +highlight default link TSTypeQualifier Type +highlight default link TSTypeDefinition Typedef + +highlight default link TSInclude Include + +highlight default link TSVariableBuiltin Special + +highlight default link TSText TSNone +highlight default TSStrong term=bold cterm=bold gui=bold +highlight default TSEmphasis term=italic cterm=italic gui=italic +highlight default TSUnderline term=underline cterm=underline gui=underline +highlight default TSStrike term=strikethrough cterm=strikethrough gui=strikethrough +highlight default link TSMath Special +highlight default link TSTextReference Constant +highlight default link TSEnvironment Macro +highlight default link TSEnvironmentName Type +highlight default link TSTitle Title +highlight default link TSLiteral String +highlight default link TSURI Underlined + +highlight default link TSComment Comment +highlight default link TSNote SpecialComment +highlight default link TSWarning Todo +highlight default link TSDanger WarningMsg + +highlight default link TSTag Label +highlight default link TSTagDelimiter Delimiter +highlight default link TSTagAttribute TSProperty diff --git a/bundle/nvim-treesitter/queries/astro/folds.scm b/bundle/nvim-treesitter/queries/astro/folds.scm new file mode 100644 index 000000000..1f2129cf9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/astro/folds.scm @@ -0,0 +1 @@ +; inherits: html diff --git a/bundle/nvim-treesitter/queries/astro/highlights.scm b/bundle/nvim-treesitter/queries/astro/highlights.scm new file mode 100644 index 000000000..62e8ed247 --- /dev/null +++ b/bundle/nvim-treesitter/queries/astro/highlights.scm @@ -0,0 +1,5 @@ +; inherits: html + +[ "---" ] @punctuation.delimiter + +[ "{" "}" ] @punctuation.special diff --git a/bundle/nvim-treesitter/queries/astro/indents.scm b/bundle/nvim-treesitter/queries/astro/indents.scm new file mode 100644 index 000000000..1f2129cf9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/astro/indents.scm @@ -0,0 +1 @@ +; inherits: html diff --git a/bundle/nvim-treesitter/queries/astro/injections.scm b/bundle/nvim-treesitter/queries/astro/injections.scm new file mode 100644 index 000000000..8b68bee23 --- /dev/null +++ b/bundle/nvim-treesitter/queries/astro/injections.scm @@ -0,0 +1,7 @@ +; inherits: html + +((frontmatter + (raw_text) @typescript)) + +((interpolation + (raw_text) @tsx)) diff --git a/bundle/nvim-treesitter/queries/astro/locals.scm b/bundle/nvim-treesitter/queries/astro/locals.scm new file mode 100644 index 000000000..1f2129cf9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/astro/locals.scm @@ -0,0 +1 @@ +; inherits: html diff --git a/bundle/nvim-treesitter/queries/bash/folds.scm b/bundle/nvim-treesitter/queries/bash/folds.scm new file mode 100644 index 000000000..851c67eed --- /dev/null +++ b/bundle/nvim-treesitter/queries/bash/folds.scm @@ -0,0 +1,8 @@ +[ + (function_definition) + (if_statement) + (case_statement) + (for_statement) + (while_statement) + (c_style_for_statement) +] @fold diff --git a/bundle/nvim-treesitter/queries/bash/highlights.scm b/bundle/nvim-treesitter/queries/bash/highlights.scm new file mode 100644 index 000000000..f80986f95 --- /dev/null +++ b/bundle/nvim-treesitter/queries/bash/highlights.scm @@ -0,0 +1,131 @@ +(simple_expansion) @none +(expansion + "${" @punctuation.special + "}" @punctuation.special) @none +[ + "(" + ")" + "((" + "))" + "{" + "}" + "[" + "]" + "[[" + "]]" + ] @punctuation.bracket + +[ + ";" + ";;" + (heredoc_start) + ] @punctuation.delimiter + +[ + "$" +] @punctuation.special + +[ + ">" + ">>" + "<" + "<<" + "&" + "&&" + "|" + "||" + "=" + "=~" + "==" + "!=" + ] @operator + +[ + (string) + (raw_string) + (heredoc_body) +] @string + +(variable_assignment (word) @string) + +[ + "if" + "then" + "else" + "elif" + "fi" + "case" + "in" + "esac" + ] @conditional + +[ + "for" + "do" + "done" + "while" + ] @repeat + +[ + "declare" + "export" + "local" + "readonly" + "unset" + ] @keyword + +"function" @keyword.function + +(special_variable_name) @constant + +((word) @constant.builtin + (#match? @constant.builtin "^SIG(INT|TERM|QUIT|TIN|TOU|STP|HUP)$")) + +((word) @boolean + (#match? @boolean "^(true|false)$")) + +(comment) @comment +(test_operator) @string + +(command_substitution + [ "$(" ")" ] @punctuation.bracket) + +(process_substitution + [ "<(" ")" ] @punctuation.bracket) + + +(function_definition + name: (word) @function) + +(command_name (word) @function) + +((command_name (word) @function.builtin) + (#any-of? @function.builtin + "alias" "cd" "clear" "echo" "eval" "exit" "getopts" "popd" + "pushd" "return" "set" "shift" "shopt" "source" "test")) + +(command + argument: [ + (word) @parameter + (concatenation (word) @parameter) + ]) + +((word) @number + (#lua-match? @number "^[0-9]+$")) + +(file_redirect + descriptor: (file_descriptor) @operator + destination: (word) @parameter) + +(expansion + [ "${" "}" ] @punctuation.bracket) + +(variable_name) @variable + +((variable_name) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) + +(case_item + value: (word) @parameter) + +(regex) @string.regex diff --git a/bundle/nvim-treesitter/queries/bash/injections.scm b/bundle/nvim-treesitter/queries/bash/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/bash/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/bash/locals.scm b/bundle/nvim-treesitter/queries/bash/locals.scm new file mode 100644 index 000000000..a03bc3a56 --- /dev/null +++ b/bundle/nvim-treesitter/queries/bash/locals.scm @@ -0,0 +1,13 @@ +; Scopes +(function_definition) @scope + +; Definitions +(variable_assignment + name: (variable_name) @definition.var) + +(function_definition + name: (word) @definition.function) + +; References +(variable_name) @reference +(word) @reference diff --git a/bundle/nvim-treesitter/queries/beancount/folds.scm b/bundle/nvim-treesitter/queries/beancount/folds.scm new file mode 100644 index 000000000..b65ae0115 --- /dev/null +++ b/bundle/nvim-treesitter/queries/beancount/folds.scm @@ -0,0 +1,4 @@ +[ + (transaction) + (heading) +] @fold diff --git a/bundle/nvim-treesitter/queries/beancount/highlights.scm b/bundle/nvim-treesitter/queries/beancount/highlights.scm new file mode 100644 index 000000000..7fa78d84e --- /dev/null +++ b/bundle/nvim-treesitter/queries/beancount/highlights.scm @@ -0,0 +1,26 @@ + +(date) @field +(txn) @attribute + +(account) @type + +(amount) @number +(incomplete_amount) @number +(amount_tolerance) @number + +(currency) @property + +(key) @label +(string) @string + +(tag) @constant +(link) @constant + +(comment) @comment + +[ + (balance) (open) (close) (commodity) (pad) + (event) (price) (note) (document) (query) + (custom) (pushtag) (poptag) (pushmeta) + (popmeta) (option) (include) (plugin) +] @keyword diff --git a/bundle/nvim-treesitter/queries/bibtex/folds.scm b/bundle/nvim-treesitter/queries/bibtex/folds.scm new file mode 100644 index 000000000..3b24d5fea --- /dev/null +++ b/bundle/nvim-treesitter/queries/bibtex/folds.scm @@ -0,0 +1,3 @@ +[ + (entry) +] @fold diff --git a/bundle/nvim-treesitter/queries/bibtex/highlights.scm b/bundle/nvim-treesitter/queries/bibtex/highlights.scm new file mode 100644 index 000000000..00cae314d --- /dev/null +++ b/bundle/nvim-treesitter/queries/bibtex/highlights.scm @@ -0,0 +1,49 @@ +; CREDITS @pfoerster (adapted from https://github.com/latex-lsp/tree-sitter-bibtex) + +[ + (string_type) + (preamble_type) + (entry_type) +] @keyword + +[ + (junk) + (comment) +] @comment + +[ + "=" + "#" +] @operator + +(command) @function.builtin + +(number) @number + +(field + name: (identifier) @field) + +(token + (identifier) @parameter) + +[ + (brace_word) + (quote_word) +] @string + +[ + (key_brace) + (key_paren) +] @symbol + +(string + name: (identifier) @constant) + +[ + "{" + "}" + "(" + ")" +] @punctuation.bracket + +"," @punctuation.delimiter diff --git a/bundle/nvim-treesitter/queries/bibtex/indents.scm b/bundle/nvim-treesitter/queries/bibtex/indents.scm new file mode 100644 index 000000000..af652160e --- /dev/null +++ b/bundle/nvim-treesitter/queries/bibtex/indents.scm @@ -0,0 +1,10 @@ +[ + (entry) +] @indent + +[ + "{" + "}" +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/c/folds.scm b/bundle/nvim-treesitter/queries/c/folds.scm new file mode 100644 index 000000000..80c3039b6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c/folds.scm @@ -0,0 +1,19 @@ +[ + (for_statement) + (if_statement) + (while_statement) + (switch_statement) + (case_statement) + (function_definition) + (struct_specifier) + (enum_specifier) + (comment) + (preproc_if) + (preproc_elif) + (preproc_else) + (preproc_ifdef) + (initializer_list) +] @fold + + (compound_statement + (compound_statement) @fold) diff --git a/bundle/nvim-treesitter/queries/c/highlights.scm b/bundle/nvim-treesitter/queries/c/highlights.scm new file mode 100644 index 000000000..2ea07a74a --- /dev/null +++ b/bundle/nvim-treesitter/queries/c/highlights.scm @@ -0,0 +1,187 @@ +(identifier) @variable + +[ + "const" + "default" + "enum" + "extern" + "inline" + "static" + "struct" + "typedef" + "union" + "volatile" + "goto" + "register" +] @keyword + +"sizeof" @keyword.operator +"return" @keyword.return + +[ + "while" + "for" + "do" + "continue" + "break" +] @repeat + +[ + "if" + "else" + "case" + "switch" +] @conditional + +"#define" @constant.macro +[ + "#if" + "#ifdef" + "#ifndef" + "#else" + "#elif" + "#endif" + (preproc_directive) +] @keyword + +"#include" @include + +[ + "=" + + "-" + "*" + "/" + "+" + "%" + + "~" + "|" + "&" + "^" + "<<" + ">>" + + "->" + + "<" + "<=" + ">=" + ">" + "==" + "!=" + + "!" + "&&" + "||" + + "-=" + "+=" + "*=" + "/=" + "%=" + "|=" + "&=" + "^=" + ">>=" + "<<=" + "--" + "++" +] @operator + +[ + (true) + (false) +] @boolean + +[ "." ";" ":" "," ] @punctuation.delimiter + +"..." @punctuation.special + +(conditional_expression [ "?" ":" ] @conditional) + + +[ "(" ")" "[" "]" "{" "}"] @punctuation.bracket + +(string_literal) @string +(system_lib_string) @string +(escape_sequence) @string.escape + +(null) @constant.builtin +(number_literal) @number +(char_literal) @character + +[ + (preproc_arg) + (preproc_defined) +] @function.macro + +(((field_expression + (field_identifier) @property)) @_parent + (#not-has-parent? @_parent template_method function_declarator call_expression)) + +(((field_identifier) @property) + (#has-ancestor? @property field_declaration) + (#not-has-ancestor? @property function_declarator)) + +(statement_identifier) @label + +[ + (type_identifier) + (primitive_type) + (sized_type_specifier) + (type_descriptor) +] @type + +(sizeof_expression value: (parenthesized_expression (identifier) @type)) + +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z0-9_]+$")) +(enumerator + name: (identifier) @constant) +(case_statement + value: (identifier) @constant) + +;; Preproc def / undef +(preproc_def + name: (_) @constant) +(preproc_call + directive: (preproc_directive) @_u + argument: (_) @constant + (#eq? @_u "#undef")) + +(call_expression + function: (identifier) @function) +(call_expression + function: (field_expression + field: (field_identifier) @function)) +(function_declarator + declarator: (identifier) @function) +(preproc_function_def + name: (identifier) @function.macro) + +(comment) @comment + +;; Parameters +(parameter_declaration + declarator: (identifier) @parameter) + +(parameter_declaration + declarator: (pointer_declarator) @parameter) + +(preproc_params (identifier) @parameter) + +[ + "__attribute__" + "__cdecl" + "__clrcall" + "__stdcall" + "__fastcall" + "__thiscall" + "__vectorcall" + "_unaligned" + "__unaligned" + "__declspec" +] @attribute + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/c/indents.scm b/bundle/nvim-treesitter/queries/c/indents.scm new file mode 100644 index 000000000..1931471b9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c/indents.scm @@ -0,0 +1,49 @@ +[ + (compound_statement) + (preproc_arg) + (field_declaration_list) + (case_statement) + (enumerator_list) + (struct_specifier) + (compound_literal_expression) + (initializer_list) + (while_statement) + (for_statement) + (switch_statement) + (expression_statement) +] @indent +(if_statement condition: (_) @indent) +((if_statement + consequence: (_) @_consequence + (#not-has-type? @_consequence compound_statement) + ) @indent) +(init_declarator) @indent + +(compound_statement "}" @indent_end) + +[ + "else" + ")" + "}" + (statement_identifier) +] @branch + +[ + "#define" + "#ifdef" + "#if" + "#else" + "#endif" +] @zero_indent + +[ + (preproc_arg) + (string_literal) +] @ignore + +((ERROR (parameter_declaration)) @aligned_indent + (#set! "delimiter" "()")) +([(argument_list) (parameter_list)] @aligned_indent + (#set! "delimiter" "()")) + +(comment) @auto diff --git a/bundle/nvim-treesitter/queries/c/injections.scm b/bundle/nvim-treesitter/queries/c/injections.scm new file mode 100644 index 000000000..afeb068a2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c/injections.scm @@ -0,0 +1,3 @@ +(preproc_arg) @c + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/c/locals.scm b/bundle/nvim-treesitter/queries/c/locals.scm new file mode 100644 index 000000000..78a2180d3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c/locals.scm @@ -0,0 +1,53 @@ +;; Functions definitions +(function_declarator + declarator: (identifier) @definition.function) +(preproc_function_def + name: (identifier) @definition.macro) @scope + +(preproc_def + name: (identifier) @definition.macro) +(pointer_declarator + declarator: (identifier) @definition.var) +(parameter_declaration + declarator: (identifier) @definition.parameter) +(init_declarator + declarator: (identifier) @definition.var) +(array_declarator + declarator: (identifier) @definition.var) +(declaration + declarator: (identifier) @definition.var) +(enum_specifier + name: (_) @definition.type + (enumerator_list + (enumerator name: (identifier) @definition.var))) + +;; Type / Struct / Enum +(field_declaration + declarator: (field_identifier) @definition.field) +(type_definition + declarator: (type_identifier) @definition.type) +(struct_specifier + name: (type_identifier) @definition.type) + +;; goto +(labeled_statement (statement_identifier) @definition) + +;; References +(identifier) @reference +((field_identifier) @reference + (set! reference.kind "field")) +((type_identifier) @reference + (set! reference.kind "type")) + +(goto_statement (statement_identifier) @reference) + +;; Scope +[ + (for_statement) + (if_statement) + (while_statement) + (translation_unit) + (function_definition) + (compound_statement) ; a block in curly braces + (struct_specifier) +] @scope diff --git a/bundle/nvim-treesitter/queries/c_sharp/folds.scm b/bundle/nvim-treesitter/queries/c_sharp/folds.scm new file mode 100644 index 000000000..4b5d94270 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c_sharp/folds.scm @@ -0,0 +1,15 @@ +body: [ + (declaration_list) + (switch_body) + (enum_member_declaration_list) +] @fold + +accessors: [ + (accessor_list) +] @fold + +initializer: [ + (initializer_expression) +] @fold + +(block) @fold diff --git a/bundle/nvim-treesitter/queries/c_sharp/highlights.scm b/bundle/nvim-treesitter/queries/c_sharp/highlights.scm new file mode 100644 index 000000000..fc3600e0e --- /dev/null +++ b/bundle/nvim-treesitter/queries/c_sharp/highlights.scm @@ -0,0 +1,390 @@ +(identifier) @variable + +((identifier) @keyword + (#eq? @keyword "value") + (#has-ancestor? @keyword accessor_declaration)) + +(method_declaration + name: (identifier) @method) + +(local_function_statement + name: (identifier) @method) + +(method_declaration + type: (identifier) @type) + +(local_function_statement + type: (identifier) @type) + +(interpolation) @none + +(invocation_expression + (member_access_expression + name: (identifier) @method)) + +(invocation_expression + function: (conditional_access_expression + (member_binding_expression + name: (identifier) @method))) + +(namespace_declaration + name: [(qualified_name) (identifier)] @namespace) + +(qualified_name + (identifier) @type) + +(invocation_expression + (identifier) @method) + +(field_declaration + (variable_declaration + (variable_declarator + (identifier) @field))) + +(initializer_expression + (assignment_expression + left: (identifier) @field)) + +(parameter_list + (parameter + name: (identifier) @parameter)) + +(parameter_list + (parameter + type: (identifier) @type)) + +(integer_literal) @number +(real_literal) @float + +(null_literal) @constant.builtin +(character_literal) @character + +[ + (string_literal) + (verbatim_string_literal) + (interpolated_string_expression) +] @string + +(boolean_literal) @boolean + +[ + (predefined_type) + (void_keyword) +] @type.builtin + +(implicit_type) @keyword + +(comment) @comment + +(using_directive + (identifier) @type) + +(property_declaration + name: (identifier) @property) + +(property_declaration + type: (identifier) @type) + +(nullable_type + (identifier) @type) + +(catch_declaration + type: (identifier) @type) + +(interface_declaration + name: (identifier) @type) +(class_declaration + name: (identifier) @type) +(record_declaration + name: (identifier) @type) +(enum_declaration + name: (identifier) @type) +(constructor_declaration + name: (identifier) @constructor) +(constructor_initializer [ + "base" @constructor +]) + +(variable_declaration + (identifier) @type) +(object_creation_expression + (identifier) @type) + +; Generic Types. +(type_of_expression + (generic_name + (identifier) @type)) + +(type_argument_list + (generic_name + (identifier) @type)) + +(base_list + (generic_name + (identifier) @type)) + +(type_constraint + (generic_name + (identifier) @type)) + +(object_creation_expression + (generic_name + (identifier) @type)) + +(property_declaration + (generic_name + (identifier) @type)) + +(_ + type: (generic_name + (identifier) @type)) +; Generic Method invocation with generic type +(invocation_expression + function: (generic_name + . (identifier) @method)) + +(invocation_expression + (member_access_expression + (generic_name + (identifier) @method))) + +(base_list + (identifier) @type) + +(type_argument_list + (identifier) @type) + +(type_parameter_list + (type_parameter) @type) + +(type_parameter_constraints_clause + target: (identifier) @type) + +(attribute + name: (identifier) @attribute) + +(for_each_statement + type: (identifier) @type) + +(tuple_element + type: (identifier) @type) + +(tuple_expression + (argument + (declaration_expression + type: (identifier) @type))) + +(as_expression + right: (identifier) @type) + +(type_of_expression + (identifier) @type) + +(name_colon + (identifier) @parameter) + +(warning_directive) @text.warning +(error_directive) @exception + +(define_directive + (identifier) @constant) @constant.macro +(undef_directive + (identifier) @constant) @constant.macro + +(line_directive) @constant.macro +(line_directive + (preproc_integer_literal) @constant + (preproc_string_literal)? @string) + +(pragma_directive + (identifier) @constant) @constant.macro +(pragma_directive + (preproc_string_literal) @string) @constant.macro + +[ + (nullable_directive) + (region_directive) + (endregion_directive) +] @constant.macro + +[ + "if" + "else" + "switch" + "break" + "case" + (if_directive) + (elif_directive) + (else_directive) + (endif_directive) +] @conditional + +(if_directive + (identifier) @constant) +(elif_directive + (identifier) @constant) + +[ + "while" + "for" + "do" + "continue" + "goto" + "foreach" +] @repeat + +[ + "try" + "catch" + "throw" + "finally" +] @exception + +[ + "+" + "?" + ":" + "++" + "-" + "--" + "&" + "&&" + "|" + "||" + "!" + "!=" + "==" + "*" + "/" + "%" + "<" + "<=" + ">" + ">=" + "=" + "-=" + "+=" + "*=" + "/=" + "%=" + "^" + "^=" + "&=" + "|=" + "~" + ">>" + "<<" + "<<=" + ">>=" + "=>" +] @operator + +[ + ";" + "." + "," + ":" +] @punctuation.delimiter + +[ + "[" + "]" + "{" + "}" + "(" + ")" + "<" + ">" +] @punctuation.bracket + +[ + (this_expression) + (base_expression) +] @variable.builtin + +[ + "using" +] @include + +(alias_qualified_name + (identifier "global") @include) + +[ + "with" + "new" + "typeof" + "nameof" + "sizeof" + "is" + "as" + "and" + "or" + "not" + "stackalloc" + "in" + "out" + "ref" +] @keyword.operator + +[ + "lock" + "params" + "operator" + "default" + "abstract" + "const" + "extern" + "implicit" + "explicit" + "internal" + "override" + "private" + "protected" + "public" + "internal" + "partial" + "readonly" + "sealed" + "static" + "virtual" + "volatile" + "async" + "await" + "class" + "delegate" + "enum" + "interface" + "namespace" + "struct" + "get" + "set" + "init" + "where" + "record" + "event" + "add" + "remove" + "checked" + "unchecked" + "fixed" +] @keyword + +(parameter_modifier) @operator + +(query_expression + (_ [ + "from" + "orderby" + "select" + "group" + "by" + "ascending" + "descending" + "equals" + "let" + ] @keyword)) + +[ + "return" + "yield" +] @keyword.return diff --git a/bundle/nvim-treesitter/queries/c_sharp/injections.scm b/bundle/nvim-treesitter/queries/c_sharp/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/c_sharp/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/c_sharp/locals.scm b/bundle/nvim-treesitter/queries/c_sharp/locals.scm new file mode 100644 index 000000000..c53eb1a19 --- /dev/null +++ b/bundle/nvim-treesitter/queries/c_sharp/locals.scm @@ -0,0 +1,41 @@ +;; Definitions +(variable_declarator + . (identifier) @definition.var) + +(variable_declarator + (tuple_pattern + (identifier) @definition.var)) + +(declaration_expression + name: (identifier) @definition.var) + +(for_each_statement + left: (identifier) @definition.var) + +(for_each_statement + left: (tuple_pattern + (identifier) @definition.var)) + +(parameter + (identifier) @definition.parameter) + +(method_declaration + name: (identifier) @definition.method) + +(local_function_statement + name: (identifier) @definition.method) + +(property_declaration + name: (identifier) @definition) + +(type_parameter + (identifier) @definition.type) + +(class_declaration + name: (identifier) @definition) + +;; References +(identifier) @reference + +;; Scope +(block) @scope diff --git a/bundle/nvim-treesitter/queries/clojure/folds.scm b/bundle/nvim-treesitter/queries/clojure/folds.scm new file mode 100644 index 000000000..d54daade6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/clojure/folds.scm @@ -0,0 +1 @@ +(source (list_lit) @fold) diff --git a/bundle/nvim-treesitter/queries/clojure/highlights.scm b/bundle/nvim-treesitter/queries/clojure/highlights.scm new file mode 100644 index 000000000..d6371c522 --- /dev/null +++ b/bundle/nvim-treesitter/queries/clojure/highlights.scm @@ -0,0 +1,338 @@ +;; >> Explanation +;; Parsers for lisps are a bit weird in that they just return the raw forms. +;; This means we have to do a bit of extra work in the queries to get things +;; highlighted as they should be. +;; +;; For the most part this means that some things have to be assigned multiple +;; groups. +;; By doing this we can add a basic capture and then later refine it with more +;; specialied captures. +;; This can mean that sometimes things are highlighted weirdly because they +;; have multiple highlight groups applied to them. + + +;; >> Literals + +( + (dis_expr) @comment + (#set! "priority" 105) ; Higher priority to mark the whole sexpr as a comment +) +(kwd_lit) @symbol +(str_lit) @string +(num_lit) @number +(char_lit) @character +(bool_lit) @boolean +(nil_lit) @constant.builtin +(comment) @comment +(regex_lit) @string.regex + +["'" "`"] @string.escape + +["~" "~@" "#"] @punctuation.special + +["{" "}" "[" "]" "(" ")"] @punctuation.bracket + + + +;; >> Symbols + +; General symbol highlighting +(sym_lit) @variable + +; General function calls +(list_lit + . + (sym_lit) @function) +(anon_fn_lit + . + (sym_lit) @function) + +; Quoted symbols +(quoting_lit + (sym_lit) @symbol) +(syn_quoting_lit + (sym_lit) @symbol) + +; Used in destructure pattern +((sym_lit) @parameter + (#lua-match? @parameter "^[&]")) + +; Inline function variables +((sym_lit) @variable.builtin + (#match? @variable.builtin "^[%]")) + +; Constructor +((sym_lit) @constructor + (#match? @constructor "^-\\>[^\\>].*")) + +; Dynamic variables +((sym_lit) @variable.builtin + (#match? @variable.builtin "^[*].+[*]$")) + +; Gensym +;; Might not be needed +((sym_lit) @variable + (#match? @variable "^.*#$")) + +; Types +;; TODO: improve? +((sym_lit) @type + (#match? @type "^[A-Z][^/]*$")) +;; Symbols with `.` but not `/` +((sym_lit) @type + (#match? @type "^[^/]+[.][^/]*$")) + +; Interop +((sym_lit) @method + (#match? @method "^\\.[^-]")) +((sym_lit) @field + (#match? @field "^\\.-")) +((sym_lit) @field + (#match? @field "^[A-Z].*/.+")) +(list_lit + . + (sym_lit) @method + (#match? @method "^[A-Z].*/.+")) +;; TODO: Special casing for the `.` macro + +; Operators +((sym_lit) @operator + (#any-of? @operator + "*" "*'" "+" "+'" "-" "-'" "/" + "<" "<=" ">" ">=" "=" "==")) +((sym_lit) @keyword.operator + (#any-of? @keyword.operator + "not" "not=" "and" "or")) + +; Definition functions +((sym_lit) @keyword + (#lua-match? @keyword "^def.*$")) +((sym_lit) @keyword + (#eq? @keyword "declare")) +((sym_lit) @keyword.function + (#match? @keyword.function "^(defn|defn-|fn|fn[*])$")) + +; Comment +((sym_lit) @comment + (#any-of? @comment "comment")) + +; Conditionals +((sym_lit) @conditional + (#any-of? @conditional + "case" "cond" "cond->" "cond->>" "condp")) +((sym_lit) @conditional + (#match? @conditional "^if(\\-.*)?$")) +((sym_lit) @conditional + (#match? @conditional "^when(\\-.*)?$")) + +; Repeats +((sym_lit) @repeat + (#any-of? @repeat + "doseq" "dotimes" "for" "loop" "recur" "while")) + +; Exception +((sym_lit) @exception + (#any-of? @exception + "throw" "try" "catch" "finally" "ex-info")) + +; Includes +((sym_lit) @include + (#any-of? @include "ns" "import" "require" "use")) + +; Builtin macros +;; TODO: Do all these items belong here? +((sym_lit) @function.macro + (#any-of? @function.macro + "." ".." "->" "->>" "amap" "areduce" "as->" "assert" + "binding" "bound-fn" "delay" "do" "dosync" + "doto" "extend-protocol" "extend-type" "future" + "gen-class" "gen-interface" "io!" "lazy-cat" + "lazy-seq" "let" "letfn" "locking" "memfn" "monitor-enter" + "monitor-exit" "proxy" "proxy-super" "pvalues" + "refer-clojure" "reify" "set!" "some->" "some->>" "sync" + "time" "unquote" "unquote-splicing" "var" "vswap!" + "ex-cause" "ex-data" "ex-message")) +((sym_lit) @function.macro + (#match? @function.macro "^with\\-.*$")) + +; All builtin functions +; (->> (ns-publics *ns*) +; (keep (fn [[s v]] (when-not (:macro (meta v)) s))) +; sort +; cp/print)) +;; ...and then lots of manual filtering... +((sym_lit) @function.builtin + (#any-of? @function.builtin + "->ArrayChunk" "->Eduction" "->Vec" "->VecNode" "->VecSeq" + "-cache-protocol-fn" "-reset-methods" "PrintWriter-on" + "StackTraceElement->vec" "Throwable->map" "accessor" + "aclone" "add-classpath" "add-tap" "add-watch" "agent" + "agent-error" "agent-errors" "aget" "alength" "alias" + "all-ns" "alter" "alter-meta!" "alter-var-root" "ancestors" + "any?" "apply" "array-map" "aset" "aset-boolean" "aset-byte" + "aset-char" "aset-double" "aset-float" "aset-int" + "aset-long" "aset-short" "assoc" "assoc!" "assoc-in" + "associative?" "atom" "await" "await-for" "await1" + "bases" "bean" "bigdec" "bigint" "biginteger" "bit-and" + "bit-and-not" "bit-clear" "bit-flip" "bit-not" "bit-or" + "bit-set" "bit-shift-left" "bit-shift-right" "bit-test" + "bit-xor" "boolean" "boolean-array" "boolean?" + "booleans" "bound-fn*" "bound?" "bounded-count" + "butlast" "byte" "byte-array" "bytes" "bytes?" + "cast" "cat" "char" "char-array" "char-escape-string" + "char-name-string" "char?" "chars" "chunk" "chunk-append" + "chunk-buffer" "chunk-cons" "chunk-first" "chunk-next" + "chunk-rest" "chunked-seq?" "class" "class?" + "clear-agent-errors" "clojure-version" "coll?" + "commute" "comp" "comparator" "compare" "compare-and-set!" + "compile" "complement" "completing" "concat" "conj" + "conj!" "cons" "constantly" "construct-proxy" "contains?" + "count" "counted?" "create-ns" "create-struct" "cycle" + "dec" "dec'" "decimal?" "dedupe" "default-data-readers" + "delay?" "deliver" "denominator" "deref" "derive" + "descendants" "destructure" "disj" "disj!" "dissoc" + "dissoc!" "distinct" "distinct?" "doall" "dorun" "double" + "double-array" "eduction" "empty" "empty?" "ensure" "ensure-reduced" + "enumeration-seq" "error-handler" "error-mode" "eval" + "even?" "every-pred" "every?" "extend" "extenders" "extends?" + "false?" "ffirst" "file-seq" "filter" "filterv" "find" + "find-keyword" "find-ns" "find-protocol-impl" + "find-protocol-method" "find-var" "first" "flatten" + "float" "float-array" "float?" "floats" "flush" "fn?" + "fnext" "fnil" "force" "format" "frequencies" + "future-call" "future-cancel" "future-cancelled?" + "future-done?" "future?" "gensym" "get" "get-in" + "get-method" "get-proxy-class" "get-thread-bindings" + "get-validator" "group-by" "halt-when" "hash" + "hash-combine" "hash-map" "hash-ordered-coll" "hash-set" + "hash-unordered-coll" "ident?" "identical?" "identity" + "ifn?" "in-ns" "inc" "inc'" "indexed?" "init-proxy" + "inst-ms" "inst-ms*" "inst?" "instance?" "int" "int-array" + "int?" "integer?" "interleave" "intern" "interpose" "into" + "into-array" "ints" "isa?" "iterate" "iterator-seq" "juxt" + "keep" "keep-indexed" "key" "keys" "keyword" "keyword?" + "last" "line-seq" "list" "list*" "list?" "load" "load-file" + "load-reader" "load-string" "loaded-libs" "long" "long-array" + "longs" "macroexpand" "macroexpand-1" "make-array" "make-hierarchy" + "map" "map-entry?" "map-indexed" "map?" "mapcat" "mapv" + "max" "max-key" "memoize" "merge" "merge-with" "meta" + "method-sig" "methods" "min" "min-key" "mix-collection-hash" + "mod" "munge" "name" "namespace" "namespace-munge" "nat-int?" + "neg-int?" "neg?" "newline" "next" "nfirst" "nil?" "nnext" + "not-any?" "not-empty" "not-every?" "ns-aliases" + "ns-imports" "ns-interns" "ns-map" "ns-name" "ns-publics" + "ns-refers" "ns-resolve" "ns-unalias" "ns-unmap" "nth" + "nthnext" "nthrest" "num" "number?" "numerator" "object-array" + "odd?" "parents" "partial" "partition" "partition-all" + "partition-by" "pcalls" "peek" "persistent!" "pmap" "pop" + "pop!" "pop-thread-bindings" "pos-int?" "pos?" "pr" + "pr-str" "prefer-method" "prefers" "primitives-classnames" + "print" "print-ctor" "print-dup" "print-method" "print-simple" + "print-str" "printf" "println" "println-str" "prn" "prn-str" + "promise" "proxy-call-with-super" "proxy-mappings" "proxy-name" + "push-thread-bindings" "qualified-ident?" "qualified-keyword?" + "qualified-symbol?" "quot" "rand" "rand-int" "rand-nth" "random-sample" + "range" "ratio?" "rational?" "rationalize" "re-find" "re-groups" + "re-matcher" "re-matches" "re-pattern" "re-seq" "read" + "read+string" "read-line" "read-string" "reader-conditional" + "reader-conditional?" "realized?" "record?" "reduce" + "reduce-kv" "reduced" "reduced?" "reductions" "ref" "ref-history-count" + "ref-max-history" "ref-min-history" "ref-set" "refer" + "release-pending-sends" "rem" "remove" "remove-all-methods" + "remove-method" "remove-ns" "remove-tap" "remove-watch" + "repeat" "repeatedly" "replace" "replicate" + "requiring-resolve" "reset!" "reset-meta!" "reset-vals!" + "resolve" "rest" "restart-agent" "resultset-seq" "reverse" + "reversible?" "rseq" "rsubseq" "run!" "satisfies?" + "second" "select-keys" "send" "send-off" "send-via" + "seq" "seq?" "seqable?" "seque" "sequence" "sequential?" + "set" "set-agent-send-executor!" "set-agent-send-off-executor!" + "set-error-handler!" "set-error-mode!" "set-validator!" + "set?" "short" "short-array" "shorts" "shuffle" + "shutdown-agents" "simple-ident?" "simple-keyword?" + "simple-symbol?" "slurp" "some" "some-fn" "some?" + "sort" "sort-by" "sorted-map" "sorted-map-by" + "sorted-set" "sorted-set-by" "sorted?" "special-symbol?" + "spit" "split-at" "split-with" "str" "string?" + "struct" "struct-map" "subs" "subseq" "subvec" "supers" + "swap!" "swap-vals!" "symbol" "symbol?" "tagged-literal" + "tagged-literal?" "take" "take-last" "take-nth" "take-while" + "tap>" "test" "the-ns" "thread-bound?" "to-array" + "to-array-2d" "trampoline" "transduce" "transient" + "tree-seq" "true?" "type" "unchecked-add" "unchecked-add-int" + "unchecked-byte" "unchecked-char" "unchecked-dec" + "unchecked-dec-int" "unchecked-divide-int" "unchecked-double" + "unchecked-float" "unchecked-inc" "unchecked-inc-int" + "unchecked-int" "unchecked-long" "unchecked-multiply" + "unchecked-multiply-int" "unchecked-negate" "unchecked-negate-int" + "unchecked-remainder-int" "unchecked-short" "unchecked-subtract" + "unchecked-subtract-int" "underive" "unquote" + "unquote-splicing" "unreduced" "unsigned-bit-shift-right" + "update" "update-in" "update-proxy" "uri?" "uuid?" + "val" "vals" "var-get" "var-set" "var?" "vary-meta" "vec" + "vector" "vector-of" "vector?" "volatile!" "volatile?" + "vreset!" "with-bindings*" "with-meta" "with-redefs-fn" "xml-seq" + "zero?" "zipmap")) + + + +;; >> Context based highlighting + +; def-likes +; Correctly highlight docstrings +(list_lit + . + (sym_lit) @_keyword ; Don't really want to highlight twice + (#lua-match? @_keyword "^def.*") + . + (sym_lit) + . + ;; TODO: Add @comment highlight + (str_lit)? + . + (_)) + +; Function definitions +(list_lit + . + (sym_lit) @_keyword.function + (#any-of? @_keyword.function "fn" "fn*" "defn" "defn-") + . + (sym_lit)? @function + . + ;; TODO: Add @comment highlight + (str_lit)?) +;; TODO: Fix parameter highlighting +;; I think there's a bug here in nvim-treesitter +;; TODO: Reproduce bug and file ticket + ;. + ;[(vec_lit + ; (sym_lit)* @parameter) + ; (list_lit + ; (vec_lit + ; (sym_lit)* @parameter))]) + +;[((list_lit +; (vec_lit +; (sym_lit) @parameter) +; (_) +; + +; ((vec_lit +; (sym_lit) @parameter) +; (_))) + + +; Meta punctuation +;; NOTE: When the above `Function definitions` query captures the +;; the @function it also captures the child meta_lit +;; We capture the meta_lit symbol (^) after so that the later +;; highlighting overrides the former +"^" @punctuation.special + +;; namespaces +(list_lit + . + (sym_lit) @_include + (#eq? @_include "ns") + . + (sym_lit) @namespace) diff --git a/bundle/nvim-treesitter/queries/clojure/injections.scm b/bundle/nvim-treesitter/queries/clojure/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/clojure/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/clojure/locals.scm b/bundle/nvim-treesitter/queries/clojure/locals.scm new file mode 100644 index 000000000..e47adce45 --- /dev/null +++ b/bundle/nvim-treesitter/queries/clojure/locals.scm @@ -0,0 +1 @@ +; placeholder file to get incremental selection to work diff --git a/bundle/nvim-treesitter/queries/cmake/folds.scm b/bundle/nvim-treesitter/queries/cmake/folds.scm new file mode 100644 index 000000000..ed5cc8d6a --- /dev/null +++ b/bundle/nvim-treesitter/queries/cmake/folds.scm @@ -0,0 +1,7 @@ +[ + (if_condition) + (foreach_loop) + (while_loop) + (function_def) + (macro_def) +] @fold diff --git a/bundle/nvim-treesitter/queries/cmake/highlights.scm b/bundle/nvim-treesitter/queries/cmake/highlights.scm new file mode 100644 index 000000000..18a87c25e --- /dev/null +++ b/bundle/nvim-treesitter/queries/cmake/highlights.scm @@ -0,0 +1,125 @@ +[ + (quoted_argument) + (bracket_argument) +] @string + +(variable_ref) @none +(variable) @variable + +[ + (bracket_comment) + (line_comment) +] @comment + +(normal_command (identifier) @function) + +["ENV" "CACHE"] @symbol +["$" "{" "}" "<" ">"] @punctuation.special +["(" ")"] @punctuation.bracket + +[ + (function) + (endfunction) + (macro) + (endmacro) +] @keyword.function + +[ + (if) + (elseif) + (else) + (endif) +] @conditional + +[ + (foreach) + (endforeach) + (while) + (endwhile) +] @repeat + +(function_command + (function) + . (argument) @function + (argument)* @parameter +) + +(macro_command + (macro) + . (argument) @function.macro + (argument)* @parameter +) + +(normal_command + (identifier) @function.builtin + . (argument) @variable + (#match? @function.builtin "\\c^(set)$") +) + +(normal_command + (identifier) @function.builtin + (#match? @function.builtin "\\c^(set)$") + ( + (argument) @constant + (#any-of? @constant "PARENT_SCOPE") + ) . +) + +(normal_command + (identifier) @function.builtin + (#match? @function.builtin "\\c^(set)$") + . (argument) + ( + (argument) @_cache @constant + . + (argument) @_type @constant + (#any-of? @_cache "CACHE") + (#any-of? @_type "BOOL" "FILEPATH" "PATH" "STRING" "INTERNAL") + ) +) +(normal_command + (identifier) @function.builtin + (#match? @function.builtin "\\c^(set)$") + . (argument) + (argument) @_cache + (#any-of? @_cache "CACHE") + ( + (argument) @_force @constant + (#any-of? @_force "FORCE") + ) . +) + +((argument) @boolean + (#match? @boolean "\\c^(1|on|yes|true|y|0|off|no|false|n|ignore|notfound|.*-notfound)$") +) + +(if_command + (if) + (argument) @keyword.operator + (#any-of? @keyword.operator "NOT" "AND" "OR" + "COMMAND" "POLICY" "TARGET" "TEST" "DEFINED" "IN_LIST" + "EXISTS" "IS_NEWER_THAN" "IS_DIRECTORY" "IS_SYMLINK" "IS_ABSOLUTE" + "MATCHES" + "LESS" "GREATER" "EQUAL" "LESS_EQUAL" "GREATER_EQUAL" + "STRLESS" "STRGREATER" "STREQUAL" "STRLESS_EQUAL" "STRGREATER_EQUAL" + "VERSION_LESS" "VERSION_GREATER" "VERSION_EQUAL" "VERSION_LESS_EQUAL" "VERSION_GREATER_EQUAL" + ) +) + +(normal_command + (identifier) @function.builtin + . (argument) + (argument) @constant + (#any-of? @constant "ALL" "COMMAND" "DEPENDS" "BYPRODUCTS" "WORKING_DIRECTORY" "COMMENT" + "JOB_POOL" "VERBATIM" "USES_TERMINAL" "COMMAND_EXPAND_LISTS" "SOURCES") + (#match? @function.builtin "\\c^(add_custom_target)$") +) + +(normal_command + (identifier) @function.builtin + (argument) @constant + (#any-of? @constant "OUTPUT" "COMMAND" "MAIN_DEPENDENCY" "DEPENDS" "BYPRODUCTS" "IMPLICIT_DEPENDS" "WORKING_DIRECTORY" + "COMMENT" "DEPFILE" "JOB_POOL" "VERBATIM" "APPEND" "USES_TERMINAL" "COMMAND_EXPAND_LISTS") + (#match? @function.builtin "\\c^(add_custom_command)$") +) + diff --git a/bundle/nvim-treesitter/queries/comment/highlights.scm b/bundle/nvim-treesitter/queries/comment/highlights.scm new file mode 100644 index 000000000..6c3e043c8 --- /dev/null +++ b/bundle/nvim-treesitter/queries/comment/highlights.scm @@ -0,0 +1,25 @@ +[ + "(" + ")" +] @punctuation.bracket + +":" @punctuation.delimiter + +(tag (name) @text.note (user)? @constant) + +((tag ((name) @text.warning)) + (#any-of? @text.warning "TODO" "HACK" "WARNING")) + +("text" @text.warning + (#any-of? @text.warning "TODO" "HACK" "WARNING")) + +((tag ((name) @text.danger)) + (#any-of? @text.danger "FIXME" "XXX" "BUG")) + +("text" @text.danger + (#any-of? @text.danger "FIXME" "XXX" "BUG")) + +; Issue number (#123) +("text" @number (#lua-match? @number "^#[0-9]+$")) +; User mention (@user) +("text" @constant (#lua-match? @constant "^[@][a-zA-Z0-9_-]+$")) diff --git a/bundle/nvim-treesitter/queries/commonlisp/folds.scm b/bundle/nvim-treesitter/queries/commonlisp/folds.scm new file mode 100644 index 000000000..d54daade6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/commonlisp/folds.scm @@ -0,0 +1 @@ +(source (list_lit) @fold) diff --git a/bundle/nvim-treesitter/queries/commonlisp/highlights.scm b/bundle/nvim-treesitter/queries/commonlisp/highlights.scm new file mode 100644 index 000000000..5cf7c1eb0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/commonlisp/highlights.scm @@ -0,0 +1,187 @@ +(sym_lit) @variable + +;; A highlighting for functions/macros in th cl namespace is available in theHamsta/nvim-treesitter-commonlisp +;(list_lit . (sym_lit) @function.builtin (#cl-standard-function? @function.builtin)) +;(list_lit . (sym_lit) @function.builtin (#cl-standard-macro? @function.macro)) + +(dis_expr) @comment + +(defun_keyword) @function.macro +(defun_header + function_name: (_) @function) +(defun_header + lambda_list: (list_lit (sym_lit) @parameter)) +(defun_header + keyword: (defun_keyword "defmethod") + lambda_list: (list_lit (list_lit . (sym_lit) . (sym_lit) @symbol))) +(defun_header + lambda_list: (list_lit (list_lit . (sym_lit) @parameter . (_)))) +(defun_header + specifier: (sym_lit) @symbol) + +[":" "::" "."] @punctuation.special + +[ + (accumulation_verb) + (for_clause_word) + "for" + "and" + "finally" + "thereis" + "always" + "when" + "if" + "unless" + "else" + "do" + "loop" + "below" + "in" + "from" + "across" + "repeat" + "being" + "into" + "with" + "as" + "while" + "until" + "return" + "initially" +] @function.macro +"=" @operator + +(include_reader_macro) @symbol +["#C" "#c"] @number + +[(kwd_lit) (self_referential_reader_macro)] @symbol + +(package_lit + package: (_) @namespace) +"cl" @namespace + +(str_lit) @string + +(num_lit) @number + +((sym_lit) @boolean (#match? @boolean "^(t|T)$")) + +(nil_lit) @constant.builtin + +(comment) @comment + +;; dynamic variables +((sym_lit) @variable.builtin + (#match? @variable.builtin "^[*].+[*]$")) + +;; quote +"'" @string.escape +(format_specifier) @string.escape +(quoting_lit) @string.escape + +;; syntax quote +"`" @string.escape +"," @string.escape +",@" @string.escape +(syn_quoting_lit) @string.escape +(unquoting_lit) @none +(unquote_splicing_lit) @none + + +["(" ")"] @punctuation.bracket + +(block_comment) @comment + + +(with_clause + type: (_) @type) +(for_clause + type: (_) @type) + +;; defun-like things +(list_lit + . + (sym_lit) @function.macro + . + (sym_lit) @function + (#eq? @function.macro "deftest")) + +;;; Macros and Special Operators +(list_lit + . + (sym_lit) @function.macro + ;; For a complete and more efficient version install theHamsta/nvim-treesitter-commonlisp + (#any-of? @function.macro + "let" + "function" + "the" + "unwind-protect" + "labels" + "flet" + "tagbody" + "go" + "symbol-macrolet" + "symbol-macrolet" + "progn" + "prog1" + "error" + "or" + "and" + "defvar" + "defparameter" + "in-package" + "defpackage" + "case" + "ecase" + "typecase" + "etypecase" + "defstruct" + "defclass" + "if" + "when" + "unless" + "cond" + "switch" + "declaim" + "optimize")) + +;; constant +((sym_lit) @constant + (#match? @constant "^[+].+[+]$")) + +(var_quoting_lit + marker: "#'" @symbol + value: (_) @symbol) + +["#" "#p" "#P"] @symbol + +(list_lit + . + (sym_lit) @function.builtin + ;; For a complete and more efficient version install theHamsta/nvim-treesitter-commonlisp + (#any-of? @function.builtin + "mapcar" + "reduce" + "remove-if-not" + "cons" + "car" + "last" + "nth" + "equal" + "cdr" + "first" + "rest" + "format")) + +(list_lit + . + (sym_lit) @operator + (#match? @operator "^([+*-+=<>]|<=|>=|/=)$")) + + +((sym_lit) @symbol +(#match? @symbol "^[&]")) + +[(array_dimension) "#0A" "#0a"] @number + +(char_lit) @character diff --git a/bundle/nvim-treesitter/queries/commonlisp/locals.scm b/bundle/nvim-treesitter/queries/commonlisp/locals.scm new file mode 100644 index 000000000..acdf965b7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/commonlisp/locals.scm @@ -0,0 +1,72 @@ + +(defun_header + function_name: (sym_lit) @definition.function (#set! definition.function.scope "parent")) +(defun_header + lambda_list: (list_lit (sym_lit) @definition.parameter)) + +(defun_header + keyword: (defun_keyword "defmethod") + lambda_list: (list_lit (list_lit . (sym_lit) . (sym_lit) @definition.type))) +(defun_header + lambda_list: (list_lit (list_lit . (sym_lit) @definition.parameter . (_)))) + +(sym_lit) @reference + +(defun) @scope + +((list_lit . (sym_lit) @_defvar . (sym_lit) @definition.var) +(#match? @_defvar "^(cl:)?(defvar|defparameter)$")) + +(list_lit + . + (sym_lit) @_deftest + . + (sym_lit) @definition.function + (#match? @_deftest "^(deftest)$")) @scope + +(list_lit + . + (sym_lit) @_deftest + . + (sym_lit) @definition.function + (#match? @_deftest "^(deftest)$")) @scope + +(for_clause . (sym_lit) @definition.var) +(with_clause . (sym_lit) @definition.var) +(loop_macro) @scope + +(list_lit + . + (sym_lit) @_let (#match? @_let "(cl:|cffi:)?(with-accessors|with-foreign-objects|let[*]?)") + . + (list_lit (list_lit . (sym_lit) @definition.var))) @scope + +(list_lit + . + (sym_lit) @_let (#match? @_let "(cl:|alexandria:)?(with-gensyms|dotimes|with-foreign-object)") + . + (list_lit . (sym_lit) @definition.var)) @scope + +(list_lit + . + (kwd_lit) @_import_from (#eq? @_import_from ":import-from") + . + (_) + (kwd_lit (kwd_symbol) @definition.import)) + +(list_lit + . + (kwd_lit) @_import_from (#eq? @_import_from ":import-from") + . + (_) + (sym_lit) @definition.import) + +(list_lit + . + (kwd_lit) @_use (#eq? @_use ":use") + (kwd_lit (kwd_symbol) @definition.import)) + +(list_lit + . + (kwd_lit) @_use (#eq? @_use ":use") + (sym_lit) @definition.import) diff --git a/bundle/nvim-treesitter/queries/cooklang/highlights.scm b/bundle/nvim-treesitter/queries/cooklang/highlights.scm new file mode 100644 index 000000000..4ced465bd --- /dev/null +++ b/bundle/nvim-treesitter/queries/cooklang/highlights.scm @@ -0,0 +1,22 @@ +(metadata) @comment + +(ingredient + "@" @tag + (name)? @text.title + (amount + (quantity)? @number + (units)? @tag.attribute)?) + +(timer + "~" @tag + (name)? @text.title + (amount + (quantity)? @number + (units)? @tag.attribute)?) + +(cookware + "#" @tag + (name)? @text.title + (amount + (quantity)? @number + (units)? @tag.attribute)?) diff --git a/bundle/nvim-treesitter/queries/cpp/folds.scm b/bundle/nvim-treesitter/queries/cpp/folds.scm new file mode 100644 index 000000000..23d623b04 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cpp/folds.scm @@ -0,0 +1,14 @@ +; inherits: c + +[ + (for_range_loop) + (class_specifier) + (field_declaration + type: (enum_specifier) + default_value: (initializer_list)) + (template_declaration) + (namespace_definition) + (try_statement) + (catch_clause) + (lambda_expression) +] @fold diff --git a/bundle/nvim-treesitter/queries/cpp/highlights.scm b/bundle/nvim-treesitter/queries/cpp/highlights.scm new file mode 100644 index 000000000..8dcbaeff5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cpp/highlights.scm @@ -0,0 +1,184 @@ +; inherits: c + +((identifier) @field + (#match? @field "(^_|^m_|_$)")) + +(parameter_declaration + declarator: (reference_declarator) @parameter) +; function(Foo ...foo) +(variadic_parameter_declaration + declarator: (variadic_declarator + (_) @parameter)) +; int foo = 0 +(optional_parameter_declaration + declarator: (_) @parameter) + +;(field_expression) @parameter ;; How to highlight this? +(template_function + name: (identifier) @function) + +(template_method + name: (field_identifier) @method) + +(((field_expression + (field_identifier) @method)) @_parent + (#has-parent? @_parent template_method function_declarator call_expression)) + +(field_initializer + (field_identifier) @property) + +(function_declarator + declarator: (field_identifier) @method) + +(concept_definition + name: (identifier) @type) + +(namespace_identifier) @namespace +((namespace_identifier) @type + (#lua-match? @type "^[A-Z]")) +((namespace_identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) +(case_statement + value: (qualified_identifier (identifier) @constant)) +(namespace_definition + name: (identifier) @namespace) + +(using_declaration . "using" . "namespace" . [(qualified_identifier) (identifier)] @namespace) + +(destructor_name + (identifier) @method) + +(function_declarator + declarator: (qualified_identifier + name: (identifier) @function)) +(function_declarator + declarator: (qualified_identifier + name: (qualified_identifier + name: (identifier) @function))) +((function_declarator + declarator: (qualified_identifier + name: (identifier) @constructor)) + (#lua-match? @constructor "^[A-Z]")) + +(operator_name) @function +"operator" @function +"static_assert" @function.builtin + +(call_expression + function: (qualified_identifier + name: (identifier) @function)) +(call_expression + function: (qualified_identifier + name: (qualified_identifier + name: (identifier) @function))) +(call_expression + function: + (qualified_identifier + name: (qualified_identifier + name: (qualified_identifier + name: (identifier) @function)))) + +(call_expression + function: (field_expression + field: (field_identifier) @function)) + +((call_expression + function: (identifier) @constructor) +(#lua-match? @constructor "^[A-Z]")) +((call_expression + function: (qualified_identifier + name: (identifier) @constructor)) +(#lua-match? @constructor "^[A-Z]")) + +((call_expression + function: (field_expression + field: (field_identifier) @constructor)) +(#lua-match? @constructor "^[A-Z]")) + +;; constructing a type in an initializer list: Constructor (): **SuperType (1)** +((field_initializer + (field_identifier) @constructor + (argument_list)) + (#lua-match? @constructor "^[A-Z]")) + + +; Constants + +(this) @variable.builtin +(nullptr) @constant + +(true) @boolean +(false) @boolean + +; Literals + +(raw_string_literal) @string + +; Keywords + +[ + "try" + "catch" + "noexcept" + "throw" +] @exception + + +[ + "class" + "decltype" + "constexpr" + "explicit" + "final" + "friend" + "mutable" + "namespace" + "override" + "private" + "protected" + "public" + "template" + "typename" + "using" + "virtual" + "co_await" + "concept" + "requires" + "consteval" + "constinit" + (auto) +] @keyword + +[ + "co_yield" + "co_return" +] @keyword.return + +[ + "new" + "delete" + + ;; these keywords are not supported by the parser + ;"eq" + ;"not_eq" + ; + ;"compl" + ;"and" + ;"or" + ; + ;"bitand" + ;"bitand_eq" + ;"bitor" + ;"bitor_eq" + ;"xor" + ;"xor_eq" +] @keyword.operator + +[ + "<=>" + "::" +] @operator + +(attribute_declaration) @attribute + +(literal_suffix) @operator diff --git a/bundle/nvim-treesitter/queries/cpp/indents.scm b/bundle/nvim-treesitter/queries/cpp/indents.scm new file mode 100644 index 000000000..f1007dd28 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cpp/indents.scm @@ -0,0 +1,10 @@ +; inherits: c + +[ + (class_specifier) + (condition_clause) +] @indent + +((field_initializer_list) @indent + (#set! "start_at_same_line" 1)) +(access_specifier) @branch diff --git a/bundle/nvim-treesitter/queries/cpp/injections.scm b/bundle/nvim-treesitter/queries/cpp/injections.scm new file mode 100644 index 000000000..13842120d --- /dev/null +++ b/bundle/nvim-treesitter/queries/cpp/injections.scm @@ -0,0 +1,3 @@ +(preproc_arg) @cpp + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/cpp/locals.scm b/bundle/nvim-treesitter/queries/cpp/locals.scm new file mode 100644 index 000000000..c48a7cc39 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cpp/locals.scm @@ -0,0 +1,71 @@ +; inherits: c + +;; Parameters +(variadic_parameter_declaration + declarator: (variadic_declarator + (identifier) @definition.parameter)) +(optional_parameter_declaration + declarator: (identifier) @definition.parameter) +;; Class / struct definitions +(class_specifier) @scope + +(reference_declarator + (identifier) @definition.var) + +(variadic_declarator + (identifier) @definition.var) + +(struct_specifier + name: (qualified_identifier + name: (type_identifier) @definition.type)) + +(class_specifier + name: (type_identifier) @definition.type) + +(concept_definition + name: (identifier) @definition.type) + +(class_specifier + name: (qualified_identifier + name: (type_identifier) @definition.type)) + +(alias_declaration + name: (type_identifier) @definition.type) + +;template +(type_parameter_declaration + (type_identifier) @definition.type) +(template_declaration) @scope + +;; Namespaces +(namespace_definition + name: (identifier) @definition.namespace + body: (_) @scope) + +((namespace_identifier) @reference + (set! reference.kind "namespace")) + +;; Function definitions +(template_function + name: (identifier) @definition.function) @scope + +(template_method + name: (field_identifier) @definition.method) @scope + +(function_declarator + declarator: (qualified_identifier + name: (identifier) @definition.function)) @scope + +(field_declaration + declarator: (function_declarator + (field_identifier) @definition.method)) + +(lambda_expression) @scope + +;; Control structures +(try_statement + body: (_) @scope) + +(catch_clause) @scope + +(requires_expression) @scope diff --git a/bundle/nvim-treesitter/queries/css/folds.scm b/bundle/nvim-treesitter/queries/css/folds.scm new file mode 100644 index 000000000..9d2995c48 --- /dev/null +++ b/bundle/nvim-treesitter/queries/css/folds.scm @@ -0,0 +1,3 @@ +[ + (rule_set) +] @fold diff --git a/bundle/nvim-treesitter/queries/css/highlights.scm b/bundle/nvim-treesitter/queries/css/highlights.scm new file mode 100644 index 000000000..d8439d678 --- /dev/null +++ b/bundle/nvim-treesitter/queries/css/highlights.scm @@ -0,0 +1,90 @@ +[ + "@media" + "@import" + "@charset" + "@namespace" + "@supports" + "@keyframes" + (at_keyword) + (to) + (from) + (important) + ] @keyword + +(comment) @comment + +[ + (tag_name) + (nesting_selector) + (universal_selector) + ] @type + +(function_name) @function + +[ + "~" + ">" + "+" + "-" + "*" + "/" + "=" + "^=" + "|=" + "~=" + "$=" + "*=" + "and" + "or" + "not" + "only" + ] @operator + + +(attribute_selector (plain_value) @string) +(pseudo_element_selector (tag_name) @property) +(pseudo_class_selector (class_name) @property) + +[ + (class_name) + (id_name) + (namespace_name) + (property_name) + (feature_name) + (attribute_name) + ] @property + + +((property_name) @type + (#match? @type "^--")) +((plain_value) @type + (#match? @type "^--")) + +[ + (string_value) + (color_value) + (unit) + ] @string + +[ + (integer_value) + (float_value) + ] @number + +[ + "#" + "," + "." + ":" + "::" + ";" + ] @punctuation.delimiter + +[ + "{" + ")" + "(" + "}" + ] @punctuation.bracket + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/css/indents.scm b/bundle/nvim-treesitter/queries/css/indents.scm new file mode 100644 index 000000000..1ea8a336f --- /dev/null +++ b/bundle/nvim-treesitter/queries/css/indents.scm @@ -0,0 +1,9 @@ +[ + (block) + (declaration) +] @indent + +(block ("}") @branch) +("}") @dedent + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/css/injections.scm b/bundle/nvim-treesitter/queries/css/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/css/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/cuda/folds.scm b/bundle/nvim-treesitter/queries/cuda/folds.scm new file mode 100644 index 000000000..b617fdc56 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cuda/folds.scm @@ -0,0 +1 @@ +; inherits: cpp diff --git a/bundle/nvim-treesitter/queries/cuda/highlights.scm b/bundle/nvim-treesitter/queries/cuda/highlights.scm new file mode 100644 index 000000000..404c72afb --- /dev/null +++ b/bundle/nvim-treesitter/queries/cuda/highlights.scm @@ -0,0 +1,14 @@ +; inherits: cpp + +[ "<<<" ">>>" ] @punctuation.bracket + +[ + "__local__" + "__shared__" + "__global__" + "__host__" + "__device__" + "__forceinline__" + "__restrict__" + "__launch_bounds__" +] @keyword diff --git a/bundle/nvim-treesitter/queries/cuda/indents.scm b/bundle/nvim-treesitter/queries/cuda/indents.scm new file mode 100644 index 000000000..b617fdc56 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cuda/indents.scm @@ -0,0 +1 @@ +; inherits: cpp diff --git a/bundle/nvim-treesitter/queries/cuda/injections.scm b/bundle/nvim-treesitter/queries/cuda/injections.scm new file mode 100644 index 000000000..49fe7c532 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cuda/injections.scm @@ -0,0 +1,3 @@ +(preproc_arg) @cuda + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/cuda/locals.scm b/bundle/nvim-treesitter/queries/cuda/locals.scm new file mode 100644 index 000000000..b617fdc56 --- /dev/null +++ b/bundle/nvim-treesitter/queries/cuda/locals.scm @@ -0,0 +1 @@ +; inherits: cpp diff --git a/bundle/nvim-treesitter/queries/d/folds.scm b/bundle/nvim-treesitter/queries/d/folds.scm new file mode 100644 index 000000000..be4dee45e --- /dev/null +++ b/bundle/nvim-treesitter/queries/d/folds.scm @@ -0,0 +1 @@ +(block_statement) @fold diff --git a/bundle/nvim-treesitter/queries/d/highlights.scm b/bundle/nvim-treesitter/queries/d/highlights.scm new file mode 100644 index 000000000..9a0887f3a --- /dev/null +++ b/bundle/nvim-treesitter/queries/d/highlights.scm @@ -0,0 +1,267 @@ +;; Misc + +[ + (line_comment) + (block_comment) + (nesting_block_comment) +] @comment + +[ + "(" ")" + "[" "]" + "{" "}" +] @punctuation.bracket + +[ + "," + ";" + "." + ":" +] @punctuation.delimiter + +[ + ".." + "$" +] @punctuation.special + +;; Constants + +[ + "__FILE_FULL_PATH__" + "__FILE__" + "__FUNCTION__" + "__LINE__" + "__MODULE__" + "__PRETTY_FUNCTION__" +] @constant.macro + +[ + (wysiwyg_string) + (alternate_wysiwyg_string) + (double_quoted_string) + (hex_string) + (delimited_string) + (token_string) +] @string + +(character_literal) @character + +(integer_literal) @number + +(float_literal) @float + +[ + "true" + "false" +] @boolean + +;; Functions + +(func_declarator + (identifier) @function +) + +[ + "__traits" + "__vector" + "assert" + "is" + "mixin" + "pragma" + "typeid" +] @function.builtin + +(import_expression + "import" @function.builtin +) + +(parameter + (var_declarator + (identifier) @parameter + ) +) + +(function_literal + (identifier) @parameter +) + +(constructor + "this" @constructor +) + +(destructor + "this" @constructor +) + +;; Keywords + +[ + "case" + "default" + "else" + "if" + "switch" +] @conditional + +[ + "break" + "continue" + "do" + "for" + "foreach" + "foreach_reverse" + "while" +] @repeat + +[ + "__gshared" + "__parameters" + "abstract" + "alias" + "align" + "asm" + "auto" + "body" + "class" + "const" + "debug" + "deprecated" + "enum" + "export" + "extern" + "final" + "goto" + "immutable" + "inout" + "interface" + "invariant" + "lazy" + "macro" + "nothrow" + "null" + "out" + "override" + "package" + "private" + "protected" + "public" + "pure" + "ref" + "scope" + "shared" + "static" + "struct" + "synchronized" + "template" + "union" + "unittest" + "version" + "with" +] @keyword + +[ + "delegate" + "function" +] @keyword.function + +"return" @keyword.return + +[ + "cast" + "new" +] @keyword.operator + +[ + "+" + "++" + "+=" + "-" + "--" + "-=" + "*" + "*=" + "%" + "%=" + "^" + "^=" + "^^" + "^^=" + "/" + "/=" + "|" + "|=" + "||" + "~" + "~=" + "=" + "==" + "=>" + "<" + "<=" + "<<" + "<<=" + ">" + ">=" + ">>" + ">>=" + ">>>" + ">>>=" + "!" + "!=" + "&" + "&&" +] @operator + +[ + "catch" + "finally" + "throw" + "try" +] @exception + +(module_declaration + "module" @include +) + +(import_declaration + "import" @include +) + +(type) @type + +(catch_parameter + (qualified_identifier) @type +) + +(var_declarations + (qualified_identifier) @type +) + +(func_declaration + (qualified_identifier) @type +) + +(parameter + (qualified_identifier) @type +) + +(class_declaration + (identifier) @type +) + +(fundamental_type) @type.builtin + +(module_fully_qualified_name (packages (package_name) @namespace)) +(module_name) @namespace + +(at_attribute) @attribute + +(user_defined_attribute + "@" @attribute +) + +;; Variables + +(primary_expression + "this" @variable.builtin +) diff --git a/bundle/nvim-treesitter/queries/d/indents.scm b/bundle/nvim-treesitter/queries/d/indents.scm new file mode 100644 index 000000000..7a6df759c --- /dev/null +++ b/bundle/nvim-treesitter/queries/d/indents.scm @@ -0,0 +1,17 @@ +[ + (block_statement) + (case_statement) + (token_string) +] @indent + +[ + "(" ")" + "{" "}" + "[" "]" +] @branch + +[ + (line_comment) + (block_comment) + (nesting_block_comment) +] @ignore diff --git a/bundle/nvim-treesitter/queries/d/injections.scm b/bundle/nvim-treesitter/queries/d/injections.scm new file mode 100644 index 000000000..d95514370 --- /dev/null +++ b/bundle/nvim-treesitter/queries/d/injections.scm @@ -0,0 +1,7 @@ +[ + (line_comment) + (block_comment) + (nesting_block_comment) +] @comment + +(token_string_tokens) @d diff --git a/bundle/nvim-treesitter/queries/dart/highlights.scm b/bundle/nvim-treesitter/queries/dart/highlights.scm new file mode 100644 index 000000000..9974d4095 --- /dev/null +++ b/bundle/nvim-treesitter/queries/dart/highlights.scm @@ -0,0 +1,259 @@ +(dotted_identifier_list) @string + +; Methods +; -------------------- +(super) @function + +; TODO: add method/call_expression to grammar and +; distinguish method call from variable access +(function_expression_body (identifier) @function) +; ((identifier)(selector (argument_part)) @function) + +; NOTE: This query is a bit of a work around for the fact that the dart grammar doesn't +; specifically identify a node as a function call +(((identifier) @function (#match? @function "^_?[a-z]")) + . (selector . (argument_part))) @function + +; Annotations +; -------------------- +(annotation + name: (identifier) @attribute) +(marker_annotation + name: (identifier) @attribute) + +; Operators and Tokens +; -------------------- +(template_substitution + "$" @punctuation.special + "{" @punctuation.special + "}" @punctuation.special +) @none + +(template_substitution + "$" @punctuation.special + (identifier_dollar_escaped) @variable +) @none + +(escape_sequence) @string.escape + +[ + "@" + "=>" + ".." + "??" + "==" + "?" + ":" + "&&" + "%" + "<" + ">" + "=" + ">=" + "<=" + "||" + (multiplicative_operator) + (increment_operator) + (is_operator) + (prefix_operator) + (equality_operator) + (additive_operator) +] @operator + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +; Delimiters +; -------------------- +[ + ";" + "." + "," +] @punctuation.delimiter + +; Types +; -------------------- +(class_definition + name: (identifier) @type) +(constructor_signature + name: (identifier) @type) +(scoped_identifier + scope: (identifier) @type) +(function_signature + name: (identifier) @method) +(getter_signature + (identifier) @method) +(setter_signature + name: (identifier) @method) +(enum_declaration + name: (identifier) @type) +(enum_constant + name: (identifier) @type) +(void_type) @type + +((scoped_identifier + scope: (identifier) @type + name: (identifier) @type) + (#match? @type "^[a-zA-Z]")) + +(type_identifier) @type + +; Variables +; -------------------- +; var keyword +(inferred_type) @keyword + +(const_builtin) @constant.builtin +(final_builtin) @constant.builtin + +((identifier) @type + (#match? @type "^_?[A-Z].*[a-z]")) ; catch Classes or IClasses not CLASSES + +("Function" @type) + +; properties +(unconditional_assignable_selector + (identifier) @property) + +(conditional_assignable_selector + (identifier) @property) + +; assignments +(assignment_expression + left: (assignable_expression) @variable) + +(this) @variable.builtin + +; Parameters +; -------------------- +(formal_parameter + name: (identifier) @parameter) + +(named_argument + (label (identifier) @parameter)) + +; Literals +; -------------------- +[ + (hex_integer_literal) + (decimal_integer_literal) + (decimal_floating_point_literal) + ; TODO: inaccessbile nodes + ; (octal_integer_literal) + ; (hex_floating_point_literal) +] @number + +(symbol_literal) @symbol +(string_literal) @string +(true) @boolean +(false) @boolean +(null_literal) @constant.builtin + +(documentation_comment) @comment +(comment) @comment + +; Keywords +; -------------------- +["import" "library" "export"] @include + +; Reserved words (cannot be used as identifiers) +[ + ; TODO: + ; "rethrow" cannot be targeted at all and seems to be an invisible node + ; TODO: + ; the assert keyword cannot be specifically targeted + ; because the grammar selects the whole node or the content + ; of the assertion not just the keyword + ; assert + (case_builtin) + "late" + "required" + "extension" + "on" + "class" + "enum" + "extends" + "in" + "is" + "new" + "super" + "with" +] @keyword + +[ + "return" + "yield" +] @keyword.return + + +; Built in identifiers: +; alone these are marked as keywords +[ + "abstract" + "as" + "async" + "async*" + "sync*" + "await" + "covariant" + "deferred" + "dynamic" + "external" + "factory" + "get" + "implements" + "interface" + "library" + "operator" + "mixin" + "part" + "set" + "show" + "static" + "typedef" +] @keyword + +; when used as an identifier: +((identifier) @variable.builtin + (#any-of? @variable.builtin + "abstract" + "as" + "covariant" + "deferred" + "dynamic" + "export" + "external" + "factory" + "Function" + "get" + "implements" + "import" + "interface" + "library" + "operator" + "mixin" + "part" + "set" + "static" + "typedef")) + +["if" "else" "switch" "default"] @conditional + +[ + "try" + "throw" + "catch" + "finally" + (break_statement) +] @exception + +["do" "while" "continue" "for"] @repeat + +; Error +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/dart/indents.scm b/bundle/nvim-treesitter/queries/dart/indents.scm new file mode 100644 index 000000000..e01cc238d --- /dev/null +++ b/bundle/nvim-treesitter/queries/dart/indents.scm @@ -0,0 +1,27 @@ +[ + (class_body) + (function_body) + (function_expression_body) + (declaration (initializers)) + (switch_block) + (if_statement) + (formal_parameter_list) + (formal_parameter) + (list_literal) + (return_statement) + (arguments) +] @indent + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @branch + +; this one is for dedenting the else block +(if_statement (block) @branch) + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/dart/injections.scm b/bundle/nvim-treesitter/queries/dart/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/dart/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/dart/locals.scm b/bundle/nvim-treesitter/queries/dart/locals.scm new file mode 100644 index 000000000..1013d4a92 --- /dev/null +++ b/bundle/nvim-treesitter/queries/dart/locals.scm @@ -0,0 +1,8 @@ +(class_definition + body: (_) @scope) + + (block) @scope + + (try_statement) @scope + (catch_clause) @scope + (finally_clause) @scope diff --git a/bundle/nvim-treesitter/queries/devicetree/folds.scm b/bundle/nvim-treesitter/queries/devicetree/folds.scm new file mode 100644 index 000000000..206c4bed8 --- /dev/null +++ b/bundle/nvim-treesitter/queries/devicetree/folds.scm @@ -0,0 +1 @@ +(node) @fold diff --git a/bundle/nvim-treesitter/queries/devicetree/highlights.scm b/bundle/nvim-treesitter/queries/devicetree/highlights.scm new file mode 100644 index 000000000..e3140a5da --- /dev/null +++ b/bundle/nvim-treesitter/queries/devicetree/highlights.scm @@ -0,0 +1,35 @@ +(comment) @comment + +[ + (preproc_include) + (dtsi_include) +] @include + +(preproc_def) @constant.macro +(preproc_function_def) @function.macro + +[ + (memory_reservation) + (file_version) +] @attribute + +[ + (string_literal) + (byte_string_literal) + (system_lib_string) +] @string + +(integer_literal) @number + +(identifier) @variable +(node (identifier) @namespace) +(property (identifier) @property) +(labeled_item (identifier) @label) +(call_expression (identifier) @function.macro) + +(reference) @label ; referencing labeled_item.identifier +(unit_address) @constant + +[ "=" ] @operator +[ "(" ")" "[" "]" "{" "}" "<" ">" ] @punctuation.bracket +[ ";" ":" "," "@" ] @punctuation.delimiter diff --git a/bundle/nvim-treesitter/queries/devicetree/indents.scm b/bundle/nvim-treesitter/queries/devicetree/indents.scm new file mode 100644 index 000000000..cd7c8fcd6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/devicetree/indents.scm @@ -0,0 +1,14 @@ +[ + (node) + (property) + (integer_cells) +] @indent + +[ + "}" + ">" +] @branch + +[ + (comment) +] @ignore diff --git a/bundle/nvim-treesitter/queries/devicetree/injections.scm b/bundle/nvim-treesitter/queries/devicetree/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/devicetree/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/devicetree/locals.scm b/bundle/nvim-treesitter/queries/devicetree/locals.scm new file mode 100644 index 000000000..95b124bd1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/devicetree/locals.scm @@ -0,0 +1,4 @@ +[ + (node) + (integer_cells) +]@scope diff --git a/bundle/nvim-treesitter/queries/dockerfile/highlights.scm b/bundle/nvim-treesitter/queries/dockerfile/highlights.scm new file mode 100644 index 000000000..af1c088c5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/dockerfile/highlights.scm @@ -0,0 +1,50 @@ +[ + "FROM" + "AS" + "RUN" + "CMD" + "LABEL" + "EXPOSE" + "ENV" + "ADD" + "COPY" + "ENTRYPOINT" + "VOLUME" + "USER" + "WORKDIR" + "ARG" + "ONBUILD" + "STOPSIGNAL" + "HEALTHCHECK" + "SHELL" + "MAINTAINER" + "CROSS_BUILD" +] @keyword + +[ + ":" + "@" +] @operator + +(comment) @comment + +(image_spec + (image_tag + ":" @punctuation.special) + (image_digest + "@" @punctuation.special)) + +(double_quoted_string) @string + +(expansion + [ + "$" + "{" + "}" + ] @punctuation.special +) + +((variable) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) + + diff --git a/bundle/nvim-treesitter/queries/dockerfile/injections.scm b/bundle/nvim-treesitter/queries/dockerfile/injections.scm new file mode 100644 index 000000000..c1fdd3f99 --- /dev/null +++ b/bundle/nvim-treesitter/queries/dockerfile/injections.scm @@ -0,0 +1,3 @@ +(comment) @comment + +(shell_command) @bash diff --git a/bundle/nvim-treesitter/queries/dot/highlights.scm b/bundle/nvim-treesitter/queries/dot/highlights.scm new file mode 100644 index 000000000..86bb9b303 --- /dev/null +++ b/bundle/nvim-treesitter/queries/dot/highlights.scm @@ -0,0 +1,45 @@ +(identifier) @type +(keyword) @keyword +(string_literal) @string +(number_literal) @number + +[ + (edgeop) + (operator) +] @operator + +[ + "," + ";" +] @punctuation.delimiter + +[ + "{" + "}" + "[" + "]" + "<" + ">" +] @punctuation.bracket + +(subgraph + id: (id + (identifier) @namespace) +) + +(attribute + name: (id + (identifier) @field) +) + +(attribute + value: (id + (identifier) @constant) +) + +[ +(comment) +(preproc) +] @comment + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/dot/injections.scm b/bundle/nvim-treesitter/queries/dot/injections.scm new file mode 100644 index 000000000..529d04d4a --- /dev/null +++ b/bundle/nvim-treesitter/queries/dot/injections.scm @@ -0,0 +1,2 @@ +(html_internal) @html +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/ecma/folds.scm b/bundle/nvim-treesitter/queries/ecma/folds.scm new file mode 100644 index 000000000..960b247d3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ecma/folds.scm @@ -0,0 +1,21 @@ +[ + (for_in_statement) + (for_statement) + (while_statement) + (arrow_function) + (function) + (function_declaration) + (class_declaration) + (method_definition) + (do_statement) + (with_statement) + (switch_statement) + (switch_case) + (import_statement) + (if_statement) + (try_statement) + (catch_clause) + (object) + (generator_function) + (generator_function_declaration) +] @fold diff --git a/bundle/nvim-treesitter/queries/ecma/highlights.scm b/bundle/nvim-treesitter/queries/ecma/highlights.scm new file mode 100644 index 000000000..7334bd1e6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ecma/highlights.scm @@ -0,0 +1,255 @@ +; Types + +; Javascript + +; Variables +;----------- +(identifier) @variable + +; Properties +;----------- + +(property_identifier) @property +(shorthand_property_identifier) @property +(private_property_identifier) @property + +(variable_declarator + name: (object_pattern + (shorthand_property_identifier_pattern))) @variable + +; Special identifiers +;-------------------- + +((identifier) @constructor + (#lua-match? @constructor "^[A-Z]")) + +((identifier) @constant + (#lua-match? @constant "^[A-Z_][A-Z%d_]+$")) + +((shorthand_property_identifier) @constant + (#lua-match? @constant "^[A-Z_][A-Z%d_]+$")) + +((identifier) @variable.builtin + (#vim-match? @variable.builtin "^(arguments|module|console|window|document)$")) + +((identifier) @function.builtin + (#eq? @function.builtin "require")) + +; Function and method definitions +;-------------------------------- + +(function + name: (identifier) @function) +(function_declaration + name: (identifier) @function) +(generator_function + name: (identifier) @function) +(generator_function_declaration + name: (identifier) @function) +(method_definition + name: [(property_identifier) (private_property_identifier)] @method) + +(pair + key: (property_identifier) @method + value: (function)) +(pair + key: (property_identifier) @method + value: (arrow_function)) + +(assignment_expression + left: (member_expression + property: (property_identifier) @method) + right: (arrow_function)) +(assignment_expression + left: (member_expression + property: (property_identifier) @method) + right: (function)) + +(variable_declarator + name: (identifier) @function + value: (arrow_function)) +(variable_declarator + name: (identifier) @function + value: (function)) + +(assignment_expression + left: (identifier) @function + right: (arrow_function)) +(assignment_expression + left: (identifier) @function + right: (function)) + +; Function and method calls +;-------------------------- + +(call_expression + function: (identifier) @function) + +(call_expression + function: (member_expression + property: [(property_identifier) (private_property_identifier)] @method)) + +; Variables +;---------- +(namespace_import + (identifier) @namespace) + +; Literals +;--------- + +(this) @variable.builtin +(super) @variable.builtin + +(true) @boolean +(false) @boolean +(null) @constant.builtin +[ +(comment) +(hash_bang_line) +] @comment +(string) @string +(regex) @punctuation.delimiter +(regex_pattern) @string.regex +(template_string) @string +(escape_sequence) @string.escape +(number) @number + +; Punctuation +;------------ + +"..." @punctuation.special + +";" @punctuation.delimiter +"." @punctuation.delimiter +"," @punctuation.delimiter +"?." @punctuation.delimiter + +(pair ":" @punctuation.delimiter) + +[ + "--" + "-" + "-=" + "&&" + "+" + "++" + "+=" + "&=" + "/=" + "**=" + "<<=" + "<" + "<=" + "<<" + "=" + "==" + "===" + "!=" + "!==" + "=>" + ">" + ">=" + ">>" + "||" + "%" + "%=" + "*" + "**" + ">>>" + "&" + "|" + "^" + "??" + "*=" + ">>=" + ">>>=" + "^=" + "|=" + "&&=" + "||=" + "??=" +] @operator + +(binary_expression "/" @operator) +(ternary_expression ["?" ":"] @conditional) +(unary_expression ["!" "~" "-" "+" "delete" "void" "typeof"] @operator) + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +((template_substitution ["${" "}"] @punctuation.special) @none) + +; Keywords +;---------- + +[ +"if" +"else" +"switch" +"case" +"default" +] @conditional + +[ +"import" +"from" +"as" +] @include + +[ +"for" +"of" +"do" +"while" +"continue" +] @repeat + +[ +"async" +"await" +"break" +"class" +"const" +"debugger" +"export" +"extends" +"get" +"in" +"instanceof" +"let" +"set" +"static" +"switch" +"target" +"typeof" +"var" +"void" +"with" +] @keyword + +[ +"return" +"yield" +] @keyword.return + +[ + "function" +] @keyword.function + +[ + "new" + "delete" +] @keyword.operator + +[ + "throw" + "try" + "catch" + "finally" +] @exception diff --git a/bundle/nvim-treesitter/queries/ecma/indents.scm b/bundle/nvim-treesitter/queries/ecma/indents.scm new file mode 100644 index 000000000..55cae9b19 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ecma/indents.scm @@ -0,0 +1,53 @@ +[ + (arguments) + (array) + (binary_expression) + (class_body) + (export_clause) + (formal_parameters) + (named_imports) + (object) + (object_pattern) + (parenthesized_expression) + (return_statement) + (statement_block) + (switch_case) + (switch_statement) + (template_substitution) + (ternary_expression) +] @indent + +(arguments (call_expression) @indent) +(binary_expression (call_expression) @indent) +(expression_statement (call_expression) @indent) +(arrow_function + body: (_) @_body + (#not-has-type? @_body statement_block) +) @indent +(assignment_expression + right: (_) @_right + (#not-has-type? @_right arrow_function function) +) @indent +(variable_declarator + value: (_) @_value + (#not-has-type? @_value arrow_function call_expression function) +) @indent + +(arguments ")" @indent_end) +(object "}" @indent_end) +(statement_block "}" @indent_end) + +[ + (arguments (object)) + ")" + "}" + "]" +] @branch +(statement_block "{" @branch) + +[ + (comment) + (template_string) +] @ignore + +(ERROR) @auto diff --git a/bundle/nvim-treesitter/queries/ecma/injections.scm b/bundle/nvim-treesitter/queries/ecma/injections.scm new file mode 100644 index 000000000..f97f9cd2c --- /dev/null +++ b/bundle/nvim-treesitter/queries/ecma/injections.scm @@ -0,0 +1,58 @@ +(comment) @jsdoc +(comment) @comment + +(call_expression + function: ((identifier) @language) + arguments: ((template_string) @content + (#offset! @content 0 1 0 -1))) + +(call_expression + function: ((identifier) @_name + (#eq? @_name "gql")) + arguments: ((template_string) @graphql + (#offset! @graphql 0 1 0 -1))) + +(call_expression + function: ((identifier) @_name + (#eq? @_name "hbs")) + arguments: ((template_string) @glimmer + (#offset! @glimmer 0 1 0 -1))) + +; styled.div`` +(call_expression + function: (member_expression + object: (identifier) @_name + (#eq? @_name "styled")) + arguments: ((template_string) @css + (#offset! @css 0 1 0 -1))) + +; styled(Component)`` +(call_expression + function: (call_expression + function: (identifier) @_name + (#eq? @_name "styled")) + arguments: ((template_string) @css + (#offset! @css 0 1 0 -1))) + +; styled.div.attrs({ prop: "foo" })`` +(call_expression + function: (call_expression + function: (member_expression + object: (member_expression + object: (identifier) @_name + (#eq? @_name "styled")))) + arguments: ((template_string) @css + (#offset! @css 0 1 0 -1))) + + +; styled(Component).attrs({ prop: "foo" })`` +(call_expression + function: (call_expression + function: (member_expression + object: (call_expression + function: (identifier) @_name + (#eq? @_name "styled")))) + arguments: ((template_string) @css + (#offset! @css 0 1 0 -1))) + +(regex_pattern) @regex diff --git a/bundle/nvim-treesitter/queries/ecma/locals.scm b/bundle/nvim-treesitter/queries/ecma/locals.scm new file mode 100644 index 000000000..08c9b8e7d --- /dev/null +++ b/bundle/nvim-treesitter/queries/ecma/locals.scm @@ -0,0 +1,33 @@ +; Scopes +;------- + +(statement_block) @scope +(function) @scope +(arrow_function) @scope +(function_declaration) @scope +(method_definition) @scope +(for_statement) @scope +(for_in_statement) @scope +(catch_clause) @scope + +; Definitions +;------------ + +(variable_declarator + name: (identifier) @definition.var) + +(import_specifier + (identifier) @definition.import) + +(namespace_import + (identifier) @definition.import) + +(function_declaration + ((identifier) @definition.var) + (#set! definition.var.scope parent)) + +; References +;------------ + +(identifier) @reference +(shorthand_property_identifier) @reference diff --git a/bundle/nvim-treesitter/queries/eex/highlights.scm b/bundle/nvim-treesitter/queries/eex/highlights.scm new file mode 100644 index 000000000..781b39466 --- /dev/null +++ b/bundle/nvim-treesitter/queries/eex/highlights.scm @@ -0,0 +1,15 @@ +[ + "%>" + "--%>" + "<%!--" + "<%" + "<%#" + "<%%=" + "<%=" +] @tag.delimiter + +; EEx comments are highlighted as such +(comment) @comment + +; Tree-sitter parser errors +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/eex/injections.scm b/bundle/nvim-treesitter/queries/eex/injections.scm new file mode 100644 index 000000000..f43206f55 --- /dev/null +++ b/bundle/nvim-treesitter/queries/eex/injections.scm @@ -0,0 +1,5 @@ +; EEx expressions are Elixir +(expression) @elixir + +; EEx expressions can span multiple interpolated lines +(partial_expression) @elixir @combined diff --git a/bundle/nvim-treesitter/queries/elixir/folds.scm b/bundle/nvim-treesitter/queries/elixir/folds.scm new file mode 100644 index 000000000..b99a6d9e0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/elixir/folds.scm @@ -0,0 +1,9 @@ +[ + (anonymous_function) + (arguments) + (block) + (do_block) + (list) + (map) + (tuple) +] @fold diff --git a/bundle/nvim-treesitter/queries/elixir/highlights.scm b/bundle/nvim-treesitter/queries/elixir/highlights.scm new file mode 100644 index 000000000..db9bfbb2d --- /dev/null +++ b/bundle/nvim-treesitter/queries/elixir/highlights.scm @@ -0,0 +1,225 @@ +; Punctuation +[ + "," + ";" +] @punctuation.delimiter + +[ + "(" + ")" + "<<" + ">>" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "%" +] @punctuation.special + +; Parser Errors +(ERROR) @error + +; Identifiers +(identifier) @variable + +; Unused Identifiers +((identifier) @comment (#match? @comment "^_")) + +; Comments +(comment) @comment + +; Strings +(string) @string + +; Modules +(alias) @type + +; Atoms & Keywords +[ + (atom) + (quoted_atom) + (keyword) + (quoted_keyword) +] @symbol + +; Interpolation +(interpolation "#{" @string.escape "}" @string.escape) + +; Escape sequences +(escape_sequence) @string.escape + +; Integers +(integer) @number + +; Floats +(float) @float + +; Characters +[ + (char) + (charlist) +] @character + +; Booleans +(boolean) @boolean + +; Nil +(nil) @constant.builtin + +; Operators +(operator_identifier) @operator + +(unary_operator operator: _ @operator) + +(binary_operator operator: _ @operator) + +; Pipe Operator +(binary_operator operator: "|>" right: (identifier) @function) + +(dot operator: _ @operator) + +(stab_clause operator: _ @operator) + +; Local Function Calls +(call target: (identifier) @function) + +; Remote Function Calls +(call target: (dot left: [ + (atom) @type + (_) +] right: (identifier) @function) (arguments)) + +; Definition Function Calls +(call target: ((identifier) @keyword.function (#any-of? @keyword.function + "def" + "defdelegate" + "defexception" + "defguard" + "defguardp" + "defimpl" + "defmacro" + "defmacrop" + "defmodule" + "defn" + "defnp" + "defoverridable" + "defp" + "defprotocol" + "defstruct" +)) (arguments [ + (identifier) @function + (binary_operator left: (identifier) @function operator: "when")])?) + +; Kernel Keywords & Special Forms +(call target: ((identifier) @keyword (#any-of? @keyword + "alias" + "case" + "catch" + "cond" + "else" + "for" + "if" + "import" + "quote" + "raise" + "receive" + "require" + "reraise" + "super" + "throw" + "try" + "unless" + "unquote" + "unquote_splicing" + "use" + "with" +))) + +; Special Constants +((identifier) @constant.builtin (#any-of? @constant.builtin + "__CALLER__" + "__DIR__" + "__ENV__" + "__MODULE__" + "__STACKTRACE__" +)) + +; Reserved Keywords +[ + "after" + "catch" + "do" + "end" + "fn" + "rescue" + "when" + "else" +] @keyword + +; Operator Keywords +[ + "and" + "in" + "not in" + "not" + "or" +] @keyword.operator + +; Capture Operator +(unary_operator + operator: "&" + operand: [ + (integer) @operator + (binary_operator + left: [ + (call target: (dot left: (_) right: (identifier) @function)) + (identifier) @function + ] operator: "/" right: (integer) @operator) + ]) + +; Non-String Sigils +(sigil + "~" @string.special + ((sigil_name) @string.special) @_sigil_name + quoted_start: _ @string.special + quoted_end: _ @string.special + ((sigil_modifiers) @string.special)? + (#not-any-of? @_sigil_name "s" "S")) + +; String Sigils +(sigil + "~" @string + ((sigil_name) @string) @_sigil_name + quoted_start: _ @string + (quoted_content) @string + quoted_end: _ @string + ((sigil_modifiers) @string)? + (#any-of? @_sigil_name "s" "S")) + +; Module attributes +(unary_operator + operator: "@" + operand: [ + (identifier) + (call target: (identifier)) + ] @constant) @constant + +; Documentation +(unary_operator + operator: "@" + operand: (call + target: ((identifier) @_identifier (#any-of? @_identifier "moduledoc" "typedoc" "shortdoc" "doc")) @comment + (arguments [ + (string) + (boolean) + (charlist) + (sigil + "~" @comment + ((sigil_name) @comment) + quoted_start: _ @comment + (quoted_content) @comment + quoted_end: _ @comment) + ] @comment))) @comment diff --git a/bundle/nvim-treesitter/queries/elixir/indents.scm b/bundle/nvim-treesitter/queries/elixir/indents.scm new file mode 100644 index 000000000..517f66940 --- /dev/null +++ b/bundle/nvim-treesitter/queries/elixir/indents.scm @@ -0,0 +1,23 @@ +[ + (block) + (do_block) + (list) + (map) + (stab_clause) + (tuple) + (arguments) +] @indent + +[ + ")" + "]" + "after" + "catch" + "else" + "rescue" + "}" + "end" +] @indent_end @branch + +; Elixir pipelines are not indented, but other binary operator chains are +((binary_operator operator: _ @_operator) @indent (#not-eq? @_operator "|>")) diff --git a/bundle/nvim-treesitter/queries/elixir/injections.scm b/bundle/nvim-treesitter/queries/elixir/injections.scm new file mode 100644 index 000000000..423fddea7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/elixir/injections.scm @@ -0,0 +1,48 @@ +; Comments +(comment) @comment + +; Documentation +(unary_operator + operator: "@" + operand: (call + target: ((identifier) @_identifier (#any-of? @_identifier "moduledoc" "typedoc" "shortdoc" "doc")) + (arguments [ + (string (quoted_content) @markdown) + (sigil (quoted_content) @markdown) + ]))) + +; HEEx +(sigil + (sigil_name) @_sigil_name + (quoted_content) @heex +(#eq? @_sigil_name "H")) + +; Surface +(sigil + (sigil_name) @_sigil_name + (quoted_content) @surface +(#eq? @_sigil_name "F")) + +; Zigler +(sigil + (sigil_name) @_sigil_name + (quoted_content) @eex +(#any-of? @_sigil_name "E" "L")) + +(sigil + (sigil_name) @_sigil_name + (quoted_content) @zig +(#any-of? @_sigil_name "z" "Z")) + +; Regex +(sigil + (sigil_name) @_sigil_name + (quoted_content) @regex +(#any-of? @_sigil_name "r" "R")) + +; Jason +(sigil + (sigil_name) @_sigil_name + (quoted_content) @json +(#any-of? @_sigil_name "j" "J")) + diff --git a/bundle/nvim-treesitter/queries/elixir/locals.scm b/bundle/nvim-treesitter/queries/elixir/locals.scm new file mode 100644 index 000000000..79a9676df --- /dev/null +++ b/bundle/nvim-treesitter/queries/elixir/locals.scm @@ -0,0 +1,164 @@ +; References +(identifier) @reference +(alias) @reference + +; Module Definitions +(call + target: ((identifier) @_identifier (#eq? @_identifier "defmodule")) + (arguments (alias) @definition.type)) + +; Pattern Match Definitions +(binary_operator left: [ + (identifier) @definition.var + (_ (identifier) @definition.var) + (_ (_ (identifier) @definition.var)) + (_ (_ (_ (identifier) @definition.var))) + (_ (_ (_ (_ (identifier) @definition.var)))) + (_ (_ (_ (_ (_ (identifier) @definition.var))))) + (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))) + (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))))) +] operator: "=") + +; Stab Clause Definitions +(stab_clause + left: [ + (arguments [ + (identifier) @definition.var + (_ (identifier) @definition.var) + (_ (_ (identifier) @definition.var)) + (_ (_ (_ (identifier) @definition.var))) + (_ (_ (_ (_ (identifier) @definition.var)))) + (_ (_ (_ (_ (_ (identifier) @definition.var))))) + (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))) + (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))))) + ]) + (binary_operator + left: (arguments [ + (identifier) @definition.var + (_ (identifier) @definition.var) + (_ (_ (identifier) @definition.var)) + (_ (_ (_ (identifier) @definition.var))) + (_ (_ (_ (_ (identifier) @definition.var)))) + (_ (_ (_ (_ (_ (identifier) @definition.var))))) + (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))) + (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var))))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.var)))))))))))))))))))) + ]) operator: "when") +]) + +; Aliases +(call + target: ((identifier) @_identifier (#any-of? @_identifier "require" "alias" "use" "import")) + (arguments [ + (alias) @definition.import + (_ (alias) @definition.import) + (_ (_ (alias) @definition.import)) + (_ (_ (_ (alias) @definition.import))) + (_ (_ (_ (_ (alias) @definition.import)))) + ] +)) + +; Local Function Definitions & Scopes +(call + target: ((identifier) @_identifier (#any-of? @_identifier "def" "defp" "defmacro" "defmacrop" "defguard" "defguardp" "defn" "defnp" "for")) + (arguments [ + (identifier) @definition.function + (binary_operator left: (identifier) @definition.function operator: "when") + (binary_operator (identifier) @definition.parameter) + (call target: (identifier) @definition.function (arguments [ + (identifier) @definition.parameter + (_ (identifier) @definition.parameter) + (_ (_ (identifier) @definition.parameter)) + (_ (_ (_ (identifier) @definition.parameter))) + (_ (_ (_ (_ (identifier) @definition.parameter)))) + (_ (_ (_ (_ (_ (identifier) @definition.parameter))))) + (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))) + (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))))))) + ])) + ]?) (#set! definition.function.scope parent) + (do_block)? +) @scope + +; ExUnit Test Definitions & Scopes +(call + target: ((identifier) @_identifier (#eq? @_identifier "test")) + (arguments [ + (string) + ((string) . "," . [ + (identifier) @definition.parameter + (_ (identifier) @definition.parameter) + (_ (_ (identifier) @definition.parameter)) + (_ (_ (_ (identifier) @definition.parameter))) + (_ (_ (_ (_ (identifier) @definition.parameter)))) + (_ (_ (_ (_ (_ (identifier) @definition.parameter))))) + (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))) + (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter))))))))))))))))))) + (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (_ (identifier) @definition.parameter)))))))))))))))))))) + ]) +]) (do_block)?) @scope + +; Stab Clause Scopes +(stab_clause) @scope diff --git a/bundle/nvim-treesitter/queries/elm/highlights.scm b/bundle/nvim-treesitter/queries/elm/highlights.scm new file mode 100644 index 000000000..4d644ac63 --- /dev/null +++ b/bundle/nvim-treesitter/queries/elm/highlights.scm @@ -0,0 +1,90 @@ +[(line_comment) (block_comment)] @comment + +; Keywords +[ + "if" + "then" + "else" + (case) + (of) +] @conditional + +[ + "let" + "in" + (as) + (port) + (exposing) + (alias) + (infix) + (module) +] @keyword + +[ + (double_dot) + "|" +] @punctuation.special +[ + "," + (dot) +] @punctuation.delimiter + +[ + "(" + ")" + "{" + "}" +] @punctuation.bracket + +(type_annotation(lower_case_identifier) @function) +(port_annotation(lower_case_identifier) @function) +(function_declaration_left(lower_case_identifier) @function) +(function_call_expr target: + (value_expr) @function) + +(value_qid (upper_case_identifier) @constructor) +(value_qid ((dot) (lower_case_identifier) @field)) +(field_access_expr ((dot) (lower_case_identifier) @field)) + +(lower_pattern) @parameter +(record_base_identifier) @method + +[ + (backslash) + (underscore) +] @function + +[ + (operator_identifier) + (eq) + (colon) + (arrow) +] @operator + +(import) @include + +(number_constant_expr) @number + +(type) @keyword + +(module_declaration(upper_case_qid(upper_case_identifier)) @constructor) +(type_declaration(upper_case_identifier) @constructor) +(type_ref) @type +(type_alias_declaration name: (upper_case_identifier) @type) +(field_type name: + (lower_case_identifier) @property) + +(union_variant(upper_case_identifier) @symbol) +(union_pattern) @symbol +(value_expr(upper_case_qid(upper_case_identifier)) @symbol) + +; strings +(string_escape) @string +(open_quote) @string +(close_quote) @string +(regular_string_part) @string + +[ + (open_char) + (close_char) +] @character diff --git a/bundle/nvim-treesitter/queries/elm/injections.scm b/bundle/nvim-treesitter/queries/elm/injections.scm new file mode 100644 index 000000000..6395776e1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/elm/injections.scm @@ -0,0 +1,3 @@ +[(line_comment) (block_comment)] @comment + +(glsl_content) @glsl diff --git a/bundle/nvim-treesitter/queries/elvish/highlights.scm b/bundle/nvim-treesitter/queries/elvish/highlights.scm new file mode 100644 index 000000000..4dba8eecb --- /dev/null +++ b/bundle/nvim-treesitter/queries/elvish/highlights.scm @@ -0,0 +1,70 @@ +(comment) @comment + +["if" "elif"] @conditional +(if (else "else" @conditional)) + +["while" "for"] @repeat +(while (else "else" @repeat)) +(for (else "else" @repeat)) + +["try" "catch" "finally"] @exception +(try (else "else" @exception)) + +"use" @include +(import (bareword) @string.special) + +["*" "**" "?"] @string.special + +(command argument: (bareword) @parameter) +(command head: (identifier) @function) +((command head: (identifier) @keyword.return) + (#eq? @keyword.return "return")) +((command (identifier) @keyword.operator) + (#any-of? @keyword.operator "and" "or" "coalesce")) +[ + "+" "-" "*" "/" "%" "<" "<=""==" "!=" ">" + ">=" "s" ">=s" +] @function + +[">" "<" ">>" "<>" "|"] @operator + +(io_port) @number + +(function_definition + "fn" @keyword.function + (identifier) @function) + +(parameter_list) @parameter +(parameter_list "|" @punctuation.bracket) + +["var" "set" "tmp" "del"] @keyword +(variable_declaration + (lhs (identifier) @variable)) + +(variable_assignment + (lhs (identifier) @variable)) + +(temporary_assignment + (lhs (identifier) @variable)) + +(variable_deletion + (identifier) @variable) + + +(number) @number +(string) @string + +(variable (identifier) @variable) +((variable (identifier) @function) + (#match? @function ".+\\~$")) +((variable (identifier) @boolean) + (#any-of? @boolean "true" "false")) +((variable (identifier) @constant.builtin) + (#any-of? @constant.builtin + "_" "after-chdir" "args" "before-chdir" "buildinfo" "nil" + "notify-bg-job-success" "num-bg-jobs" "ok" "paths" "pid" + "pwd" "value-out-indicator" "version")) + +["$" "@"] @punctuation.special +["(" ")" "[" "]" "{" "}"] @punctuation.bracket +";" @punctuation.delimiter diff --git a/bundle/nvim-treesitter/queries/elvish/injections.scm b/bundle/nvim-treesitter/queries/elvish/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/elvish/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/fennel/highlights.scm b/bundle/nvim-treesitter/queries/fennel/highlights.scm new file mode 100644 index 000000000..7322e55c3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fennel/highlights.scm @@ -0,0 +1,121 @@ +(comment) @comment + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +[ + ":" + ":until" + "&" + "&as" + "?" +] @punctuation.special + +(nil) @constant.builtin +(vararg) @punctuation.special + +(boolean) @boolean +(number) @number + +(string) @string +(escape_sequence) @string.escape + +(symbol) @variable + +(multi_symbol + "." @punctuation.delimiter + (symbol) @field) + +(multi_symbol_method + ":" @punctuation.delimiter + (symbol) @method .) + +(list . (symbol) @function) +(list . (multi_symbol (symbol) @function .)) + +((symbol) @variable.builtin + (#match? @variable.builtin "^[$]")) + +(binding) @symbol + +[ + "fn" + "lambda" + "hashfn" + "#" +] @keyword.function + +(fn name: [ + (symbol) @function + (multi_symbol (symbol) @function .) +]) + +(lambda name: [ + (symbol) @function + (multi_symbol (symbol) @function .) +]) + +[ + "for" + "each" +] @repeat +((symbol) @repeat + (#any-of? @repeat + "while")) + +[ + "match" +] @conditional +((symbol) @conditional + (#any-of? @conditional + "if" "when")) + +[ + "global" + "local" + "let" + "set" + "var" + "where" + "or" +] @keyword +((symbol) @keyword + (#any-of? @keyword + "comment" "do" "doc" "eval-compiler" "lua" "macros" "quote" "tset" "values")) + +((symbol) @include + (#any-of? @include + "require" "require-macros" "import-macros" "include")) + +[ + "collect" + "icollect" + "accumulate" +] @function.macro + +((symbol) @function.macro + (#any-of? @function.macro + "->" "->>" "-?>" "-?>>" "?." "doto" "macro" "macrodebug" "partial" "pick-args" + "pick-values" "with-open")) + +; Lua builtins +((symbol) @constant.builtin + (#any-of? @constant.builtin + "arg" "_ENV" "_G" "_VERSION")) + +((symbol) @function.builtin + (#any-of? @function.builtin + "assert" "collectgarbage" "dofile" "error" "getmetatable" "ipairs" + "load" "loadfile" "next" "pairs" "pcall" "print" "rawequal" "rawget" + "rawlen" "rawset" "require" "select" "setmetatable" "tonumber" "tostring" + "type" "warn" "xpcall")) + +((symbol) @function.builtin + (#any-of? @function.builtin + "loadstring" "module" "setfenv" "unpack")) diff --git a/bundle/nvim-treesitter/queries/fennel/injections.scm b/bundle/nvim-treesitter/queries/fennel/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/fennel/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/fennel/locals.scm b/bundle/nvim-treesitter/queries/fennel/locals.scm new file mode 100644 index 000000000..3018732f9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fennel/locals.scm @@ -0,0 +1,26 @@ +[ + (program) + (fn) + (lambda) + (let) + (each) + (for) + (match) +] @scope + +( + (list . (symbol) @_special) @scope + (#any-of? @_special + "while" "if" "when" "do" "collect" "icollect" "accumulate") +) + +(fn name: (symbol) @definition.function + (#set! definition.function.scope "parent")) +(lambda name: (symbol) @definition.function + (#set! definition.function.scope "parent")) + +; TODO: use @definition.parameter for parameters +(binding (symbol) @definition.var) +(for_clause . (symbol) @definition.var) + +(symbol) @reference diff --git a/bundle/nvim-treesitter/queries/fish/folds.scm b/bundle/nvim-treesitter/queries/fish/folds.scm new file mode 100644 index 000000000..6075e2e04 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fish/folds.scm @@ -0,0 +1,8 @@ +[ + (function_definition) + (if_statement) + (switch_statement) + (for_statement) + (while_statement) + (begin_statement) +] @fold diff --git a/bundle/nvim-treesitter/queries/fish/highlights.scm b/bundle/nvim-treesitter/queries/fish/highlights.scm new file mode 100644 index 000000000..71c074630 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fish/highlights.scm @@ -0,0 +1,160 @@ +;; Fish highlighting + +;; Operators + +[ + "&&" + "||" + "|" + "&" + "=" + "!=" + ".." + "!" + (direction) + (stream_redirect) + (test_option) +] @operator + +[ + "not" + "and" + "or" +] @keyword.operator + +;; Conditionals + +(if_statement +[ + "if" + "end" +] @conditional) + +(switch_statement +[ + "switch" + "end" +] @conditional) + +(case_clause +[ + "case" +] @conditional) + +(else_clause +[ + "else" +] @conditional) + +(else_if_clause +[ + "else" + "if" +] @conditional) + +;; Loops/Blocks + +(while_statement +[ + "while" + "end" +] @repeat) + +(for_statement +[ + "for" + "end" +] @repeat) + +(begin_statement +[ + "begin" + "end" +] @repeat) + +;; Keywords + +[ + "in" + (break) + (continue) +] @keyword + +"return" @keyword.return + +;; Punctuation + +[ + "[" + "]" + "{" + "}" + "(" + ")" +] @punctuation.bracket + +"," @punctuation.delimiter + +;; Commands + +(command + argument: [ + (word) @parameter (#match? @parameter "^-") + ] +) + +(command_substitution_dollar "$" @punctuation.bracket) + +; non-bultin command names +(command name: (word) @function) + +; derived from builtin -n (fish 3.2.2) +(command + name: [ + (word) @function.builtin + (#any-of? @function.builtin "." ":" "_" "alias" "argparse" "bg" "bind" "block" "breakpoint" "builtin" "cd" "command" "commandline" "complete" "contains" "count" "disown" "echo" "emit" "eval" "exec" "exit" "fg" "functions" "history" "isatty" "jobs" "math" "printf" "pwd" "random" "read" "realpath" "set" "set_color" "source" "status" "string" "test" "time" "type" "ulimit" "wait") + ] +) + +(test_command "test" @function.builtin) + +;; Functions + +(function_definition ["function" "end"] @keyword.function) + +(function_definition + name: [ + (word) (concatenation) + ] +@function) + +(function_definition + option: [ + (word) + (concatenation (word)) + ] @parameter (#match? @parameter "^-") +) + +;; Strings + +[(double_quote_string) (single_quote_string)] @string +(escape_sequence) @string.escape + +;; Variables + +(variable_name) @variable +(variable_expansion) @constant + +;; Nodes + +[(integer) (float)] @number +(comment) @comment +(test_option) @string + +((word) @boolean +(#any-of? @boolean "true" "false")) + +;; Error + +(ERROR) @error + diff --git a/bundle/nvim-treesitter/queries/fish/indents.scm b/bundle/nvim-treesitter/queries/fish/indents.scm new file mode 100644 index 000000000..cf8d62658 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fish/indents.scm @@ -0,0 +1,16 @@ +[ + (function_definition) + (while_statement) + (for_statement) + (if_statement) + (begin_statement) + (switch_statement) +] @indent + +[ + (else_if_clause) + (else_clause) + "end" +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/fish/injections.scm b/bundle/nvim-treesitter/queries/fish/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/fish/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/fish/locals.scm b/bundle/nvim-treesitter/queries/fish/locals.scm new file mode 100644 index 000000000..a522c78dc --- /dev/null +++ b/bundle/nvim-treesitter/queries/fish/locals.scm @@ -0,0 +1,18 @@ +;; Scopes +[ + (command) + (function_definition) + (if_statement) + (for_statement) + (begin_statement) + (while_statement) + (switch_statement) +] @scope + +;; Definitions +(function_definition + name: (word) @definition.function) + +;; References +(variable_name) @reference +(word) @reference diff --git a/bundle/nvim-treesitter/queries/foam/folds.scm b/bundle/nvim-treesitter/queries/foam/folds.scm new file mode 100644 index 000000000..2e499c2e2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/foam/folds.scm @@ -0,0 +1,7 @@ +[ + (comment) + (list) + (dict_core) +] @fold + +(code (code_body)* @fold) diff --git a/bundle/nvim-treesitter/queries/foam/highlights.scm b/bundle/nvim-treesitter/queries/foam/highlights.scm new file mode 100644 index 000000000..86a3bf324 --- /dev/null +++ b/bundle/nvim-treesitter/queries/foam/highlights.scm @@ -0,0 +1,69 @@ +;; Comments +(comment) @comment + +;; Generic Key-value pairs and dictionary keywords +(key_value + keyword: (identifier) @function +) +(dict + key: (identifier) @type +) + +;; Macros +(macro + "$" @conditional + (prev_scope)* @conditional + (identifier)* @namespace +) + + +;; Directives +"#" @conditional +(preproc_call + directive: (identifier)* @conditional + argument: (identifier)* @namespace +) +( + (preproc_call + argument: (identifier)* @namespace + ) @conditional + (#match? @conditional "ifeq") +) +( + (preproc_call) @conditional + (#match? @conditional "(else|endif)") +) + +;; Literal numbers and strings +(number_literal) @float +(string_literal) @string +(escape_sequence) @string.escape + +;; Treat [m^2 s^-2] the same as if it was put in numbers format +(dimensions dimension: (identifier) @float) + +;; Punctuation +[ + "(" + ")" + "[" + "]" + "{" + "}" + "#{" + "#}" + "|-" + "-|" + "" + "$$" +] @punctuation.bracket + +[ + ";" +] @punctuation.delimiter + +;; Special identifiers +([(identifier) "on" "off" "true" "false" "yes" "no"] @constant.builtin +(#match? @constant.builtin "^(uniform|non-uniform|and|or|on|off|true|false|yes|no)$") +) diff --git a/bundle/nvim-treesitter/queries/foam/indents.scm b/bundle/nvim-treesitter/queries/foam/indents.scm new file mode 100644 index 000000000..033700c17 --- /dev/null +++ b/bundle/nvim-treesitter/queries/foam/indents.scm @@ -0,0 +1,11 @@ +[ + "{" + "}" +] @branch + +[(dict) (key_value)] @indent + + +[ + (comment) +] @ignore diff --git a/bundle/nvim-treesitter/queries/foam/injections.scm b/bundle/nvim-treesitter/queries/foam/injections.scm new file mode 100644 index 000000000..4afdb63b0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/foam/injections.scm @@ -0,0 +1,12 @@ +;; Pass code blocks to Cpp highlighter +(code (code_body) @cpp) + +;; Pass identifiers to Go highlighter (Cheating I know) +;;((identifier) @lua) + +;; Highlight regex syntax inside literal strings +((string_literal) @regex) + +;; Highlight PyFoam syntax as Python statements +(pyfoam_variable code_body: (_) @python) +(pyfoam_expression code_body: (_) @python) diff --git a/bundle/nvim-treesitter/queries/foam/locals.scm b/bundle/nvim-treesitter/queries/foam/locals.scm new file mode 100644 index 000000000..2abe743dd --- /dev/null +++ b/bundle/nvim-treesitter/queries/foam/locals.scm @@ -0,0 +1,6 @@ +(dict) @scope + +(dict key: (_) @definition.type) + +(key_value keyword: (_) @definition.parameter) +(key_value value: (macro (identifier)*)* @reference) diff --git a/bundle/nvim-treesitter/queries/fortran/folds.scm b/bundle/nvim-treesitter/queries/fortran/folds.scm new file mode 100644 index 000000000..a2edc64d3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fortran/folds.scm @@ -0,0 +1,11 @@ +;; by @oponkork +[ + (if_statement) + (where_statement) + (enum_statement) + (do_loop_statement) + (derived_type_definition) + (function) + (subroutine) + (interface) +] @fold diff --git a/bundle/nvim-treesitter/queries/fortran/highlights.scm b/bundle/nvim-treesitter/queries/fortran/highlights.scm new file mode 100644 index 000000000..6ef4867e7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fortran/highlights.scm @@ -0,0 +1,176 @@ +(identifier) @variable +(string_literal) @string +(number_literal) @number +(boolean_literal) @boolean +(comment) @comment + +[ + (intrinsic_type) + "allocatable" + "attributes" + "device" + "dimension" + "endtype" + "global" + "grid_global" + "host" + "import" + "in" + "inout" + "intent" + "optional" + "out" + "pointer" + "type" + "value" +] @type + +[ + "contains" + "private" + "public" +] @include + +[ + (none) + "implicit" +] @attribute + +[ + "endfunction" + "endprogram" + "endsubroutine" + "function" + "procedure" + "subroutine" +] @keyword.function + +[ + "bind" + "call" + "class" + "continue" + "cycle" + "endenum" + "endinterface" + "endmodule" + "endprogram" + "enum" + "enumerator" + "equivalence" + "exit" + "format" + "goto" + "include" + "interface" + "module" + "namelist" + "only" + "parameter" + "print" + "program" + "read" + "stop" + "use" + "write" + (default) + (procedure_qualifier) +] @keyword + +"return" @keyword.return + +[ + "else" + "elseif" + "endif" + "endwhere" + "if" + "then" + "where" +] @conditional + +[ + "do" + "enddo" + "forall" + "while" +] @repeat + +[ + "*" + "+" + "-" + "/" + "=" + "<" + ">" + "<=" + ">=" + "==" + "/=" +] @operator + +[ + "\\.and\\." + "\\.or\\." + "\\.lt\\." + "\\.gt\\." + "\\.ge\\." + "\\.le\\." + "\\.eq\\." + "\\.eqv\\." + "\\.neqv\\." +] @keyword.operator + + ;; Brackets + [ + "(" + ")" + "[" + "]" + "<<<" + ">>>" + ] @punctuation.bracket + + ;; Delimiter + [ + "::" + "," + "%" + ] @punctuation.delimiter + +(parameters + (identifier) @parameter) + +(program_statement + (name) @namespace) + +(module_statement + (name) @namespace) + +(function_statement + (name) @function) + +(subroutine_statement + (name) @function) + +(end_program_statement + (name) @namespace) + +(end_module_statement + (name) @namespace) + +(end_function_statement + (name) @function) + +(end_subroutine_statement + (name) @function) + +(subroutine_call + (name) @function) + +(keyword_argument + name: (identifier) @keyword) + +(derived_type_member_expression + (type_member) @property) diff --git a/bundle/nvim-treesitter/queries/fortran/indents.scm b/bundle/nvim-treesitter/queries/fortran/indents.scm new file mode 100644 index 000000000..67fa046de --- /dev/null +++ b/bundle/nvim-treesitter/queries/fortran/indents.scm @@ -0,0 +1,27 @@ +[ + (module) + (program) + (subroutine) + (function) + ; (interface) + (if_statement) + (do_loop_statement) + (where_statement) + (derived_type_definition) + (enum) +] @indent + +[ + (end_module_statement) + (end_program_statement) + (end_subroutine_statement) + (end_function_statement) + ; (end_interface_statement) + (end_if_statement) + (end_do_loop_statement) + (else_clause) + (elseif_clause) + (end_type_statement) + (end_enum_statement) + (end_where_statement) +] @branch diff --git a/bundle/nvim-treesitter/queries/fusion/folds.scm b/bundle/nvim-treesitter/queries/fusion/folds.scm new file mode 100644 index 000000000..179fc160b --- /dev/null +++ b/bundle/nvim-treesitter/queries/fusion/folds.scm @@ -0,0 +1,6 @@ +[ + (comment) + (block) + (afx_comment) + (afx_element) +] @fold diff --git a/bundle/nvim-treesitter/queries/fusion/highlights.scm b/bundle/nvim-treesitter/queries/fusion/highlights.scm new file mode 100644 index 000000000..7109ee651 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fusion/highlights.scm @@ -0,0 +1,117 @@ +(comment) @comment +(afx_comment) @comment + +; identifiers afx +(afx_opening_element + (afx_identifier) @tag) +(afx_closing_element + (afx_identifier) @tag) +(afx_element_self_closing + (afx_identifier) @tag) + +(afx_attribute + (afx_property_identifier) @tag.attribute) + +(afx_text) @text + +; identifiers eel + +(eel_object_path + (eel_path_identifier) @variable.builtin + (#match? @variable.builtin "^(this|props)$") +) + +(eel_object_path + (eel_path_identifier) @variable) + +(eel_object_pair + key: (eel_property_name) @property) + +(eel_method_name) @function + +(eel_parameter) @variable + +; identifiers fusion +; ----------- + +(path_part) @property +(meta_property) @attribute +(prototype_signature + "prototype" @keyword + +) +(include_statement + [ + "include" + ] @include + (source_file) @text.uri +) + +(namespace_declaration + "namespace" @keyword + (alias_namespace) @namespace) + +(type + name: (type_name) @type) + +; tokens +; ------ +(afx_opening_element + [ + "<" + ">" + ] @punctuation.bracket) + + (afx_closing_element + [ + "<" + ">" + "/" + ] @punctuation.bracket) + +(afx_element_self_closing + [ + "<" + "/>" + ] @punctuation.bracket) + +[ + (package_name) + (alias_namespace) +] @namespace + +(namespace_declaration "=" @operator) +(assignment "=" @operator) +(copy "<" @operator) +(deletion) @operator +(eel_binary_expression + operator: _ @operator) +(eel_not_expression + [ + "!" + "not" + ] @operator) + +(string) @string +(number) @number +(boolean) @boolean +(null) @constant.builtin + +(value_expression + start: _ @punctuation.special + end: _ @punctuation.special +) +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +[ + ":" + "." + "?" +] @punctuation.delimiter diff --git a/bundle/nvim-treesitter/queries/fusion/indents.scm b/bundle/nvim-treesitter/queries/fusion/indents.scm new file mode 100644 index 000000000..68c57d528 --- /dev/null +++ b/bundle/nvim-treesitter/queries/fusion/indents.scm @@ -0,0 +1,19 @@ +[ + (block) + (value_dsl) + (afx_element) + (afx_element_self_closing) + (eel_array) + (eel_object) +] @indent + + +(block end: _ @branch) +(value_dsl end: _ @branch) +(eel_array end: _ @branch) +(eel_object end: _ @branch) +[ + (afx_closing_element) +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/fusion/locals.scm b/bundle/nvim-treesitter/queries/fusion/locals.scm new file mode 100644 index 000000000..24dc57bbe --- /dev/null +++ b/bundle/nvim-treesitter/queries/fusion/locals.scm @@ -0,0 +1,21 @@ +;; Fusion base +(block) @scope + +(namespace_declaration + (alias_namespace) @definition.namespace) + +(property + (path (path_part) @definition.field)) + +(type + namespace: (package_name)? @definition.namespace + name: (type_name) @definition.type +) + +;; Eel Expressions +(eel_arrow_function) @scope +(eel_object) @scope + +(eel_parameter) @definition.parameter +(eel_object_pair + key: (eel_property_name) @definition.field) diff --git a/bundle/nvim-treesitter/queries/gdscript/highlights.scm b/bundle/nvim-treesitter/queries/gdscript/highlights.scm new file mode 100644 index 000000000..d86e4c1de --- /dev/null +++ b/bundle/nvim-treesitter/queries/gdscript/highlights.scm @@ -0,0 +1,125 @@ +;; Basic +(identifier) @variable +(name) @variable +(type) @type +(comment) @comment +(get_node) @string +(string) @string +(float) @float +(integer) @number +(null) @constant +(setter) @function +(getter) @function +(static_keyword) @keyword +(tool_statement) @keyword +(breakpoint_statement) @keyword +(inferred_type) @operator +[(true) (false)] @boolean + +(class_name_statement + (name) @type) @keyword + +(const_statement + (name) @constant) @keyword + +((identifier) @variable.builtin + (#eq? @variable.builtin "self")) + +;; Identifier naming conventions +((identifier) @type + (#lua-match? @type "^[A-Z]")) +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) +((identifier) @type + (#lua-match? @type "^[A-Z][A-Z_0-9]*$") . (_)) + +;; Functions +(constructor_definition) @constructor + +(function_definition + (name) @function (parameters + (identifier) @parameter)*) + +(typed_parameter + (identifier) @parameter) + +(default_parameter + (identifier) @parameter) + +(call + (identifier) @function) +(attribute_call + (identifier) @function) + +;; Alternations +["(" ")" "[" "]" "{" "}"] @punctuation.bracket + +["," "." ":"] @punctuation.delimiter + +["if" "elif" "else" "match"] @conditional + +["for" "while" "break" "continue"] @repeat + +[ + "~" + "-" + "*" + "/" + "%" + "+" + "-" + "<<" + ">>" + "&" + "^" + "|" + "<" + ">" + "==" + "!=" + ">=" + "<=" + "!" + "&&" + "||" + "=" + "+=" + "-=" + "*=" + "/=" + "%=" + "&=" + "|=" + "->" +] @operator + +[ + "and" + "as" + "in" + "is" + "not" + "or" +] @keyword.operator + +[ + "pass" + "class" + "class_name" + "extends" + "signal" + "func" + "enum" + "var" + "onready" + "export" + "setget" + "remote" + "master" + "puppet" + "remotesync" + "mastersync" + "puppetsync" +] @keyword + +"return" @keyword.return diff --git a/bundle/nvim-treesitter/queries/gdscript/indents.scm b/bundle/nvim-treesitter/queries/gdscript/indents.scm new file mode 100644 index 000000000..80b78234d --- /dev/null +++ b/bundle/nvim-treesitter/queries/gdscript/indents.scm @@ -0,0 +1,24 @@ +[ + (if_statement) + + (for_statement) + (while_statement) + + (parenthesized_expression) + + (function_definition) + (class_definition) +] @indent + +((argument_list) @aligned_indent + (#set! "delimiter" "()")) +((parameters) @aligned_indent + (#set! "delimiter" "()")) + +[ + ")" + "]" + "}" + (elif_clause) + (else_clause) +] @branch diff --git a/bundle/nvim-treesitter/queries/gdscript/injections.scm b/bundle/nvim-treesitter/queries/gdscript/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/gdscript/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/gdscript/locals.scm b/bundle/nvim-treesitter/queries/gdscript/locals.scm new file mode 100644 index 000000000..313af2aef --- /dev/null +++ b/bundle/nvim-treesitter/queries/gdscript/locals.scm @@ -0,0 +1,10 @@ +(function_definition) @definition.function + +[ + (extends_statement) + (variable_statement) + (expression_statement) + (if_statement) + (function_definition) + (body) +] @scope diff --git a/bundle/nvim-treesitter/queries/gleam/folds.scm b/bundle/nvim-treesitter/queries/gleam/folds.scm new file mode 100644 index 000000000..ff05eeb05 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gleam/folds.scm @@ -0,0 +1,11 @@ +; Folds +[ + (case) + (expression_group) + (function) + (public_function) + (anonymous_function) + (type_definition) + (public_type_definition) + (public_opaque_type_definition) +] @fold diff --git a/bundle/nvim-treesitter/queries/gleam/highlights.scm b/bundle/nvim-treesitter/queries/gleam/highlights.scm new file mode 100644 index 000000000..e1dc969ab --- /dev/null +++ b/bundle/nvim-treesitter/queries/gleam/highlights.scm @@ -0,0 +1,163 @@ +; Keywords +[ + "as" + "const" + "external" + "let" + "opaque" + "pub" + "todo" + "try" +] @keyword + +; Function Keywords +[ + "fn" + "type" +] @keyword.function + +; Imports +[ + "import" +] @include + +; Conditionals +[ + "case" + "if" +] @conditional + +; Exceptions +[ + "assert" +] @exception + +; Punctuation +[ + "(" + ")" + "<<" + ">>" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "," + "." +] @punctuation.delimiter + +[ + "#" +] @punctuation.special + +; Operators +[ + "%" + "&&" + "*" + "*." + "+" + "+." + "-" + "-." + "->" + ".." + "/" + "/." + ":" + "<" + "<." + "<=" + "<=." + "=" + "==" + ">" + ">." + ">=" + ">=." + "|>" + "||" +] @operator + +; Identifiers +(identifier) @variable + +; Comments +[ + (module_comment) + (statement_comment) + (comment) +] @comment + +; Unused Identifiers +[ + (discard) + (hole) +] @comment + +; Modules & Imports +(module ("/" @namespace)?) @namespace +(import alias: ((identifier) @namespace)?) +(remote_type_identifier module: (identifier) @namespace) +(unqualified_import name: (identifier) @function) + +; Strings +(string) @string + +; Bit Strings +(bit_string_segment) @string.special + +; Numbers +[ + (integer) + (float) + (bit_string_segment_option_unit) +] @number + +; Function Parameter Labels +(function_call arguments: (arguments (argument label: (label) @symbol ":" @symbol))) +(function_parameter label: (label)? @symbol name: (identifier) @parameter (":" @parameter)?) + +; Records +(record arguments: (arguments (argument label: (label) @property ":" @property)?)) +(record_pattern_argument label: (label) @property ":" @property) +(record_update_argument label: (label) @property ":" @property) +(field_access record: (identifier) @variable field: (label) @property) + +; Type Constructors +(data_constructor_argument label: (label) @property ":" @property) + +; Type Parameters +(type_parameter) @parameter + +; Types +((type_identifier) @type (#not-any-of? @type "True" "False")) + +; Booleans +((type_identifier) @boolean (#any-of? @boolean "True" "False")) + +; Type Variables +(type_var) @type + +; Tuples +(tuple_access index: (integer) @operator) + +; Functions +(function name: (identifier) @function) +(public_function name: (identifier) @function) +(function_call function: (identifier) @function) +(function_call function: (field_access field: (label) @function)) + +; External Functions +(public_external_function name: (identifier) @function) +(external_function name: (identifier) @function) +(external_function_body (string) @namespace . (string) @function) + +; Pipe Operator +(binary_expression operator: "|>" right: (identifier) @function) + +; Parser Errors +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/gleam/indents.scm b/bundle/nvim-treesitter/queries/gleam/indents.scm new file mode 100644 index 000000000..e2259b688 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gleam/indents.scm @@ -0,0 +1,33 @@ +; Gleam indents similar to Rust and JavaScript +[ + (assert) + (case) + (case_clause) + (constant) + (expression_group) + (external_function) + (function) + (import) + (let) + (list) + (public_constant) + (public_external_function) + (public_function) + (public_opaque_type_definition) + (public_type_alias) + (public_type_definition) + (todo) + (try) + (tuple) + (type_alias) + (type_definition) +] @indent + +[ + ")" + "]" + "}" +] @indent_end @branch + +; Gleam pipelines are not indented, but other binary expression chains are +((binary_expression operator: _ @_operator) @indent (#not-eq? @_operator "|>")) diff --git a/bundle/nvim-treesitter/queries/gleam/injections.scm b/bundle/nvim-treesitter/queries/gleam/injections.scm new file mode 100644 index 000000000..ed4c2de91 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gleam/injections.scm @@ -0,0 +1,6 @@ +; Comments +[ + (module_comment) + (statement_comment) + (comment) +] @comment diff --git a/bundle/nvim-treesitter/queries/gleam/locals.scm b/bundle/nvim-treesitter/queries/gleam/locals.scm new file mode 100644 index 000000000..8872e51f0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gleam/locals.scm @@ -0,0 +1,24 @@ +; Let Binding Definition +(let pattern: (identifier) @definition) + +; List Pattern Definitions +(list_pattern (identifier) @definition) +(list_pattern assign: (identifier) @definition) + +; Tuple Pattern Definition +(tuple_pattern (identifier) @definition) + +; Record Pattern Definition +(record_pattern_argument pattern: (identifier) @definition) + +; Function Parameter Definition +(function_parameter name: (identifier) @definition) + +; References +(identifier) @reference + +; Function Body Scope +(function_body) @scope + +; Case Scope +(case_clause) @scope diff --git a/bundle/nvim-treesitter/queries/glimmer/highlights.scm b/bundle/nvim-treesitter/queries/glimmer/highlights.scm new file mode 100644 index 000000000..b1b3f9141 --- /dev/null +++ b/bundle/nvim-treesitter/queries/glimmer/highlights.scm @@ -0,0 +1,88 @@ +; === Tag Names === + +; Tags that start with a lower case letter are HTML tags +; We'll also use this highlighting for named blocks (which start with `:`) +((tag_name) @tag + (#match? @tag "^(:)?[a-z]")) +; Tags that start with a capital letter are Glimmer components +((tag_name) @constructor + (#lua-match? @constructor "^[A-Z]")) + +(attribute_name) @property + +(string_literal) @string +(number_literal) @number +(boolean_literal) @boolean + +(concat_statement) @string + +; === Block Statements === + +; Highlight the brackets +(block_statement_start) @tag.delimiter +(block_statement_end) @tag.delimiter + +; Highlight `if`/`each`/`let` +(block_statement_start path: (identifier) @conditional) +(block_statement_end path: (identifier) @conditional) +((mustache_statement (identifier) @conditional) + (#lua-match? @conditional "else")) + +; == Mustache Statements === + +; Highlight the whole statement, to color brackets and separators +(mustache_statement) @tag.delimiter + +; An identifier in a mustache expression is a variable +((mustache_statement [ + (path_expression (identifier) @variable) + (identifier) @variable + ]) + (#not-match? @variable "yield|outlet|this|else")) +; As are arguments in a block statement +(block_statement_start argument: [ + (path_expression (identifier) @variable) + (identifier) @variable + ]) +; As is an identifier in a block param +(block_params (identifier) @variable) +; As are helper arguments +((helper_invocation argument: [ + (path_expression (identifier) @variable) + (identifier) @variable + ]) + (#not-match? @variable "this")) +; `this` should be highlighted as a built-in variable +((identifier) @variable.builtin + (#lua-match? @variable.builtin "this")) + +; If the identifier is just "yield" or "outlet", it's a keyword +((mustache_statement (identifier) @keyword) + (#any-of? @keyword "yield" "outlet")) + +; Helpers are functions +((helper_invocation helper: [ + (path_expression (identifier) @function) + (identifier) @function + ]) + (#not-match? @function "if|yield")) +((helper_invocation helper: (identifier) @conditional) + (#lua-match? @conditional "if")) +((helper_invocation helper: (identifier) @keyword) + (#lua-match? @keyword "yield")) + +(hash_pair key: (identifier) @property) + +(comment_statement) @comment + +(attribute_node "=" @operator) + +(block_params "as" @keyword) +(block_params "|" @operator) + +[ + "<" + ">" + "" +] @tag.delimiter diff --git a/bundle/nvim-treesitter/queries/glsl/folds.scm b/bundle/nvim-treesitter/queries/glsl/folds.scm new file mode 100644 index 000000000..a5a5208ca --- /dev/null +++ b/bundle/nvim-treesitter/queries/glsl/folds.scm @@ -0,0 +1 @@ +; inherits: c diff --git a/bundle/nvim-treesitter/queries/glsl/highlights.scm b/bundle/nvim-treesitter/queries/glsl/highlights.scm new file mode 100644 index 000000000..af2a049fb --- /dev/null +++ b/bundle/nvim-treesitter/queries/glsl/highlights.scm @@ -0,0 +1,37 @@ +; inherits: c + +[ + "in" + "out" + "inout" + "uniform" + "shared" + "layout" + "attribute" + "varying" + "buffer" + "coherent" + "readonly" + "writeonly" + "precision" + "highp" + "mediump" + "lowp" + "centroid" + "sample" + "patch" + "smooth" + "flat" + "noperspective" + "invariant" + "precise" +] @keyword + +"subroutine" @keyword.function + +(extension_storage_class) @attribute + +( + (identifier) @variable.builtin + (#match? @variable.builtin "^gl_") +) diff --git a/bundle/nvim-treesitter/queries/glsl/indents.scm b/bundle/nvim-treesitter/queries/glsl/indents.scm new file mode 100644 index 000000000..a5a5208ca --- /dev/null +++ b/bundle/nvim-treesitter/queries/glsl/indents.scm @@ -0,0 +1 @@ +; inherits: c diff --git a/bundle/nvim-treesitter/queries/glsl/injections.scm b/bundle/nvim-treesitter/queries/glsl/injections.scm new file mode 100644 index 000000000..7d3323b16 --- /dev/null +++ b/bundle/nvim-treesitter/queries/glsl/injections.scm @@ -0,0 +1,3 @@ +(preproc_arg) @glsl + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/glsl/locals.scm b/bundle/nvim-treesitter/queries/glsl/locals.scm new file mode 100644 index 000000000..a5a5208ca --- /dev/null +++ b/bundle/nvim-treesitter/queries/glsl/locals.scm @@ -0,0 +1 @@ +; inherits: c diff --git a/bundle/nvim-treesitter/queries/go/folds.scm b/bundle/nvim-treesitter/queries/go/folds.scm new file mode 100644 index 000000000..c79d45720 --- /dev/null +++ b/bundle/nvim-treesitter/queries/go/folds.scm @@ -0,0 +1,13 @@ +[ + (const_declaration) + (expression_switch_statement) + (for_statement) + (func_literal) + (function_declaration) + (if_statement) + (import_declaration) + (method_declaration) + (type_declaration) + (var_declaration) +] @fold + diff --git a/bundle/nvim-treesitter/queries/go/highlights.scm b/bundle/nvim-treesitter/queries/go/highlights.scm new file mode 100644 index 000000000..07c788ec7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/go/highlights.scm @@ -0,0 +1,201 @@ +;; Forked from tree-sitter-go +;; Copyright (c) 2014 Max Brunsfeld (The MIT License) + +;; +; Identifiers + +(type_identifier) @type +(field_identifier) @property +(identifier) @variable +(package_identifier) @namespace + +(parameter_declaration (identifier) @parameter) +(variadic_parameter_declaration (identifier) @parameter) + +((identifier) @constant + (#eq? @constant "_")) + +((identifier) @constant + (#vim-match? @constant "^[A-Z][A-Z\\d_]+$")) + +(const_spec + name: (identifier) @constant) + +; Function calls + +(call_expression + function: (identifier) @function) + +(call_expression + function: (selector_expression + field: (field_identifier) @method)) + +; Function definitions + +(function_declaration + name: (identifier) @function) + +(method_declaration + name: (field_identifier) @method) + +; Operators + +[ + "--" + "-" + "-=" + ":=" + "!" + "!=" + "..." + "*" + "*" + "*=" + "/" + "/=" + "&" + "&&" + "&=" + "%" + "%=" + "^" + "^=" + "+" + "++" + "+=" + "<-" + "<" + "<<" + "<<=" + "<=" + "=" + "==" + ">" + ">=" + ">>" + ">>=" + "|" + "|=" + "||" + "~" +] @operator + +; Keywords + +[ + "break" + "chan" + "const" + "continue" + "default" + "defer" + "go" + "goto" + "interface" + "map" + "range" + "select" + "struct" + "type" + "var" + "fallthrough" +] @keyword + +"func" @keyword.function +"return" @keyword.return + +"for" @repeat + +[ + "import" + "package" +] @include + +[ + "else" + "case" + "switch" + "if" + ] @conditional + + +;; Builtin types + +((type_identifier) @type.builtin + (#any-of? @type.builtin + "bool" + "byte" + "complex128" + "complex64" + "error" + "float32" + "float64" + "int" + "int16" + "int32" + "int64" + "int8" + "rune" + "string" + "uint" + "uint16" + "uint32" + "uint64" + "uint8" + "uintptr")) + + +;; Builtin functions + +((identifier) @function.builtin + (#any-of? @function.builtin + "append" + "cap" + "close" + "complex" + "copy" + "delete" + "imag" + "len" + "make" + "new" + "panic" + "print" + "println" + "real" + "recover")) + + +; Delimiters + +"." @punctuation.delimiter +"," @punctuation.delimiter +":" @punctuation.delimiter +";" @punctuation.delimiter + +"(" @punctuation.bracket +")" @punctuation.bracket +"{" @punctuation.bracket +"}" @punctuation.bracket +"[" @punctuation.bracket +"]" @punctuation.bracket + + +; Literals + +(interpreted_string_literal) @string +(raw_string_literal) @string +(rune_literal) @string +(escape_sequence) @string.escape + +(int_literal) @number +(float_literal) @float +(imaginary_literal) @number + +(true) @boolean +(false) @boolean +(nil) @constant.builtin + +(comment) @comment + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/go/indents.scm b/bundle/nvim-treesitter/queries/go/indents.scm new file mode 100644 index 000000000..f274ffb11 --- /dev/null +++ b/bundle/nvim-treesitter/queries/go/indents.scm @@ -0,0 +1,23 @@ +[ + (import_declaration) + (const_declaration) + (var_declaration) + (type_declaration) + (composite_literal) + (func_literal) + (literal_value) + (expression_case) + (default_case) + (block) + (call_expression) + (parameter_list) +] @indent + +[ + "case" + "}" +] @branch + +(parameter_list ")" @branch) + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/go/injections.scm b/bundle/nvim-treesitter/queries/go/injections.scm new file mode 100644 index 000000000..2391c1a7a --- /dev/null +++ b/bundle/nvim-treesitter/queries/go/injections.scm @@ -0,0 +1,6 @@ +((comment) @c (#offset! @c 1 0 0 -2) + (import_declaration + (import_spec path: (interpreted_string_literal) @_import_path)) + (#eq? @_import_path "\"C\"")) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/go/locals.scm b/bundle/nvim-treesitter/queries/go/locals.scm new file mode 100644 index 000000000..1de546c7c --- /dev/null +++ b/bundle/nvim-treesitter/queries/go/locals.scm @@ -0,0 +1,79 @@ +( + (function_declaration + name: (identifier) @definition.function) ;@function +) + +( + (method_declaration + name: (field_identifier) @definition.method); @method +) + +(short_var_declaration + left: (expression_list + (identifier) @definition.var)) + +(var_spec + name: (identifier) @definition.var) + +(parameter_declaration (identifier) @definition.var) +(variadic_parameter_declaration (identifier) @definition.var) + +(for_statement + (range_clause + left: (expression_list + (identifier) @definition.var))) + +(const_declaration + (const_spec + name: (identifier) @definition.var)) + +(type_declaration + (type_spec + name: (type_identifier) @definition.type)) + +;; reference +(identifier) @reference +(type_identifier) @reference +(field_identifier) @reference +((package_identifier) @reference + (set! reference.kind "namespace")) + +(package_clause + (package_identifier) @definition.namespace) + +(import_spec_list + (import_spec + name: (package_identifier) @definition.namespace)) + +;; Call references +((call_expression + function: (identifier) @reference) + (set! reference.kind "call" )) + +((call_expression + function: (selector_expression + field: (field_identifier) @reference)) + (set! reference.kind "call" )) + + +((call_expression + function: (parenthesized_expression + (identifier) @reference)) + (set! reference.kind "call" )) + +((call_expression + function: (parenthesized_expression + (selector_expression + field: (field_identifier) @reference))) + (set! reference.kind "call" )) + +;; Scopes + +(func_literal) @scope +(source_file) @scope +(function_declaration) @scope +(if_statement) @scope +(block) @scope +(expression_switch_statement) @scope +(for_statement) @scope +(method_declaration) @scope diff --git a/bundle/nvim-treesitter/queries/godot_resource/folds.scm b/bundle/nvim-treesitter/queries/godot_resource/folds.scm new file mode 100644 index 000000000..943e0628f --- /dev/null +++ b/bundle/nvim-treesitter/queries/godot_resource/folds.scm @@ -0,0 +1,3 @@ +[ + (section) +] @fold diff --git a/bundle/nvim-treesitter/queries/godot_resource/highlights.scm b/bundle/nvim-treesitter/queries/godot_resource/highlights.scm new file mode 100644 index 000000000..005ddaacb --- /dev/null +++ b/bundle/nvim-treesitter/queries/godot_resource/highlights.scm @@ -0,0 +1,28 @@ +(identifier) @type.builtin + +(attribute (identifier) @property) +(property (path) @property) +(constructor (identifier) @constructor) + +(string) @string +(integer) @number +(float) @float + +(true) @constant.builtin +(false) @constant.builtin + +[ + "[" + "]" +] @tag.delimiter + +[ + "(" + ")" + "{" + "}" +] @punctuation.bracket + +"=" @operator + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/godot_resource/locals.scm b/bundle/nvim-treesitter/queries/godot_resource/locals.scm new file mode 100644 index 000000000..1dce04f0c --- /dev/null +++ b/bundle/nvim-treesitter/queries/godot_resource/locals.scm @@ -0,0 +1,3 @@ +[ + (section) +] @scope diff --git a/bundle/nvim-treesitter/queries/gomod/highlights.scm b/bundle/nvim-treesitter/queries/gomod/highlights.scm new file mode 100644 index 000000000..63e1f0128 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gomod/highlights.scm @@ -0,0 +1,17 @@ +[ + "require" + "replace" + "go" + "exclude" + "retract" + "module" +] @keyword + +"=>" @operator + +(comment) @comment + +[ +(version) +(go_version) +] @string diff --git a/bundle/nvim-treesitter/queries/gomod/injections.scm b/bundle/nvim-treesitter/queries/gomod/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/gomod/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/gowork/highlights.scm b/bundle/nvim-treesitter/queries/gowork/highlights.scm new file mode 100644 index 000000000..9c84bcc44 --- /dev/null +++ b/bundle/nvim-treesitter/queries/gowork/highlights.scm @@ -0,0 +1,14 @@ +[ + "replace" + "go" + "use" +] @keyword + +"=>" @operator + +(comment) @comment + +[ +(version) +(go_version) +] @string diff --git a/bundle/nvim-treesitter/queries/gowork/injections.scm b/bundle/nvim-treesitter/queries/gowork/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/gowork/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/graphql/highlights.scm b/bundle/nvim-treesitter/queries/graphql/highlights.scm new file mode 100644 index 000000000..cedf8e113 --- /dev/null +++ b/bundle/nvim-treesitter/queries/graphql/highlights.scm @@ -0,0 +1,164 @@ +; Types +;------ + +(scalar_type_definition + (name) @type) + +(object_type_definition + (name) @type) + +(interface_type_definition + (name) @type) + +(union_type_definition + (name) @type) + +(enum_type_definition + (name) @type) + +(input_object_type_definition + (name) @type) + +(directive_definition + (name) @type) + +(directive_definition + "@" @type) + +(scalar_type_extension + (name) @type) + +(object_type_extension + (name) @type) + +(interface_type_extension + (name) @type) + +(union_type_extension + (name) @type) + +(enum_type_extension + (name) @type) + +(input_object_type_extension + (name) @type) + +(named_type + (name) @type) + +(directive) @type + +; Properties +;----------- + +(field + (name) @property) + +(field + (alias + (name) @property)) + +(field_definition + (name) @property) + +(object_value + (object_field + (name) @property)) + +(enum_value + (name) @property) + +; Variable Definitions and Arguments +;----------------------------------- + +(operation_definition + (name) @variable) + +(fragment_name + (name) @variable) + +(input_fields_definition + (input_value_definition + (name) @parameter)) + +(argument + (name) @parameter) + +(arguments_definition + (input_value_definition + (name) @parameter)) + +(variable_definition + (variable) @parameter) + +(argument + (value + (variable) @variable)) + +; Constants +;---------- + +(string_value) @string + +(int_value) @number + +(float_value) @float + +(boolean_value) @boolean + +; Literals +;--------- + +(description + (string_value) @comment) + +(comment) @comment + +(directive_location + (executable_directive_location) @type.builtin) + +(directive_location + (type_system_directive_location) @type.builtin) + +; Keywords +;---------- + +[ + "query" + "mutation" + "subscription" + "fragment" + "scalar" + "type" + "interface" + "union" + "enum" + "input" + "extend" + "directive" + "schema" + "on" + "repeatable" + "implements" +] @keyword + +; Punctuation +;------------ + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +"=" @operator + +"|" @punctuation.delimiter +"&" @punctuation.delimiter +":" @punctuation.delimiter + +"..." @punctuation.special +"!" @punctuation.special diff --git a/bundle/nvim-treesitter/queries/graphql/indents.scm b/bundle/nvim-treesitter/queries/graphql/indents.scm new file mode 100644 index 000000000..0f222b6d4 --- /dev/null +++ b/bundle/nvim-treesitter/queries/graphql/indents.scm @@ -0,0 +1,9 @@ +[ + (definition) + (selection) +] @indent + +[ + "{" + "}" +] @branch diff --git a/bundle/nvim-treesitter/queries/graphql/injections.scm b/bundle/nvim-treesitter/queries/graphql/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/graphql/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/hack/highlights.scm b/bundle/nvim-treesitter/queries/hack/highlights.scm new file mode 100644 index 000000000..9ec38266a --- /dev/null +++ b/bundle/nvim-treesitter/queries/hack/highlights.scm @@ -0,0 +1,302 @@ +(variable) @variable +(identifier) @variable +((variable) @variable.builtin + (#eq? @variable.builtin "$this")) + +(braced_expression) @none + +(scoped_identifier + (qualified_identifier + (identifier) @type)) + +(comment) @comment +(heredoc) @comment + +[ + "function" +] @keyword.function + +[ + "async" + "await" + "type" + "interface" + "implements" + "class" + "protected" + "private" + "public" + "using" + "namespace" + "attribute" + "const" + (xhp_modifier) + (final_modifier) + "extends" + "insteadof" +] @keyword + +"use" @include + +[ + "new" + "print" + "echo" + "newtype" + "clone" + "as" +] @keyword.operator + +[ + "return" +] @keyword.return + +[ + "shape" + "tuple" + (array_type) + "bool" + "float" + "int" + "string" + "arraykey" + "void" + "nonnull" + "mixed" + "dynamic" + "noreturn" +] @type.builtin + +[ + (null) +] @constant.builtin + +[ + (true) + (false) +] @boolean + +(type_specifier) @type +(new_expression + (_) @type) + +(alias_declaration "newtype" . (_) @type) +(alias_declaration "type" . (_) @type) + +(class_declaration + name: (identifier) @type) +(type_parameter + name: (identifier) @type) + +(collection + (qualified_identifier + (identifier) @type .)) + +(attribute_modifier) @attribute +[ + "@required" + "@lateinit" +] @attribute + +[ + "=" + "??=" + ".=" + "|=" + "^=" + "&=" + "<<=" + ">>=" + "+=" + "-=" + "*=" + "/=" + "%=" + "**=" + + "==>" + "|>" + "??" + "||" + "&&" + "|" + "^" + "&" + "==" + "!=" + "===" + "!==" + "<" + ">" + "<=" + ">=" + "<=>" + "<<" + ">>" + "->" + "+" + "-" + "." + "*" + "/" + "%" + "**" + + "++" + "--" + "!" + + "?:" + + "=" + "??=" + ".=" + "|=" + "^=" + "&=" + "<<=" + ">>=" + "+=" + "-=" + "*=" + "/=" + "%=" + "**=" + "=>" + + ;; type modifiers + "@" + "?" + "~" +] @operator + +(integer) @number +(float) @float + +(parameter + (variable) @parameter) + +(call_expression + function: (qualified_identifier (identifier) @function .)) + +(call_expression + function: (scoped_identifier (identifier) @function .)) + +(call_expression + function: (selection_expression + (qualified_identifier (identifier) @method .))) + +(qualified_identifier + (_) @namespace . + (_)) + +(use_statement + (qualified_identifier + (_) @namespace .) + (use_clause)) + +(use_statement + (use_type "namespace") + (use_clause + (qualified_identifier + (identifier) @namespace .) + alias: (identifier)? @namespace)) + +(use_statement + (use_type "const") + (use_clause + (qualified_identifier + (identifier) @constant .) + alias: (identifier)? @constant)) + +(use_statement + (use_type "function") + (use_clause + (qualified_identifier + (identifier) @function .) + alias: (identifier)? @function)) + +(use_statement + (use_type "type") + (use_clause + (qualified_identifier + (identifier) @type .) + alias: (identifier)? @type)) + +(use_clause + (use_type "namespace") + (qualified_identifier + (_) @namespace .) + alias: (identifier)? @namespace) + +(use_clause + (use_type "function") + (qualified_identifier + (_) @function .) + alias: (identifier)? @function) + +(use_clause + (use_type "const") + (qualified_identifier + (_) @constant .) + alias: (identifier)? @constant) + +(use_clause + (use_type "type") + (qualified_identifier + (_) @type .) + alias: (identifier)? @type) + +(function_declaration + name: (identifier) @function) +(method_declaration + name: (identifier) @method) + +(type_arguments + [ "<" ">" ] @punctuation.bracket) +[ "(" ")" "[" "]" "{" "}" "<<" ">>"] @punctuation.bracket + +(xhp_open + [ "<" ">" ] @tag.delimiter) +(xhp_close + [ "" ] @tag.delimiter) + +[ "." ";" "::" ":" "," ] @punctuation.delimiter + +(ternary_expression + ["?" ":"] @conditional) + +[ + "if" + "else" + "elseif" + "switch" + "case" +] @conditional + +[ + "try" + "catch" + "finally" +] @exception + +[ + "for" + "while" + "foreach" + "do" + "continue" + "break" +] @repeat + +[ + (string) + (xhp_string) +] @string + +[ + (xhp_open) + (xhp_close) +] @tag + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/haskell/highlights.scm b/bundle/nvim-treesitter/queries/haskell/highlights.scm new file mode 100644 index 000000000..03744f5d6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/haskell/highlights.scm @@ -0,0 +1,139 @@ +;; ---------------------------------------------------------------------------- +;; Literals and comments + +(integer) @number +(exp_negation) @number +(exp_literal (float)) @float +(char) @character +(string) @string + +(con_unit) @symbol ; unit, as in () + +(comment) @comment + + +;; ---------------------------------------------------------------------------- +;; Punctuation + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +[ + (comma) + ";" +] @punctuation.delimiter + + +;; ---------------------------------------------------------------------------- +;; Keywords, operators, includes + +[ + "forall" + "∀" +] @repeat + +(pragma) @constant.macro + +[ + "if" + "then" + "else" + "case" + "of" +] @conditional + +[ + "import" + "qualified" + "module" +] @include + +[ + (operator) + (constructor_operator) + (type_operator) + (tycon_arrow) + (qualified_module) ; grabs the `.` (dot), ex: import System.IO + (all_names) + (wildcard) + "=" + "|" + "::" + "=>" + "->" + "<-" + "\\" + "`" + "@" +] @operator + +(module) @namespace + +[ + (where) + "let" + "in" + "class" + "instance" + "data" + "newtype" + "family" + "type" + "as" + "hiding" + "deriving" + "via" + "stock" + "anyclass" + "do" + "mdo" + "rec" + "infix" + "infixl" + "infixr" +] @keyword + + +;; ---------------------------------------------------------------------------- +;; Functions and variables + +(variable) @variable +(pat_wildcard) @variable + +(signature name: (variable) @type) +(function + name: (variable) @function + patterns: (patterns)) +((signature (fun)) . (function (variable) @function)) +((signature (context (fun))) . (function (variable) @function)) +((signature (forall (context (fun)))) . (function (variable) @function)) + +(exp_infix (variable) @operator) ; consider infix functions as operators + +(exp_apply . (exp_name (variable) @function)) +(exp_apply . (exp_name (qualified_variable (variable) @function))) + + +;; ---------------------------------------------------------------------------- +;; Types + +(type) @type +(type_variable) @type + +(constructor) @constructor + +; True or False +((constructor) @_bool (#match? @_bool "(True|False)")) @boolean + + +;; ---------------------------------------------------------------------------- +;; Quasi-quotes + +(quoter) @function +; Highlighting of quasiquote_body is handled by injections.scm diff --git a/bundle/nvim-treesitter/queries/haskell/injections.scm b/bundle/nvim-treesitter/queries/haskell/injections.scm new file mode 100644 index 000000000..0b231a7a1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/haskell/injections.scm @@ -0,0 +1,58 @@ +;; ----------------------------------------------------------------------------- +;; General language injection + +(quasiquote + ((quoter) @language) + ((quasiquote_body) @content) +) + +(comment) @comment + +;; ----------------------------------------------------------------------------- +;; shakespeare library +;; NOTE: doesn't support templating + +; TODO: add once CoffeeScript parser is added +; ; CoffeeScript: Text.Coffee +; (quasiquote +; (quoter) @_name +; (#eq? @_name "coffee") +; ((quasiquote_body) @coffeescript) + +; CSS: Text.Cassius, Text.Lucius +(quasiquote + (quoter) @_name + (#any-of? @_name "cassius" "lucius") + ((quasiquote_body) @css) +) + +; HTML: Text.Hamlet +(quasiquote + (quoter) @_name + (#any-of? @_name "shamlet" "xshamlet" "hamlet" "xhamlet" "ihamlet") + ((quasiquote_body) @html) +) + +; JS: Text.Julius +(quasiquote + (quoter) @_name + (#any-of? @_name "js" "julius") + ((quasiquote_body) @javascript) +) + +; TS: Text.TypeScript +(quasiquote + (quoter) @_name + (#any-of? @_name "tsc" "tscJSX") + ((quasiquote_body) @typescript) +) + + +;; ----------------------------------------------------------------------------- +;; HSX + +(quasiquote + (quoter) @_name + (#eq? @_name "hsx") + ((quasiquote_body) @html) +) diff --git a/bundle/nvim-treesitter/queries/hcl/folds.scm b/bundle/nvim-treesitter/queries/hcl/folds.scm new file mode 100644 index 000000000..cb20b2aa8 --- /dev/null +++ b/bundle/nvim-treesitter/queries/hcl/folds.scm @@ -0,0 +1,6 @@ +[ + (comment) + (block) + (heredoc_template) + (object) +] @fold diff --git a/bundle/nvim-treesitter/queries/hcl/highlights.scm b/bundle/nvim-treesitter/queries/hcl/highlights.scm new file mode 100644 index 000000000..67e85cb61 --- /dev/null +++ b/bundle/nvim-treesitter/queries/hcl/highlights.scm @@ -0,0 +1,102 @@ +; highlights.scm + +[ + "!" + "\*" + "/" + "%" + "\+" + "-" + ">" + ">=" + "<" + "<=" + "==" + "!=" + "&&" + "||" +] @operator + +[ + "{" + "}" + "[" + "]" + "(" + ")" +] @punctuation.bracket + +[ + "." + ".*" + "," + "[*]" +] @punctuation.delimiter + +[ + (ellipsis) + "\?" + "=>" +] @punctuation.special + +[ + ":" + "=" +] @none + +[ + "for" + "endfor" + "in" +] @repeat + +[ + "if" + "else" + "endif" +] @conditional + +[ + (quoted_template_start) ; " + (quoted_template_end); " + (template_literal) ; non-interpolation/directive content +] @string + +[ + (heredoc_identifier) ; <" + "--%>" + "-->" + "/>" + "" + "{" + "}" +] @tag.delimiter + +; HEEx operators are highlighted as such +"=" @operator + +; HEEx inherits the DOCTYPE tag from HTML +(doctype) @constant + +; HEEx comments are highlighted as such +(comment) @comment + +; HEEx text content is treated as markup +(text) @text + +; Tree-sitter parser errors +(ERROR) @error + +; HEEx tags and slots are highlighted as HTML +[ + (tag_name) + (slot_name) +] @tag + +; HEEx attributes are highlighted as HTML attributes +(attribute_name) @tag.attribute +[ + (attribute_value) + (quoted_attribute_value) +] @string + +; HEEx components are highlighted as modules and function calls +(component_name [ + (module) @type + (function) @function + "." @punctuation.delimiter +]) diff --git a/bundle/nvim-treesitter/queries/heex/indents.scm b/bundle/nvim-treesitter/queries/heex/indents.scm new file mode 100644 index 000000000..99fc693dc --- /dev/null +++ b/bundle/nvim-treesitter/queries/heex/indents.scm @@ -0,0 +1,20 @@ +; HEEx tags, components, and slots indent like HTML +[ + (component) + (slot) + (tag) +] @indent + +; Dedent at the end of each tag, component, and slot +[ + (end_component) + (end_slot) + (end_tag) +] @branch @dedent + +; Self-closing tags and components should not change +; indentation level of sibling nodes +[ + (self_closing_component) + (self_closing_tag) +] @auto diff --git a/bundle/nvim-treesitter/queries/heex/injections.scm b/bundle/nvim-treesitter/queries/heex/injections.scm new file mode 100644 index 000000000..fffd1dc53 --- /dev/null +++ b/bundle/nvim-treesitter/queries/heex/injections.scm @@ -0,0 +1,11 @@ +; HEEx directives can span multiple interpolated lines of Elixir +(directive [ + (expression_value) + (partial_expression_value) +] @elixir @combined) + +; HEEx Elixir expressions are always within a tag or component +(expression (expression_value) @elixir) + +; HEEx comments +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/heex/locals.scm b/bundle/nvim-treesitter/queries/heex/locals.scm new file mode 100644 index 000000000..4371bc979 --- /dev/null +++ b/bundle/nvim-treesitter/queries/heex/locals.scm @@ -0,0 +1,13 @@ +; HEEx tags, components, and slots are references +[ + (component_name) + (slot_name) + (tag_name) +] @reference + +; Create a new scope within each HEEx tag, component, and slot +[ + (component) + (slot) + (tag) +] @scope diff --git a/bundle/nvim-treesitter/queries/help/highlights.scm b/bundle/nvim-treesitter/queries/help/highlights.scm new file mode 100644 index 000000000..e2fb65533 --- /dev/null +++ b/bundle/nvim-treesitter/queries/help/highlights.scm @@ -0,0 +1,14 @@ +(headline) @text.title +(column_heading) @text.title +(tag + "*" @conceal (#set! conceal "") + name: (_) @label) +(option + "'" @conceal (#set! conceal "") + name: (_) @text.literal) +(hotlink + "|" @conceal (#set! conceal "") + destination: (_) @text.uri) +(backtick + "`" @conceal (#set! conceal "") + content: (_) @string) diff --git a/bundle/nvim-treesitter/queries/hjson/folds.scm b/bundle/nvim-treesitter/queries/hjson/folds.scm new file mode 100644 index 000000000..41269219e --- /dev/null +++ b/bundle/nvim-treesitter/queries/hjson/folds.scm @@ -0,0 +1 @@ +; inherits: json diff --git a/bundle/nvim-treesitter/queries/hjson/highlights.scm b/bundle/nvim-treesitter/queries/hjson/highlights.scm new file mode 100644 index 000000000..c8eed139f --- /dev/null +++ b/bundle/nvim-treesitter/queries/hjson/highlights.scm @@ -0,0 +1,16 @@ +(true) @boolean +(false) @boolean +(null) @constant.builtin +(number) @number +(pair key: (string) @label) +(pair value: (string) @string) +(array (string) @string) +; (string_content (escape_sequence) @string.escape) +(ERROR) @error +; "," @punctuation.delimiter +"[" @punctuation.bracket +"]" @punctuation.bracket +"{" @punctuation.bracket +"}" @punctuation.bracket + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/hjson/indents.scm b/bundle/nvim-treesitter/queries/hjson/indents.scm new file mode 100644 index 000000000..26a42eeda --- /dev/null +++ b/bundle/nvim-treesitter/queries/hjson/indents.scm @@ -0,0 +1,3 @@ +; inherits: json + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/hjson/injections.scm b/bundle/nvim-treesitter/queries/hjson/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/hjson/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/hjson/locals.scm b/bundle/nvim-treesitter/queries/hjson/locals.scm new file mode 100644 index 000000000..41269219e --- /dev/null +++ b/bundle/nvim-treesitter/queries/hjson/locals.scm @@ -0,0 +1 @@ +; inherits: json diff --git a/bundle/nvim-treesitter/queries/hocon/highlights.scm b/bundle/nvim-treesitter/queries/hocon/highlights.scm new file mode 100644 index 000000000..3fb8249a9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/hocon/highlights.scm @@ -0,0 +1,37 @@ +(comment) @comment + +(null) @constant.builtin +[ (true) (false) ] @boolean +(number) @number +(unit) @keyword +(string) @string +(multiline_string) @string +(string (escape_sequence) @string.escape) +(unquoted_string) @string + +[ "url" + "file" + "classpath" + "required" +] @keyword + +(include "include" @include) + +(substitution ["${" "${?" "}"] @punctuation.special) +(substitution (_) @field) + +(path (_) @field) +(value [":" "=" "+=" ] @operator) + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ "," ] @punctuation.delimiter +(unquoted_path "." @punctuation.delimiter) + diff --git a/bundle/nvim-treesitter/queries/hocon/injections.scm b/bundle/nvim-treesitter/queries/hocon/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/hocon/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/html/folds.scm b/bundle/nvim-treesitter/queries/html/folds.scm new file mode 100644 index 000000000..69b57eac5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/html/folds.scm @@ -0,0 +1,5 @@ +[ + (element) + (style_element) + (script_element) +] @fold diff --git a/bundle/nvim-treesitter/queries/html/highlights.scm b/bundle/nvim-treesitter/queries/html/highlights.scm new file mode 100644 index 000000000..6da261c0a --- /dev/null +++ b/bundle/nvim-treesitter/queries/html/highlights.scm @@ -0,0 +1,5 @@ +; inherits: html_tags + +(doctype) @constant + +"" + "" +] @tag.delimiter + +"=" @operator diff --git a/bundle/nvim-treesitter/queries/html_tags/indents.scm b/bundle/nvim-treesitter/queries/html_tags/indents.scm new file mode 100644 index 000000000..7b9d6afe1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/html_tags/indents.scm @@ -0,0 +1,11 @@ +[ + (element) +] @indent + +[ + (end_tag) + ">" + "/>" +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/html_tags/injections.scm b/bundle/nvim-treesitter/queries/html_tags/injections.scm new file mode 100644 index 000000000..80c0d2a4a --- /dev/null +++ b/bundle/nvim-treesitter/queries/html_tags/injections.scm @@ -0,0 +1,7 @@ +((style_element + (raw_text) @css)) + +((script_element + (raw_text) @javascript)) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/http/highlights.scm b/bundle/nvim-treesitter/queries/http/highlights.scm new file mode 100644 index 000000000..f5a08813b --- /dev/null +++ b/bundle/nvim-treesitter/queries/http/highlights.scm @@ -0,0 +1,19 @@ +; inherits: json + +; Display errors +(ERROR) @error + +; Comments +(comment) @comment + +(request + method: (method) @keyword + url: (url) @text.uri) + +(header + name: (name) @constant + value: (value)) + +; rest.nvim Neovim plugin specific features +(external_body + json_file: (json_file) @text.uri) @keyword diff --git a/bundle/nvim-treesitter/queries/http/injections.scm b/bundle/nvim-treesitter/queries/http/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/http/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/java/highlights.scm b/bundle/nvim-treesitter/queries/java/highlights.scm new file mode 100644 index 000000000..dfac3aadf --- /dev/null +++ b/bundle/nvim-treesitter/queries/java/highlights.scm @@ -0,0 +1,260 @@ +; CREDITS @maxbrunsfeld (maxbrunsfeld@gmail.com) + +; Variables + +(identifier) @variable + +; Methods + +(method_declaration + name: (identifier) @method) +(method_invocation + name: (identifier) @method) + +(super) @function.builtin + +; Parameters +(formal_parameter + name: (identifier) @parameter) +(catch_formal_parameter + name: (identifier) @parameter) + +(spread_parameter + (variable_declarator) @parameter) ; int... foo + +;; Lambda parameter +(inferred_parameters (identifier) @parameter) ; (x,y) -> ... +(lambda_expression + parameters: (identifier) @parameter) ; x -> ... + + +; Annotations + + +(annotation + name: (identifier) @attribute) +(marker_annotation + name: (identifier) @attribute) + + +; Operators + +[ +"@" +"+" +":" +"++" +"-" +"--" +"&" +"&&" +"|" +"||" +"!=" +"==" +"*" +"/" +"%" +"<" +"<=" +">" +">=" +"=" +"-=" +"+=" +"*=" +"/=" +"%=" +"->" +"^" +"^=" +"&=" +"|=" +"~" +">>" +">>>" +"<<" +"::" +] @operator + +; Types + +(interface_declaration + name: (identifier) @type) +(class_declaration + name: (identifier) @type) +(record_declaration + name: (identifier) @type) +(enum_declaration + name: (identifier) @type) +(constructor_declaration + name: (identifier) @type) +(type_identifier) @type +((method_invocation + object: (identifier) @type) + (#lua-match? @type "^[A-Z]")) +((method_reference + . (identifier) @type) + (#lua-match? @type "^[A-Z]")) + + + +((field_access + object: (identifier) @type) + (#lua-match? @type "^[A-Z]")) +((scoped_identifier + scope: (identifier) @type) + (#lua-match? @type "^[A-Z]")) + +; Fields + +(field_declaration + declarator: (variable_declarator) @field) + +(field_access + field: (identifier) @field) + +[ +(boolean_type) +(integral_type) +(floating_point_type) +(void_type) +] @type.builtin + +; Variables + +((identifier) @constant + (#lua-match? @constant "^[A-Z_][A-Z%d_]+$")) + +(this) @variable.builtin + +; Literals + +[ +(hex_integer_literal) +(decimal_integer_literal) +(octal_integer_literal) +(binary_integer_literal) +] @number + +[ +(decimal_floating_point_literal) +(hex_floating_point_literal) +] @float + +(character_literal) @character +(string_literal) @string +(null_literal) @constant.builtin + +[ + (line_comment) + (block_comment) +] @comment + +[ +(true) +(false) +] @boolean + +; Keywords + +[ +"abstract" +"assert" +"break" +"class" +"record" +"continue" +"default" +"enum" +"exports" +"extends" +"final" +"implements" +"instanceof" +"interface" +"module" +"native" +"open" +"opens" +"package" +"private" +"protected" +"provides" +"public" +"requires" +"static" +"strictfp" +"synchronized" +"to" +"transient" +"transitive" +"uses" +"volatile" +"with" +] @keyword + +[ +"return" +"yield" +] @keyword.return + +[ + "new" +] @keyword.operator + +; Conditionals + +[ +"if" +"else" +"switch" +"case" +] @conditional + +(ternary_expression ["?" ":"] @conditional) + +; + +[ +"for" +"while" +"do" +] @repeat + +; Includes + +"import" @include +"package" @include + +; Punctuation + +[ +";" +"." +"..." +"," +] @punctuation.delimiter + +[ +"[" +"]" +"{" +"}" +"(" +")" +] @punctuation.bracket + +; Exceptions + +[ +"throw" +"throws" +"finally" +"try" +"catch" +] @exception + +; Labels +(labeled_statement + (identifier) @label) diff --git a/bundle/nvim-treesitter/queries/java/indents.scm b/bundle/nvim-treesitter/queries/java/indents.scm new file mode 100644 index 000000000..8e5375486 --- /dev/null +++ b/bundle/nvim-treesitter/queries/java/indents.scm @@ -0,0 +1,34 @@ +[ + (class_body) + (enum_body) + (interface_body) + (constructor_declaration) + (constructor_body) + (block) + (switch_block) + (array_initializer) + (argument_list) + (formal_parameters) +] @indent + +(expression_statement (method_invocation) @indent) + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @branch + +[ + "}" +] @indent_end + +(line_comment) @ignore + +[ + (ERROR) + (block_comment) +] @auto diff --git a/bundle/nvim-treesitter/queries/java/injections.scm b/bundle/nvim-treesitter/queries/java/injections.scm new file mode 100644 index 000000000..e4fd85f1c --- /dev/null +++ b/bundle/nvim-treesitter/queries/java/injections.scm @@ -0,0 +1 @@ +[(block_comment) (line_comment)] @comment diff --git a/bundle/nvim-treesitter/queries/java/locals.scm b/bundle/nvim-treesitter/queries/java/locals.scm new file mode 100644 index 000000000..a7a624289 --- /dev/null +++ b/bundle/nvim-treesitter/queries/java/locals.scm @@ -0,0 +1,77 @@ +; SCOPES +; declarations +(program) @scope +(class_declaration + body: (_) @scope) +(record_declaration + body: (_) @scope) +(enum_declaration + body: (_) @scope) +(lambda_expression) @scope +(enhanced_for_statement) @scope + +; block +(block) @scope + +; if/else +(if_statement) @scope ; if+else +(if_statement + consequence: (_) @scope) ; if body in case there are no braces +(if_statement + alternative: (_) @scope) ; else body in case there are no braces + +; try/catch +(try_statement) @scope ; covers try+catch, individual try and catch are covered by (block) +(catch_clause) @scope ; needed because `Exception` variable + +; loops +(for_statement) @scope ; whole for_statement because loop iterator variable +(for_statement ; "for" body in case there are no braces + body: (_) @scope) +(do_statement + body: (_) @scope) +(while_statement + body: (_) @scope) + +; Functions + +(constructor_declaration) @scope +(method_declaration) @scope + + +; DEFINITIONS +(package_declaration + (identifier) @definition.namespace) +(class_declaration + name: (identifier) @definition.type) +(record_declaration + name: (identifier) @definition.type) +(enum_declaration + name: (identifier) @definition.enum) +(method_declaration + name: (identifier) @definition.method) + +(local_variable_declaration + declarator: (variable_declarator + name: (identifier) @definition.var)) +(formal_parameter + name: (identifier) @definition.var) +(catch_formal_parameter + name: (identifier) @definition.var) +(inferred_parameters (identifier) @definition.var) ; (x,y) -> ... +(lambda_expression + parameters: (identifier) @definition.var) ; x -> ... +(enhanced_for_statement ; for (var item : items) { + name: (identifier) @definition.var) + +((scoped_identifier + (identifier) @definition.import) + (#has-ancestor? @definition.import import_declaration)) + +(field_declaration + declarator: (variable_declarator + name: (identifier) @definition.field)) + +; REFERENCES +(identifier) @reference +(type_identifier) @reference diff --git a/bundle/nvim-treesitter/queries/javascript/folds.scm b/bundle/nvim-treesitter/queries/javascript/folds.scm new file mode 100644 index 000000000..b6d9b28bf --- /dev/null +++ b/bundle/nvim-treesitter/queries/javascript/folds.scm @@ -0,0 +1 @@ +; inherits: ecma,jsx diff --git a/bundle/nvim-treesitter/queries/javascript/highlights.scm b/bundle/nvim-treesitter/queries/javascript/highlights.scm new file mode 100644 index 000000000..57634434e --- /dev/null +++ b/bundle/nvim-treesitter/queries/javascript/highlights.scm @@ -0,0 +1,33 @@ +; inherits: ecma,jsx + +;;; Parameters +(formal_parameters (identifier) @parameter) + +(formal_parameters + (rest_pattern + (identifier) @parameter)) + +;; ({ a }) => null +(formal_parameters + (object_pattern + (shorthand_property_identifier_pattern) @parameter)) + +;; ({ a: b }) => null +(formal_parameters + (object_pattern + (pair_pattern + value: (identifier) @parameter))) + +;; ([ a ]) => null +(formal_parameters + (array_pattern + (identifier) @parameter)) + +;; a => null +(arrow_function + parameter: (identifier) @parameter) + +;; optional parameters +(formal_parameters + (assignment_pattern + left: (identifier) @parameter)) diff --git a/bundle/nvim-treesitter/queries/javascript/indents.scm b/bundle/nvim-treesitter/queries/javascript/indents.scm new file mode 100644 index 000000000..b6d9b28bf --- /dev/null +++ b/bundle/nvim-treesitter/queries/javascript/indents.scm @@ -0,0 +1 @@ +; inherits: ecma,jsx diff --git a/bundle/nvim-treesitter/queries/javascript/injections.scm b/bundle/nvim-treesitter/queries/javascript/injections.scm new file mode 100644 index 000000000..b6d9b28bf --- /dev/null +++ b/bundle/nvim-treesitter/queries/javascript/injections.scm @@ -0,0 +1 @@ +; inherits: ecma,jsx diff --git a/bundle/nvim-treesitter/queries/javascript/locals.scm b/bundle/nvim-treesitter/queries/javascript/locals.scm new file mode 100644 index 000000000..f4f0e92de --- /dev/null +++ b/bundle/nvim-treesitter/queries/javascript/locals.scm @@ -0,0 +1,33 @@ +; inherits: ecma,jsx + +(formal_parameters + (identifier) @definition.parameter) + +; function(arg = []) { +(formal_parameters + (assignment_pattern + left: (identifier) @definition.parameter)) + +; x => x +(arrow_function + parameter: (identifier) @definition.parameter) + +;; ({ a }) => null +(formal_parameters + (object_pattern + (shorthand_property_identifier_pattern) @definition.parameter)) + +;; ({ a: b }) => null +(formal_parameters + (object_pattern + (pair_pattern + value: (identifier) @definition.parameter))) + +;; ([ a ]) => null +(formal_parameters + (array_pattern + (identifier) @definition.parameter)) + +(formal_parameters + (rest_pattern + (identifier) @definition.parameter)) diff --git a/bundle/nvim-treesitter/queries/jsdoc/highlights.scm b/bundle/nvim-treesitter/queries/jsdoc/highlights.scm new file mode 100644 index 000000000..4b4266c9f --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsdoc/highlights.scm @@ -0,0 +1,2 @@ +(tag_name) @keyword +(type) @type diff --git a/bundle/nvim-treesitter/queries/json/folds.scm b/bundle/nvim-treesitter/queries/json/folds.scm new file mode 100644 index 000000000..4c2b9d32e --- /dev/null +++ b/bundle/nvim-treesitter/queries/json/folds.scm @@ -0,0 +1,5 @@ +[ + (pair) + (object) + (array) +] @fold diff --git a/bundle/nvim-treesitter/queries/json/highlights.scm b/bundle/nvim-treesitter/queries/json/highlights.scm new file mode 100644 index 000000000..1ac778982 --- /dev/null +++ b/bundle/nvim-treesitter/queries/json/highlights.scm @@ -0,0 +1,16 @@ +(true) @boolean +(false) @boolean +(null) @constant.builtin +(number) @number +(pair key: (string) @label) +(pair value: (string) @string) +(array (string) @string) +(string_content (escape_sequence) @string.escape) +(ERROR) @error +["," ":"] @punctuation.delimiter +"[" @punctuation.bracket +"]" @punctuation.bracket +"{" @punctuation.bracket +"}" @punctuation.bracket + +(("\"" @conceal) (#set! conceal "")) diff --git a/bundle/nvim-treesitter/queries/json/indents.scm b/bundle/nvim-treesitter/queries/json/indents.scm new file mode 100644 index 000000000..0345b945b --- /dev/null +++ b/bundle/nvim-treesitter/queries/json/indents.scm @@ -0,0 +1,9 @@ +[ + (object) + (array) +] @indent + +[ + "}" + "]" +] @branch diff --git a/bundle/nvim-treesitter/queries/json/locals.scm b/bundle/nvim-treesitter/queries/json/locals.scm new file mode 100644 index 000000000..6609a2d22 --- /dev/null +++ b/bundle/nvim-treesitter/queries/json/locals.scm @@ -0,0 +1,4 @@ +[ + (object) + (array) +] @scope diff --git a/bundle/nvim-treesitter/queries/json5/highlights.scm b/bundle/nvim-treesitter/queries/json5/highlights.scm new file mode 100644 index 000000000..4e41971ba --- /dev/null +++ b/bundle/nvim-treesitter/queries/json5/highlights.scm @@ -0,0 +1,17 @@ +[ + "true" + "false" +] @boolean + +"null" @constant + +(string) @string + +(number) @number + +(comment) @comment + +(member + name: (_) @keyword) + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/json5/injections.scm b/bundle/nvim-treesitter/queries/json5/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/json5/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/jsonc/folds.scm b/bundle/nvim-treesitter/queries/jsonc/folds.scm new file mode 100644 index 000000000..41269219e --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsonc/folds.scm @@ -0,0 +1 @@ +; inherits: json diff --git a/bundle/nvim-treesitter/queries/jsonc/highlights.scm b/bundle/nvim-treesitter/queries/jsonc/highlights.scm new file mode 100644 index 000000000..a51c5c7e7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsonc/highlights.scm @@ -0,0 +1,3 @@ +; inherits: json + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/jsonc/indents.scm b/bundle/nvim-treesitter/queries/jsonc/indents.scm new file mode 100644 index 000000000..26a42eeda --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsonc/indents.scm @@ -0,0 +1,3 @@ +; inherits: json + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/jsonc/injections.scm b/bundle/nvim-treesitter/queries/jsonc/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsonc/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/jsonc/locals.scm b/bundle/nvim-treesitter/queries/jsonc/locals.scm new file mode 100644 index 000000000..41269219e --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsonc/locals.scm @@ -0,0 +1 @@ +; inherits: json diff --git a/bundle/nvim-treesitter/queries/jsx/folds.scm b/bundle/nvim-treesitter/queries/jsx/folds.scm new file mode 100644 index 000000000..93c3d9c8c --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsx/folds.scm @@ -0,0 +1 @@ +(jsx_element) @fold diff --git a/bundle/nvim-treesitter/queries/jsx/highlights.scm b/bundle/nvim-treesitter/queries/jsx/highlights.scm new file mode 100644 index 000000000..1f19c6b2a --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsx/highlights.scm @@ -0,0 +1,36 @@ +(jsx_element + open_tag: (jsx_opening_element ["<" ">"] @tag.delimiter)) +(jsx_element + close_tag: (jsx_closing_element ["<" "/" ">"] @tag.delimiter)) +(jsx_self_closing_element ["/" ">" "<"] @tag.delimiter) +(jsx_fragment [">" "<" "/"] @tag.delimiter) +(jsx_attribute (property_identifier) @tag.attribute) + +(jsx_opening_element + name: (identifier) @tag) + +(jsx_closing_element + name: (identifier) @tag) + +(jsx_self_closing_element + name: (identifier) @tag) + +(jsx_opening_element ((identifier) @constructor + (#lua-match? @constructor "^[A-Z]"))) + +; Handle the dot operator effectively - +(jsx_opening_element ((nested_identifier (identifier) @tag (identifier) @constructor))) + +(jsx_closing_element ((identifier) @constructor + (#lua-match? @constructor "^[A-Z]"))) + +; Handle the dot operator effectively - +(jsx_closing_element ((nested_identifier (identifier) @tag (identifier) @constructor))) + +(jsx_self_closing_element ((identifier) @constructor + (#lua-match? @constructor "^[A-Z]"))) + +; Handle the dot operator effectively - +(jsx_self_closing_element ((nested_identifier (identifier) @tag (identifier) @constructor))) + +(jsx_text) @none diff --git a/bundle/nvim-treesitter/queries/jsx/indents.scm b/bundle/nvim-treesitter/queries/jsx/indents.scm new file mode 100644 index 000000000..d1a12be9c --- /dev/null +++ b/bundle/nvim-treesitter/queries/jsx/indents.scm @@ -0,0 +1,12 @@ +[ + (jsx_fragment) + (jsx_element) + (jsx_self_closing_element) +] @indent + +(parenthesized_expression) @indent + +[ + (jsx_closing_element) + ">" +] @branch diff --git a/bundle/nvim-treesitter/queries/julia/folds.scm b/bundle/nvim-treesitter/queries/julia/folds.scm new file mode 100644 index 000000000..a8cfc9406 --- /dev/null +++ b/bundle/nvim-treesitter/queries/julia/folds.scm @@ -0,0 +1,17 @@ +[ + (module_definition) + (struct_definition) + (macro_definition) + (function_definition) + + (if_statement) + (try_statement) + (for_statement) + (while_statement) + (let_statement) + (quote_statement) + + (do_clause) + (compound_expression) +] @fold + diff --git a/bundle/nvim-treesitter/queries/julia/highlights.scm b/bundle/nvim-treesitter/queries/julia/highlights.scm new file mode 100644 index 000000000..a355367a5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/julia/highlights.scm @@ -0,0 +1,190 @@ +(identifier) @variable +;; In case you want type highlighting based on Julia naming conventions (this might collide with mathematical notation) +;((identifier) @type ; exception: mark `A_foo` sort of identifiers as variables + ;(match? @type "^[A-Z][^_]")) +((identifier) @constant + (#match? @constant "^[A-Z][A-Z_]{2}[A-Z_]*$")) + +[ + (triple_string) + (string) +] @string +(command_string) @string.special + +(string + prefix: (identifier) @constant.builtin) + +(macro_identifier) @function.macro +(macro_identifier (identifier) @function.macro) ; for any one using the variable highlight +(macro_definition + name: (identifier) @function.macro + ["macro" "end" @keyword]) + +(field_expression + (identifier) + (identifier) @field .) + +(function_definition + name: (identifier) @function) +(call_expression + (identifier) @function) +(call_expression + (field_expression (identifier) @method .)) +(broadcast_call_expression + (identifier) @function) +(broadcast_call_expression + (field_expression (identifier) @method .)) +(parameter_list + (identifier) @parameter) +(parameter_list + (optional_parameter . + (identifier) @parameter)) +(typed_parameter + (identifier) @parameter + (identifier) @type) +(type_parameter_list + (identifier) @type) +(typed_parameter + (identifier) @parameter + (parameterized_identifier) @type) +(function_expression + . (identifier) @parameter) +(spread_parameter) @parameter +(spread_parameter + (identifier) @parameter) +(named_argument + . (identifier) @parameter) +(argument_list + (typed_expression + (identifier) @parameter + (identifier) @type)) +(argument_list + (typed_expression + (identifier) @parameter + (parameterized_identifier) @type)) + +;; Symbol expressions (:my-wanna-be-lisp-keyword) +(quote_expression + (identifier)) @symbol + +;; Parsing error! foo (::Type) gets parsed as two quote expressions +(argument_list + (quote_expression + (quote_expression + (identifier) @type))) + +(type_argument_list + (identifier) @type) +(parameterized_identifier (_)) @type +(argument_list + (typed_expression . (identifier) @parameter)) + +(typed_expression + (identifier) @type .) +(typed_expression + (parameterized_identifier) @type .) + +(abstract_definition + name: (identifier) @type) +(struct_definition + name: (identifier) @type) + +(number) @number +(range_expression + (identifier) @number + (#eq? @number "end")) +(range_expression + (_ + (identifier) @number + (#eq? @number "end"))) +(coefficient_expression + (number) + (identifier) @constant.builtin) + +;; TODO: operators. +;; Those are a bit difficult to implement since the respective nodes are hidden right now (_power_operator) +;; and heavily use Unicode chars (support for those are bad in vim/lua regexes) +;[; + ;(power_operator); + ;(times_operator); + ;(plus_operator); + ;(arrow_operator); + ;(comparison_operator); + ;(assign_operator); +;] @operator ; + +"end" @keyword + +(if_statement + ["if" "end"] @conditional) +(elseif_clause + ["elseif"] @conditional) +(else_clause + ["else"] @conditional) +(ternary_expression + ["?" ":"] @conditional) + +(function_definition ["function" "end"] @keyword.function) + +[ + (comment) + (block_comment) +] @comment + +[ + "abstract" + "const" + "macro" + "primitive" + "struct" + "type" +] @keyword + +"return" @keyword.return + +((identifier) @keyword (#any-of? @keyword "global" "local")) + +(compound_expression + ["begin" "end"] @keyword) +(try_statement + ["try" "end" ] @exception) +(finally_clause + "finally" @exception) +(catch_clause + "catch" @exception) +(quote_statement + ["quote" "end"] @keyword) +(let_statement + ["let" "end"] @keyword) +(for_statement + ["for" "end"] @repeat) +(while_statement + ["while" "end"] @repeat) +(break_statement) @repeat +(continue_statement) @repeat +(for_binding + "in" @repeat) +(for_clause + "for" @repeat) +(do_clause + ["do" "end"] @keyword) + +(export_statement + ["export"] @include) + +(import_statement + ["import" "using"] @include) + +(module_definition + ["module" "end"] @include) + +((identifier) @include (#eq? @include "baremodule")) + +(((identifier) @constant.builtin) (#match? @constant.builtin "^(nothing|Inf|NaN)$")) +(((identifier) @boolean) (#eq? @boolean "true")) +(((identifier) @boolean) (#eq? @boolean "false")) + +(range_expression ":" @operator) +(quote_expression ":" @symbol) +["::" "." "," "..." "!"] @punctuation.delimiter +["[" "]" "(" ")" "{" "}"] @punctuation.bracket diff --git a/bundle/nvim-treesitter/queries/julia/indents.scm b/bundle/nvim-treesitter/queries/julia/indents.scm new file mode 100644 index 000000000..3c87a05fb --- /dev/null +++ b/bundle/nvim-treesitter/queries/julia/indents.scm @@ -0,0 +1,42 @@ +[ + (struct_definition) + (macro_definition) + (function_definition) + + (if_statement) + (try_statement) + (for_statement) + (while_statement) + (let_statement) + (quote_statement) + + (do_clause) + (compound_expression) + + (assignment_expression) + (binary_expression) + (call_expression) + + (array_expression) + (tuple_expression) + (matrix_expression) +] @indent + +[ + "end" + "(" + ")" + "[" + "]" + (else_clause) + (elseif_clause) + (catch_clause) + (finally_clause) +] @branch + +[ + (comment) + (block_comment) + (triple_string) +] @ignore + diff --git a/bundle/nvim-treesitter/queries/julia/injections.scm b/bundle/nvim-treesitter/queries/julia/injections.scm new file mode 100644 index 000000000..77c503455 --- /dev/null +++ b/bundle/nvim-treesitter/queries/julia/injections.scm @@ -0,0 +1,8 @@ +; TODO: re-add when markdown is added. +; ((triple_string) @markdown +; (#offset! @markdown 0 3 0 -3)) + +[ + (comment) + (block_comment) +] @comment diff --git a/bundle/nvim-treesitter/queries/julia/locals.scm b/bundle/nvim-treesitter/queries/julia/locals.scm new file mode 100644 index 000000000..f8b34f71d --- /dev/null +++ b/bundle/nvim-treesitter/queries/julia/locals.scm @@ -0,0 +1,59 @@ + +(import_statement + (identifier) @definition.import) +(variable_declaration + (identifier) @definition.var) +(variable_declaration + (tuple_expression + (identifier) @definition.var)) +(for_binding + (identifier) @definition.var) +(for_binding + (tuple_expression + (identifier) @definition.var)) + +(assignment_expression + (tuple_expression + (identifier) @definition.var)) +(assignment_expression + (bare_tuple_expression + (identifier) @definition.var)) +(assignment_expression + (identifier) @definition.var) + +(type_parameter_list + (identifier) @definition.type) +(type_argument_list + (identifier) @definition.type) +(struct_definition + name: (identifier) @definition.type) + +(parameter_list + (identifier) @definition.parameter) +(typed_parameter + (identifier) @definition.parameter + (identifier)) +(function_expression + . (identifier) @definition.parameter) +(argument_list + (typed_expression + (identifier) @definition.parameter + (identifier))) +(spread_parameter + (identifier) @definition.parameter) + +(function_definition + name: (identifier) @definition.function) @scope +(macro_definition + name: (identifier) @definition.macro) @scope + +(identifier) @reference + +[ + (try_statement) + (finally_clause) + (quote_statement) + (let_statement) + (compound_expression) + (for_statement) +] @scope diff --git a/bundle/nvim-treesitter/queries/kotlin/folds.scm b/bundle/nvim-treesitter/queries/kotlin/folds.scm new file mode 100644 index 000000000..768972b8b --- /dev/null +++ b/bundle/nvim-treesitter/queries/kotlin/folds.scm @@ -0,0 +1,17 @@ +[ + (import_list) + + (when_expression) + (control_structure_body) + + (lambda_literal) + (function_body) + (primary_constructor) + (secondary_constructor) + (anonymous_initializer) + + (class_body) + (enum_class_body) + + (interpolated_expression) +] @fold diff --git a/bundle/nvim-treesitter/queries/kotlin/highlights.scm b/bundle/nvim-treesitter/queries/kotlin/highlights.scm new file mode 100644 index 000000000..2567a74c1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/kotlin/highlights.scm @@ -0,0 +1,409 @@ +;;; Identifiers + +(simple_identifier) @variable + +; `it` keyword inside lambdas +; FIXME: This will highlight the keyword outside of lambdas since tree-sitter +; does not allow us to check for arbitrary nestation +((simple_identifier) @variable.builtin +(#eq? @variable.builtin "it")) + +; `field` keyword inside property getter/setter +; FIXME: This will highlight the keyword outside of getters and setters +; since tree-sitter does not allow us to check for arbitrary nestation +((simple_identifier) @variable.builtin +(#eq? @variable.builtin "field")) + +; `this` this keyword inside classes +(this_expression) @variable.builtin + +; `super` keyword inside classes +(super_expression) @variable.builtin + +(class_parameter + (simple_identifier) @property) + +(class_body + (property_declaration + (variable_declaration + (simple_identifier) @property))) + +; id_1.id_2.id_3: `id_2` and `id_3` are assumed as object properties +(_ + (navigation_suffix + (simple_identifier) @property)) + +; SCREAMING CASE identifiers are assumed to be constants +((simple_identifier) @constant +(#lua-match? @constant "^[A-Z][A-Z0-9_]*$")) + +(_ + (navigation_suffix + (simple_identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z0-9_]*$"))) + +(enum_entry + (simple_identifier) @constant) + +(type_identifier) @type + +((type_identifier) @type.builtin + (#any-of? @type.builtin + "Byte" + "Short" + "Int" + "Long" + "UByte" + "UShort" + "UInt" + "ULong" + "Float" + "Double" + "Boolean" + "Char" + "String" + "Array" + "ByteArray" + "ShortArray" + "IntArray" + "LongArray" + "UByteArray" + "UShortArray" + "UIntArray" + "ULongArray" + "FloatArray" + "DoubleArray" + "BooleanArray" + "CharArray" + "Map" + "Set" + "List" + "EmptyMap" + "EmptySet" + "EmptyList" + "MutableMap" + "MutableSet" + "MutableList" +)) + +(package_header + . (identifier)) @namespace + +(import_header + "import" @include) + +; The last `simple_identifier` in a `import_header` will always either be a function +; or a type. Classes can appear anywhere in the import path, unlike functions +(import_header + (identifier + (simple_identifier) @type @_import) + (import_alias + (type_identifier) @type)? + (#lua-match? @_import "^[A-Z]")) + +(import_header + (identifier + (simple_identifier) @function @_import .) + (import_alias + (type_identifier) @function)? + (#lua-match? @_import "^[a-z]")) + +; TODO: Seperate labeled returns/breaks/continue/super/this +; Must be implemented in the parser first +(label) @label + +;;; Function definitions + +(function_declaration + . (simple_identifier) @function) + +(getter + ("get") @function.builtin) +(setter + ("set") @function.builtin) + +(primary_constructor) @constructor +(secondary_constructor + ("constructor") @constructor) + +(constructor_invocation + (user_type + (type_identifier) @constructor)) + +(anonymous_initializer + ("init") @constructor) + +(parameter + (simple_identifier) @parameter) + +(parameter_with_optional_type + (simple_identifier) @parameter) + +; lambda parameters +(lambda_literal + (lambda_parameters + (variable_declaration + (simple_identifier) @parameter))) + +;;; Function calls + +; function() +(call_expression + . (simple_identifier) @function) + +; object.function() or object.property.function() +(call_expression + (navigation_expression + (navigation_suffix + (simple_identifier) @function) . )) + +(call_expression + . (simple_identifier) @function.builtin + (#any-of? @function.builtin + "arrayOf" + "arrayOfNulls" + "byteArrayOf" + "shortArrayOf" + "intArrayOf" + "longArrayOf" + "ubyteArrayOf" + "ushortArrayOf" + "uintArrayOf" + "ulongArrayOf" + "floatArrayOf" + "doubleArrayOf" + "booleanArrayOf" + "charArrayOf" + "emptyArray" + "mapOf" + "setOf" + "listOf" + "emptyMap" + "emptySet" + "emptyList" + "mutableMapOf" + "mutableSetOf" + "mutableListOf" + "print" + "println" + "error" + "TODO" + "run" + "runCatching" + "repeat" + "lazy" + "lazyOf" + "enumValues" + "enumValueOf" + "assert" + "check" + "checkNotNull" + "require" + "requireNotNull" + "with" + "suspend" + "synchronized" +)) + +;;; Literals + +[ + (comment) + (shebang_line) +] @comment + +(real_literal) @float +[ + (integer_literal) + (long_literal) + (hex_literal) + (bin_literal) + (unsigned_literal) +] @number + +[ + "null" ; should be highlighted the same as booleans + (boolean_literal) +] @boolean + +(character_literal) @character + +[ + (line_string_literal) + (multi_line_string_literal) +] @string + +; NOTE: Escapes not allowed in multi-line strings +(line_string_literal (character_escape_seq) @string.escape) + +; There are 3 ways to define a regex +; - "[abc]?".toRegex() +(call_expression + (navigation_expression + ([(line_string_literal) (multi_line_string_literal)] @string.regex) + (navigation_suffix + ((simple_identifier) @_function + (#eq? @_function "toRegex"))))) + +; - Regex("[abc]?") +(call_expression + ((simple_identifier) @_function + (#eq? @_function "Regex")) + (call_suffix + (value_arguments + (value_argument + [ (line_string_literal) (multi_line_string_literal) ] @string.regex)))) + +; - Regex.fromLiteral("[abc]?") +(call_expression + (navigation_expression + ((simple_identifier) @_class + (#eq? @_class "Regex")) + (navigation_suffix + ((simple_identifier) @_function + (#eq? @_function "fromLiteral")))) + (call_suffix + (value_arguments + (value_argument + [ (line_string_literal) (multi_line_string_literal) ] @string.regex)))) + +;;; Keywords + +(type_alias "typealias" @keyword) +[ + (class_modifier) + (member_modifier) + (function_modifier) + (property_modifier) + (platform_modifier) + (variance_modifier) + (parameter_modifier) + (visibility_modifier) + (reification_modifier) + (inheritance_modifier) +]@keyword + +[ + "val" + "var" + "enum" + "class" + "object" + "interface" +; "typeof" ; NOTE: It is reserved for future use +] @keyword + +("fun") @keyword.function + +(jump_expression) @keyword.return + +[ + "if" + "else" + "when" +] @conditional + +[ + "for" + "do" + "while" +] @repeat + +[ + "try" + "catch" + "throw" + "finally" +] @exception + + +(annotation + "@" @attribute (use_site_target)? @attribute) +(annotation + (user_type + (type_identifier) @attribute)) +(annotation + (constructor_invocation + (user_type + (type_identifier) @attribute))) + +(file_annotation + "@" @attribute "file" @attribute ":" @attribute) +(file_annotation + (user_type + (type_identifier) @attribute)) +(file_annotation + (constructor_invocation + (user_type + (type_identifier) @attribute))) + +;;; Operators & Punctuation + +[ + "!" + "!=" + "!==" + "=" + "==" + "===" + ">" + ">=" + "<" + "<=" + "||" + "&&" + "+" + "++" + "+=" + "-" + "--" + "-=" + "*" + "*=" + "/" + "/=" + "%" + "%=" + "?." + "?:" + "!!" + "is" + "!is" + "in" + "!in" + "as" + "as?" + ".." + "->" +] @operator + +[ + "(" ")" + "[" "]" + "{" "}" +] @punctuation.bracket + +[ + "." + "," + ";" + ":" + "::" +] @punctuation.delimiter + +; NOTE: `interpolated_identifier`s can be highlighted in any way +(line_string_literal + "$" @punctuation.special + (interpolated_identifier) @none) +(line_string_literal + "${" @punctuation.special + (interpolated_expression) @none + "}" @punctuation.special) + +(multi_line_string_literal + "$" @punctuation.special + (interpolated_identifier) @none) +(multi_line_string_literal + "${" @punctuation.special + (interpolated_expression) @none + "}" @punctuation.special) diff --git a/bundle/nvim-treesitter/queries/kotlin/injections.scm b/bundle/nvim-treesitter/queries/kotlin/injections.scm new file mode 100644 index 000000000..371345cfd --- /dev/null +++ b/bundle/nvim-treesitter/queries/kotlin/injections.scm @@ -0,0 +1,32 @@ +(comment) @comment + +; There are 3 ways to define a regex +; - "[abc]?".toRegex() +(call_expression + (navigation_expression + ([(line_string_literal) (multi_line_string_literal)] @regex) + (navigation_suffix + ((simple_identifier) @_function + (#eq? @_function "toRegex"))))) + +; - Regex("[abc]?") +(call_expression + ((simple_identifier) @_function + (#eq? @_function "Regex")) + (call_suffix + (value_arguments + (value_argument + [ (line_string_literal) (multi_line_string_literal) ] @regex)))) + +; - Regex.fromLiteral("[abc]?") +(call_expression + (navigation_expression + ((simple_identifier) @_class + (#eq? @_class "Regex")) + (navigation_suffix + ((simple_identifier) @_function + (#eq? @_function "fromLiteral")))) + (call_suffix + (value_arguments + (value_argument + [ (line_string_literal) (multi_line_string_literal) ] @regex)))) diff --git a/bundle/nvim-treesitter/queries/kotlin/locals.scm b/bundle/nvim-treesitter/queries/kotlin/locals.scm new file mode 100644 index 000000000..d1b45f276 --- /dev/null +++ b/bundle/nvim-treesitter/queries/kotlin/locals.scm @@ -0,0 +1,83 @@ +;;; Imports + +(package_header + . (identifier) @definition.namespace) + +(import_header + (identifier + (simple_identifier) @definition.import .) + (import_alias + (type_identifier) @definition.import)?) + +;;; Functions + +(function_declaration + . (simple_identifier) @definition.function + (#set! "definition.function.scope" "parent")) + +(class_body + (function_declaration + . (simple_identifier) @definition.method) + (#set! "definition.method.scope" "parent")) + +;;; Variables + +(function_declaration + (parameter + (simple_identifier) @definition.parameter)) + +(lambda_literal + (lambda_parameters + (variable_declaration + (simple_identifier) @definition.parameter))) + +(class_body + (property_declaration + (variable_declaration + (simple_identifier) @definition.field))) + +(class_declaration + (primary_constructor + (class_parameter + (simple_identifier) @definition.field))) + +(enum_class_body + (enum_entry + (simple_identifier) @definition.field)) + +(variable_declaration + (simple_identifier) @definition.var) + +;;; Types + +(class_declaration + (type_identifier) @definition.type + (#set! "definition.type.scope" "parent")) + +(type_alias + (type_identifier) @definition.type + (#set! "definition.type.scope" "parent")) + +;;; Scopes + +[ + (if_expression) + (when_expression) + (when_entry) + + (for_statement) + (while_statement) + (do_while_statement) + + (lambda_literal) + (function_declaration) + (primary_constructor) + (secondary_constructor) + (anonymous_initializer) + + (class_declaration) + (enum_class_body) + (enum_entry) + + (interpolated_expression) +] @scope diff --git a/bundle/nvim-treesitter/queries/lalrpop/highlights.scm b/bundle/nvim-treesitter/queries/lalrpop/highlights.scm new file mode 100644 index 000000000..34040dd5f --- /dev/null +++ b/bundle/nvim-treesitter/queries/lalrpop/highlights.scm @@ -0,0 +1,57 @@ +[ + "pub" + "grammar" + "match" + "extern" + "type" + "enum" +] @keyword + +[ + "+" + "*" + "?" +] @operator + +(grammar_type_params + "<" @punctuation.bracket + ">" @punctuation.bracket) + +(symbol + "<" @punctuation.bracket + ">" @punctuation.bracket) + +(binding_symbol + "<" @punctuation.bracket + ">" @punctuation.bracket) + +(binding_symbol + name: (identifier) @parameter) + +(bare_symbol + (macro + ((macro_id) @function))) + +(bare_symbol + (identifier) @function) + +(nonterminal_name + (macro_id) @function) + +(nonterminal_name + (identifier) @function) + +(nonterminal + (type_ref) @type) + +"(" @punctuation.bracket +")" @punctuation.bracket +"[" @punctuation.bracket +"]" @punctuation.bracket + +";" @punctuation.delimiter + +(lifetime (identifier) @label) + +(string_literal) @string +(regex_literal) @string diff --git a/bundle/nvim-treesitter/queries/lalrpop/locals.scm b/bundle/nvim-treesitter/queries/lalrpop/locals.scm new file mode 100644 index 000000000..7a30cce9f --- /dev/null +++ b/bundle/nvim-treesitter/queries/lalrpop/locals.scm @@ -0,0 +1,5 @@ +(nonterminal_name + (macro_id) @definition.function) + +(nonterminal_name + (identifier) @definition.function) diff --git a/bundle/nvim-treesitter/queries/latex/folds.scm b/bundle/nvim-treesitter/queries/latex/folds.scm new file mode 100644 index 000000000..6769b2e6a --- /dev/null +++ b/bundle/nvim-treesitter/queries/latex/folds.scm @@ -0,0 +1,13 @@ +[ + (chapter) + (part) + (section) + (subsection) + (subsubsection) + (paragraph) + (subparagraph) + + (generic_environment) + (comment_environment) + (displayed_equation) +] @fold diff --git a/bundle/nvim-treesitter/queries/latex/highlights.scm b/bundle/nvim-treesitter/queries/latex/highlights.scm new file mode 100644 index 000000000..bfa3edbc6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/latex/highlights.scm @@ -0,0 +1,255 @@ +;; General syntax +(ERROR) @error + +(generic_command) @function +(caption + command: _ @function) + +(key_value_pair + key: (_) @parameter + value: (_)) + +[ + (line_comment) + (block_comment) + (comment_environment) +] @comment + +[ + (brack_group) + (brack_group_argc) +] @parameter + +[(operator) "="] @operator + +"\\item" @punctuation.special + +((word) @punctuation.delimiter +(#eq? @punctuation.delimiter "&")) + +["[" "]" "{" "}"] @punctuation.bracket ; "(" ")" has no syntactical meaning in LaTeX + +;; General environments +(begin + command: _ @text.environment + name: (curly_group_text + (text) @text.environment.name) + (#not-any-of? @text.environment.name + "displaymath" "displaymath*" + "equation" "equation*" + "multline" "multline*" + "eqnarray" "eqnarray*" + "align" "align*" + "array" "array*" + "split" "split*" + "alignat" "alignat*" + "gather" "gather*" + "flalign" "flalign*")) + +(end + command: _ @text.environment + name: (curly_group_text + (text) @text.environment.name) + (#not-any-of? @text.environment.name + "displaymath" "displaymath*" + "equation" "equation*" + "multline" "multline*" + "eqnarray" "eqnarray*" + "align" "align*" + "array" "array*" + "split" "split*" + "alignat" "alignat*" + "gather" "gather*" + "flalign" "flalign*")) + +;; Definitions and references +(new_command_definition + command: _ @function.macro + declaration: (curly_group_command_name (_) @function)) +(old_command_definition + command: _ @function.macro + declaration: (_) @function) +(let_command_definition + command: _ @function.macro + declaration: (_) @function) + +(theorem_definition + command: _ @function.macro + name: (curly_group_text (_) @text.environment.name)) + +(label_definition + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) +(label_reference_range + command: _ @function.macro + from: (curly_group_text (_) @text.reference) + to: (curly_group_text (_) @text.reference)) +(label_reference + command: _ @function.macro + names: (curly_group_text_list (_) @text.reference)) +(label_number + command: _ @function.macro + name: (curly_group_text (_) @text.reference) + number: (_) @text.reference) + +(citation + command: _ @function.macro + keys: (curly_group_text_list) @text.reference) + +(glossary_entry_definition + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) +(glossary_entry_reference + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) + +(acronym_definition + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) +(acronym_reference + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) + +(color_definition + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) +(color_reference + command: _ @function.macro + name: (curly_group_text (_) @text.reference)) + +;; Math +[ + (displayed_equation) + (inline_formula) +] @text.math + +((generic_environment + (begin + command: _ @text.math + name: (curly_group_text + (text) @_env))) @text.math + (#any-of? @_env + "displaymath" "displaymath*" + "equation" "equation*" + "multline" "multline*" + "eqnarray" "eqnarray*" + "align" "align*" + "array" "array*" + "split" "split*" + "alignat" "alignat*" + "gather" "gather*" + "flalign" "flalign*")) +((generic_environment + (end + command: _ @text.math + name: (curly_group_text + (text) @_env))) @text.math + (#any-of? @_env + "displaymath" "displaymath*" + "equation" "equation*" + "multline" "multline*" + "eqnarray" "eqnarray*" + "align" "align*" + "array" "array*" + "split" "split*" + "alignat" "alignat*" + "gather" "gather*" + "flalign" "flalign*")) + +;; Sectioning +(chapter + command: _ @namespace + text: (curly_group) @text.title) + +(part + command: _ @namespace + text: (curly_group) @text.title) + +(section + command: _ @namespace + text: (curly_group) @text.title) + +(subsection + command: _ @namespace + text: (curly_group) @text.title) + +(subsubsection + command: _ @namespace + text: (curly_group) @text.title) + +(paragraph + command: _ @namespace + text: (curly_group) @text.title) + +(subparagraph + command: _ @namespace + text: (curly_group) @text.title) + +;; Beamer frames +(generic_environment + (begin + name: (curly_group_text + (text) @text.environment.name) + (#any-of? @text.environment.name "frame")) + . + (curly_group (_) @text.title)) + +((generic_command + command: (command_name) @_name + arg: (curly_group + (text) @text.title)) + (#eq? @_name "\\frametitle")) + +;; Formatting +((generic_command + command: (command_name) @_name + arg: (curly_group (_) @text.emphasis)) + (#eq? @_name "\\emph")) + +((generic_command + command: (command_name) @_name + arg: (curly_group (_) @text.emphasis)) + (#match? @_name "^(\\\\textit|\\\\mathit)$")) + +((generic_command + command: (command_name) @_name + arg: (curly_group (_) @text.strong)) + (#match? @_name "^(\\\\textbf|\\\\mathbf)$")) + +((generic_command + command: (command_name) @_name + . + arg: (curly_group (_) @text.uri)) + (#match? @_name "^(\\\\url|\\\\href)$")) + +;; File inclusion commands +(class_include + command: _ @include + path: (curly_group_path) @string) + +(package_include + command: _ @include + paths: (curly_group_path_list) @string) + +(latex_include + command: _ @include + path: (curly_group_path) @string) +(import_include + command: _ @include + directory: (curly_group_path) @string + file: (curly_group_path) @string) + +(bibtex_include + command: _ @include + path: (curly_group_path) @string) +(biblatex_include + "\\addbibresource" @include + glob: (curly_group_glob_pattern) @string.regex) + +(graphics_include + command: _ @include + path: (curly_group_path) @string) +(tikz_library_import + command: _ @include + paths: (curly_group_path_list) @string) + diff --git a/bundle/nvim-treesitter/queries/latex/injections.scm b/bundle/nvim-treesitter/queries/latex/injections.scm new file mode 100644 index 000000000..e68c6d938 --- /dev/null +++ b/bundle/nvim-treesitter/queries/latex/injections.scm @@ -0,0 +1,22 @@ +[ + (line_comment) + (block_comment) + (comment_environment) +] @comment + +(pycode_environment + code: (source_code) @python +) + +(minted_environment + (begin + language: (curly_group_text + (text) @language)) + (source_code) @content) + +((generic_environment + (begin + name: (curly_group_text + (text) @_env))) @c + (#any-of? @_env "asy" "asydef")) + diff --git a/bundle/nvim-treesitter/queries/ledger/folds.scm b/bundle/nvim-treesitter/queries/ledger/folds.scm new file mode 100644 index 000000000..d807fc35e --- /dev/null +++ b/bundle/nvim-treesitter/queries/ledger/folds.scm @@ -0,0 +1,3 @@ +[ + (xact) +] @fold diff --git a/bundle/nvim-treesitter/queries/ledger/highlights.scm b/bundle/nvim-treesitter/queries/ledger/highlights.scm new file mode 100644 index 000000000..86c609c2a --- /dev/null +++ b/bundle/nvim-treesitter/queries/ledger/highlights.scm @@ -0,0 +1,38 @@ +[ + (comment) + (note) +] @comment + +[ + (date) + (interval) + (quantity) +] @number + +((account) @field) +((commodity) @text.literal) + +"include" @include + +[ + "account" + "alias" + "assert" + "check" + "commodity" + "def" + "default" + "end" + "eval" + "format" + "nomarket" + "note" + "payee" + "check" + "A" + "Y" + "N" + "D" + "C" + "P" +] @keyword diff --git a/bundle/nvim-treesitter/queries/ledger/indents.scm b/bundle/nvim-treesitter/queries/ledger/indents.scm new file mode 100644 index 000000000..af74b1d41 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ledger/indents.scm @@ -0,0 +1,3 @@ +[ + (journal_item) +] @indent diff --git a/bundle/nvim-treesitter/queries/ledger/injections.scm b/bundle/nvim-treesitter/queries/ledger/injections.scm new file mode 100644 index 000000000..2d9481414 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ledger/injections.scm @@ -0,0 +1,2 @@ +(comment) @comment +(note) @comment diff --git a/bundle/nvim-treesitter/queries/llvm/highlights.scm b/bundle/nvim-treesitter/queries/llvm/highlights.scm new file mode 100644 index 000000000..d61d52937 --- /dev/null +++ b/bundle/nvim-treesitter/queries/llvm/highlights.scm @@ -0,0 +1,156 @@ +(type) @type +(type_keyword) @type.builtin + +(type [ + (local_var) + (global_var) + ] @type) + +(argument) @parameter + +(_ inst_name: _ @keyword.operator) + +[ + "catch" + "filter" +] @keyword.operator + +[ + "to" + "nuw" + "nsw" + "exact" + "unwind" + "from" + "cleanup" + "swifterror" + "volatile" + "inbounds" + "inrange" +] @keyword +(icmp_cond) @keyword +(fcmp_cond) @keyword + +(fast_math) @keyword + +(_ callee: _ @function) +(function_header name: _ @function) + +[ + "declare" + "define" +] @keyword.function +(calling_conv) @keyword.function + +[ + "target" + "triple" + "datalayout" + "source_filename" + "addrspace" + "blockaddress" + "align" + "syncscope" + "within" + "uselistorder" + "uselistorder_bb" + "module" + "asm" + "sideeffect" + "alignstack" + "inteldialect" + "unwind" + "type" + "global" + "constant" + "externally_initialized" + "alias" + "ifunc" + "section" + "comdat" + "thread_local" + "localdynamic" + "initialexec" + "localexec" + "any" + "exactmatch" + "largest" + "nodeduplicate" + "samesize" + "distinct" + "attributes" + "vscale" + "no_cfi" +] @keyword + +(linkage_aux) @keyword +(dso_local) @keyword +(visibility) @keyword +(dll_storage_class) @keyword +(unnamed_addr) @keyword +(attribute_name) @keyword + +(function_header [ + (linkage) + (calling_conv) + (unnamed_addr) + ] @keyword.function) + +(number) @number +(comment) @comment +(string) @string +(cstring) @string +(label) @label +(_ inst_name: "ret" @keyword.return) +(float) @float + +[ + (local_var) + (global_var) +] @variable + +[ + (struct_value) + (array_value) + (vector_value) +] @constructor + +[ + "(" + ")" + "[" + "]" + "{" + "}" + "<" + ">" + "<{" + "}>" +] @punctuation.bracket + +[ + "," + ":" +] @punctuation.delimiter + +[ + "=" + "|" + "x" + "..." +] @operator + +[ + "true" + "false" +] @boolean + +[ + "undef" + "poison" + "null" + "none" + "zeroinitializer" +] @constant.builtin + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/lua/folds.scm b/bundle/nvim-treesitter/queries/lua/folds.scm new file mode 100644 index 000000000..d8f0b42df --- /dev/null +++ b/bundle/nvim-treesitter/queries/lua/folds.scm @@ -0,0 +1,10 @@ +[ + (do_statement) + (while_statement) + (repeat_statement) + (if_statement) + (for_statement) + (function_declaration) + (function_definition) + (table_constructor) +] @fold diff --git a/bundle/nvim-treesitter/queries/lua/highlights.scm b/bundle/nvim-treesitter/queries/lua/highlights.scm new file mode 100644 index 000000000..1beddb5e3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/lua/highlights.scm @@ -0,0 +1,192 @@ +;; Keywords + +"return" @keyword.return + +[ + "goto" + "in" + "local" +] @keyword + +(label_statement) @label + +(break_statement) @keyword + +(do_statement +[ + "do" + "end" +] @keyword) + +(while_statement +[ + "while" + "do" + "end" +] @repeat) + +(repeat_statement +[ + "repeat" + "until" +] @repeat) + +(if_statement +[ + "if" + "elseif" + "else" + "then" + "end" +] @conditional) + +(elseif_statement +[ + "elseif" + "then" + "end" +] @conditional) + +(else_statement +[ + "else" + "end" +] @conditional) + +(for_statement +[ + "for" + "do" + "end" +] @repeat) + +(function_declaration +[ + "function" + "end" +] @keyword.function) + +(function_definition +[ + "function" + "end" +] @keyword.function) + +;; Operators + +[ + "and" + "not" + "or" +] @keyword.operator + +[ + "+" + "-" + "*" + "/" + "%" + "^" + "#" + "==" + "~=" + "<=" + ">=" + "<" + ">" + "=" + "&" + "~" + "|" + "<<" + ">>" + "//" + ".." +] @operator + +;; Punctuations + +[ + ";" + ":" + "," + "." +] @punctuation.delimiter + +;; Brackets + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +;; Variables + +(identifier) @variable + +((identifier) @variable.builtin + (#match? @variable.builtin "self")) + +;; Constants + +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) + +(vararg_expression) @constant + +(nil) @constant.builtin + +[ + (false) + (true) +] @boolean + +;; Tables + +(field name: (identifier) @field) + +(dot_index_expression field: (identifier) @field) + +(table_constructor +[ + "{" + "}" +] @constructor) + +;; Functions + +(parameters (identifier) @parameter) + +(function_call name: (identifier) @function) +(function_declaration name: (identifier) @function) + +(function_call name: (dot_index_expression field: (identifier) @function)) +(function_declaration name: (dot_index_expression field: (identifier) @function)) + +(method_index_expression method: (identifier) @method) + +(function_call + (identifier) @function.builtin + (#any-of? @function.builtin + ;; built-in functions in Lua 5.1 + "assert" "collectgarbage" "dofile" "error" "getfenv" "getmetatable" "ipairs" + "load" "loadfile" "loadstring" "module" "next" "pairs" "pcall" "print" + "rawequal" "rawget" "rawset" "require" "select" "setfenv" "setmetatable" + "tonumber" "tostring" "type" "unpack" "xpcall")) + +;; Others + +(comment) @comment + +(hash_bang_line) @comment + +(number) @number + +(string) @string + +;; Error +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/lua/indents.scm b/bundle/nvim-treesitter/queries/lua/indents.scm new file mode 100644 index 000000000..283808843 --- /dev/null +++ b/bundle/nvim-treesitter/queries/lua/indents.scm @@ -0,0 +1,40 @@ +[ + (function_definition) + (function_declaration) + (field) + (do_statement) + (while_statement) + (repeat_statement) + (if_statement) + (for_statement) + (return_statement) + (table_constructor) + (arguments) + (return_statement) +] @indent + +[ + "end" + ")" + "}" +] @indent_end + +(return_statement + (expression_list + (function_call))) @dedent + +[ + "end" + "then" + "until" + "}" + ")" + "elseif" + (elseif_statement) + "else" + (else_statement) +] @branch + +(comment) @auto + +(string) @auto diff --git a/bundle/nvim-treesitter/queries/lua/injections.scm b/bundle/nvim-treesitter/queries/lua/injections.scm new file mode 100644 index 000000000..18d20e616 --- /dev/null +++ b/bundle/nvim-treesitter/queries/lua/injections.scm @@ -0,0 +1,19 @@ +((function_call + name: [ + (identifier) @_cdef_identifier + (_ _ (identifier) @_cdef_identifier) + ] + arguments: (arguments (string content: _ @c))) + (#eq? @_cdef_identifier "cdef")) + +((function_call + name: (_) @_vimcmd_identifier + arguments: (arguments (string content: _ @vim))) + (#any-of? @_vimcmd_identifier "vim.cmd" "vim.api.nvim_command" "vim.api.nvim_exec")) + +((function_call + name: (_) @_vimcmd_identifier + arguments: (arguments (string content: _ @query) .)) + (#eq? @_vimcmd_identifier "vim.treesitter.query.set_query")) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/lua/locals.scm b/bundle/nvim-treesitter/queries/lua/locals.scm new file mode 100644 index 000000000..1fad4a1ed --- /dev/null +++ b/bundle/nvim-treesitter/queries/lua/locals.scm @@ -0,0 +1,51 @@ +; Scopes + +[ + (chunk) + (do_statement) + (while_statement) + (repeat_statement) + (if_statement) + (for_statement) + (function_declaration) + (function_definition) +] @scope + +; Definitions + +(assignment_statement + (variable_list + (identifier) @definition.var)) + +(assignment_statement + (variable_list + (dot_index_expression . (_) @definition.associated (identifier) @definition.var))) + +(function_declaration + name: (identifier) @definition.function) + (#set! definition.function.scope "parent") + +(function_declaration + name: (dot_index_expression + . (_) @definition.associated (identifier) @definition.function)) + (#set! definition.method.scope "parent") + +(function_declaration + name: (method_index_expression + . (_) @definition.associated (identifier) @definition.method)) + (#set! definition.method.scope "parent") + +(for_generic_clause + (variable_list + (identifier) @definition.var)) + +(for_numeric_clause + name: (identifier) @definition.var) + +(parameters (identifier) @definition.parameter) + +; References + +[ + (identifier) +] @reference diff --git a/bundle/nvim-treesitter/queries/make/highlights.scm b/bundle/nvim-treesitter/queries/make/highlights.scm new file mode 100644 index 000000000..adde2f9dc --- /dev/null +++ b/bundle/nvim-treesitter/queries/make/highlights.scm @@ -0,0 +1,120 @@ +(comment) @comment + +(conditional + (_ [ + "ifeq" + "else" + "ifneq" + "ifdef" + "ifndef" + ] @conditional) + "endif" @conditional) + +(rule (targets + (word) @function.builtin + (#any-of? @function.builtin + ".DEFAULT" + ".SUFFIXES" + ".DEFAULT" + ".DELETE_ON_ERROR" + ".EXPORT_ALL_VARIABLES" + ".IGNORE" + ".INTERMEDIATE" + ".LOW_RESOLUTION_TIME" + ".NOTPARALLEL" + ".ONESHELL" + ".PHONY" + ".POSIX" + ".PRECIOUS" + ".SECONDARY" + ".SECONDEXPANSION" + ".SILENT" + ".SUFFIXES"))) + +(rule ["&:" ":" "::"] @operator) + +(export_directive "export" @keyword) +(override_directive "override" @keyword) +(include_directive ["include" "-include"] @include) + +(variable_assignment + (word) @symbol) +(variable_assignment [ + "?=" + ":=" + "+=" + "=" + ] @operator) + + +(variable_assignment + (word) @variable.builtin + (#any-of? @variable.builtin + ".DEFAULT_GOAL" + ".EXTRA_PREREQS" + ".FEATURES" + ".INCLUDE_DIRS" + ".RECIPEPREFIX" + ".SHELLFLAGS" + ".VARIABLES" + "MAKEARGS" + "MAKEFILE_LIST" + "MAKEFLAGS" + "MAKE_RESTARTS" + "MAKE_TERMERR" + "MAKE_TERMOUT" + "SHELL" + ) + ) + + + +; Use string to match bash +(variable_reference (word) @string ) @operator + + +(shell_function + ["$" "(" ")"] @operator + "shell" @function.builtin + ) + +(function_call ["$" "(" ")"] @operator) + +(function_call [ + "subst" + "patsubst" + "strip" + "findstring" + "filter" + "filter-out" + "sort" + "word" + "words" + "wordlist" + "firstword" + "lastword" + "dir" + "notdir" + "suffix" + "basename" + "addsuffix" + "addprefix" + "join" + "wildcard" + "realpath" + "abspath" + "error" + "warning" + "info" + "origin" + "flavor" + "foreach" + "if" + "or" + "and" + "call" + "eval" + "file" + "value" + ] @function.builtin +) diff --git a/bundle/nvim-treesitter/queries/make/injections.scm b/bundle/nvim-treesitter/queries/make/injections.scm new file mode 100644 index 000000000..3add7f494 --- /dev/null +++ b/bundle/nvim-treesitter/queries/make/injections.scm @@ -0,0 +1,4 @@ +(comment) @comment + +(shell_text) @bash +(shell_command) @bash diff --git a/bundle/nvim-treesitter/queries/markdown/folds.scm b/bundle/nvim-treesitter/queries/markdown/folds.scm new file mode 100644 index 000000000..f6c34f74a --- /dev/null +++ b/bundle/nvim-treesitter/queries/markdown/folds.scm @@ -0,0 +1,5 @@ +[ + (fenced_code_block) + (indented_code_block) + (list) +] @fold diff --git a/bundle/nvim-treesitter/queries/markdown/highlights.scm b/bundle/nvim-treesitter/queries/markdown/highlights.scm new file mode 100644 index 000000000..3a88ecedd --- /dev/null +++ b/bundle/nvim-treesitter/queries/markdown/highlights.scm @@ -0,0 +1,74 @@ +;; From MDeiml/tree-sitter-markdown +(atx_heading (heading_content) @text.title) +(setext_heading (heading_content) @text.title) + +[ + (atx_h1_marker) + (atx_h2_marker) + (atx_h3_marker) + (atx_h4_marker) + (atx_h5_marker) + (atx_h6_marker) + (setext_h1_underline) + (setext_h2_underline) +] @punctuation.special + +[ + (code_span) + (link_title) + (indented_code_block) + (fenced_code_block) +] @text.literal + +[ + (emphasis_delimiter) + (code_span_delimiter) + (fenced_code_block_delimiter) +] @punctuation.delimiter + +(code_fence_content) @none + +(emphasis) @text.emphasis + +(strong_emphasis) @text.strong + +[ + (link_destination) + (uri_autolink) +] @text.uri + +[ + (link_label) + (link_text) + (image_description) +] @text.reference + +[ + (list_marker_plus) + (list_marker_minus) + (list_marker_star) + (list_marker_dot) + (list_marker_parenthesis) + (thematic_break) +] @punctuation.special + +(block_quote_marker) @punctuation.special + +[ + (backslash_escape) + (hard_line_break) +] @string.escape + +(image "!" @punctuation.delimiter) +(image "[" @punctuation.delimiter) +(image "]" @punctuation.delimiter) +(image "(" @punctuation.delimiter) +; (image ")" @punctuation.delimiter) + +(inline_link "[" @punctuation.delimiter) +(inline_link "]" @punctuation.delimiter) +(inline_link "(" @punctuation.delimiter) +; (inline_link ")" @punctuation.delimiter) + +(shortcut_link "[" @punctuation.delimiter) +(shortcut_link "]" @punctuation.delimiter) diff --git a/bundle/nvim-treesitter/queries/markdown/injections.scm b/bundle/nvim-treesitter/queries/markdown/injections.scm new file mode 100644 index 000000000..6fa047ac9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/markdown/injections.scm @@ -0,0 +1,9 @@ +(fenced_code_block + (info_string + (language) @language) + (code_fence_content) @content) + +((html_block) @html) +((html_tag) @html) + +(document . (thematic_break) (_) @yaml @combined (thematic_break)) diff --git a/bundle/nvim-treesitter/queries/ninja/folds.scm b/bundle/nvim-treesitter/queries/ninja/folds.scm new file mode 100644 index 000000000..341a8b8c1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ninja/folds.scm @@ -0,0 +1 @@ +(body) @fold diff --git a/bundle/nvim-treesitter/queries/ninja/highlights.scm b/bundle/nvim-treesitter/queries/ninja/highlights.scm new file mode 100644 index 000000000..1b31b560c --- /dev/null +++ b/bundle/nvim-treesitter/queries/ninja/highlights.scm @@ -0,0 +1,98 @@ +[ + "default" + "pool" + "rule" + "build" +] @keyword + +[ + "include" + "subninja" +] @include + +[ + ":" +] @punctuation.delimiter + +[ + "=" + "|" + "||" + "|@" +] @operator + +[ + "$" + "{" + "}" +] @punctuation.special + +;; +;; Names +;; ===== +(pool name: (identifier) @type) +(rule name: (identifier) @function) +(let name: (identifier) @constant) +(expansion (identifier) @constant) +(build rule: (identifier) @function) + +;; +;; Paths and Text +;; ============== +(path) @string.special +(text) @string + +;; +;; Builtins +;; ======== +(pool name: (identifier) @type.builtin + (#any-of? @type.builtin "console")) +(build rule: (identifier) @function.builtin + (#any-of? @function.builtin "phony" "dyndep")) + +;; Top level bindings +;; ------------------ +(manifest + (let name: ((identifier) @constant.builtin + (#any-of? @constant.builtin "builddir" + "ninja_required_version")))) + +;; Rules bindings +;; ----------------- +(rule + (body + (let name: (identifier) @constant.builtin + (#not-any-of? @constant.builtin "command" + "depfile" + "deps" + "msvc_deps_prefix" + "description" + "dyndep" + "generator" + "in" + "in_newline" + "out" + "restat" + "rspfile" + "rspfile_content" + "pool")))) + +;; +;; Expansion +;; --------- +(expansion + (identifier) @constant.macro + (#any-of? @constant.macro "in" "out")) + +;; +;; Escape sequences +;; ================ +(quote) @string.escape + +;; +;; Others +;; ====== +[ + (split) + (comment) +] @comment diff --git a/bundle/nvim-treesitter/queries/ninja/indents.scm b/bundle/nvim-treesitter/queries/ninja/indents.scm new file mode 100644 index 000000000..088dec2cd --- /dev/null +++ b/bundle/nvim-treesitter/queries/ninja/indents.scm @@ -0,0 +1,6 @@ +[ + (pool) + (rule) + (build) +] @indent + diff --git a/bundle/nvim-treesitter/queries/nix/folds.scm b/bundle/nvim-treesitter/queries/nix/folds.scm new file mode 100644 index 000000000..72050aa6f --- /dev/null +++ b/bundle/nvim-treesitter/queries/nix/folds.scm @@ -0,0 +1,11 @@ +; Nix doesn't really have blocks, so just guess what people might want folds for +[ + (if) + (with) + (let) + (function) + (attrset) + (rec_attrset) + (list) + (indented_string) +] @fold diff --git a/bundle/nvim-treesitter/queries/nix/highlights.scm b/bundle/nvim-treesitter/queries/nix/highlights.scm new file mode 100644 index 000000000..38b413fe4 --- /dev/null +++ b/bundle/nvim-treesitter/queries/nix/highlights.scm @@ -0,0 +1,120 @@ +; basic keywords +[ + ("assert") + ("with") + ("let") + ("in") + ("rec") + ("inherit") +] @keyword + +; if/then/else +[ + ("if") + ("then") + ("else") +] @conditional + +; field access default (`a.b or c`) +("or") @keyword.operator + +; comments +(comment) @comment + +; strings +[ (string) (indented_string) ] @string + +; paths and URLs +[ (path) (spath) (uri) ] @string.special + +; escape sequences +(escape_sequence) @string.escape + +; delimiters +[ + "." + ";" + "," +] @punctuation.delimiter + +; brackets +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +; `?` in `{ x ? y }:`, used to set defaults for named function arguments +; I'm not really sure what group this should go in, but it should probably have highlighting, so I'm putting it in @punctuation.special +(formal "?" @punctuation.special) + +; `...` in `{ ... }`, used to ignore unknown named function arguments (see above) +(ellipses) @punctuation.special + +; `:` in `x: y`, used to separate function argument from body (see above) +(function ":" @punctuation.special) + +; basic identifiers +(identifier) @variable + +; builtin functions +((identifier) @_i (#match? @_i "^(builtins|baseNameOf|dirOf|fetchTarball|map|removeAttrs|toString)$")) @variable.builtin + +; display entire builtins path as builtin (ex. `builtins.filter` is highlighted as one long builtin) +(select ((identifier) @_i (#eq? @_i "builtins")) (attrpath (attr_identifier) @variable.builtin)) @variable.builtin + +; import +((identifier) @_i (#eq? @_i "import")) @include + +; null +((identifier) @_i (#eq? @_i "import")) @constant.builtin + +; these are technically functions but they act more like keywords (abort and throw are control flow, derivation is a core language construct) +((identifier) @_i (#match? @_i "^(abort|derivation|throw)$")) @keyword + +; booleans +((identifier) @_i (#match? @_i "^(true|false)$")) @boolean + +; string interpolation (this was very annoying to get working properly) +(interpolation "${" @punctuation.special (_) "}" @punctuation.special) @none + +; fields (the `.` in `a.b = c;` isn't included) +(attrset (bind . (attrpath (attr_identifier) @field))) +(rec_attrset (bind . (attrpath (attr_identifier) @field))) + +; unary operators +(unary "-" @operator) +(unary "!" @operator) + +; binary operators +(binary "?" @operator) +(binary "++" @operator) +(binary "*" @operator) +(binary "/" @operator) +(binary "+" @operator) +(binary "-" @operator) +(binary "//" @operator) +(binary "<" @operator) +(binary "<=" @operator) +(binary ">" @operator) +(binary ">=" @operator) +(binary "==" @operator) +(binary "!=" @operator) +(binary "&&" @operator) +(binary "||" @operator) +(binary "->" @operator) + +; integers, also highlight a unary - +[ + (unary "-" (integer)) + (integer) +] @number + +; floats, also highlight a unary - +[ + (unary "-" (float)) + (float) +] @float diff --git a/bundle/nvim-treesitter/queries/nix/injections.scm b/bundle/nvim-treesitter/queries/nix/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/nix/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/nix/locals.scm b/bundle/nvim-treesitter/queries/nix/locals.scm new file mode 100644 index 000000000..1720a848c --- /dev/null +++ b/bundle/nvim-treesitter/queries/nix/locals.scm @@ -0,0 +1,15 @@ +; let bindings +(let (bind . (attrpath) @definition.var)) @scope + +; rec attrsets +(rec_attrset (bind . (attrpath) @definition.field)) @scope + +; functions and parameters +(function . [ + (identifier) @definition.parameter + (formals (formal . (identifier) @definition.parameter)) +]) @scope +((formals) "@" (identifier) @definition.parameter) ; I couldn't get this to work properly inside the (function) + +; some identifiers can't be references, but @reference doesn't seem to have an inverse like @none +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/ocaml/folds.scm b/bundle/nvim-treesitter/queries/ocaml/folds.scm new file mode 100644 index 000000000..1d45dbbde --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml/folds.scm @@ -0,0 +1,30 @@ +[ + (let_binding) + (external) + (type_binding) + (exception_definition) + (module_binding) + (module_type_definition) + (open_module) + (include_module) + (include_module_type) + (class_binding) + (class_type_binding) + (value_specification) + (inheritance_specification) + (instance_variable_specification) + (method_specification) + (inheritance_definition) + (instance_variable_definition) + (method_definition) + (class_initializer) + (match_case) + (attribute) + (item_attribute) + (floating_attribute) + (extension) + (item_extension) + (quoted_extension) + (quoted_item_extension) + (comment) +] @fold diff --git a/bundle/nvim-treesitter/queries/ocaml/highlights.scm b/bundle/nvim-treesitter/queries/ocaml/highlights.scm new file mode 100644 index 000000000..eb41fbb26 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml/highlights.scm @@ -0,0 +1,173 @@ +; Modules +;-------- + +[(module_name) (module_type_name)] @namespace + +; Types +;------ + +( + (type_constructor) @type.builtin + (#any-of? @type.builtin + "int" "char" "bytes" "string" "float" + "bool" "unit" "exn" "array" "list" "option" + "int32" "int64" "nativeint" "format6" "lazy_t") +) + +[(class_name) (class_type_name) (type_constructor)] @type + +[(constructor_name) (tag)] @constructor + +; Functions +;---------- + +(let_binding + pattern: (value_name) @function + (parameter)) + +(let_binding + pattern: (value_name) @function + body: [(fun_expression) (function_expression)]) + +(value_specification (value_name) @function) + +(external (value_name) @function) + +(method_name) @method + +; Variables +;---------- + +[(value_name) (type_variable)] @variable + +(value_pattern) @parameter + +; Application +;------------ + +(infix_expression + left: (value_path (value_name) @function) + (infix_operator) @operator + (#eq? @operator "@@")) + +(infix_expression + (infix_operator) @operator + right: (value_path (value_name) @function) + (#eq? @operator "|>")) + +(application_expression + function: (value_path (value_name) @function)) + +( + (value_name) @function.builtin + (#match? @function.builtin "^(raise(_notrace)?|failwith|invalid_arg)$") +) + +; Properties +;----------- + +[(label_name) (field_name) (instance_variable_name)] @property + +; Constants +;---------- + +(unit) @constant.builtin + +(boolean) @boolean + +[(number) (signed_number)] @number + +(character) @character + +(string) @string + +(quoted_string "{" @string "}" @string) @string + +(escape_sequence) @string.escape + +[ + (conversion_specification) + (pretty_printing_indication) +] @string.special + +; Keywords +;--------- + +[ + "and" "as" "assert" "begin" "class" "constraint" + "end" "external" "in" + "inherit" "initializer" "lazy" "let" "match" "method" "module" + "mutable" "new" "nonrec" "object" "of" "private" "rec" "sig" "struct" + "type" "val" "virtual" "when" "with" +] @keyword + +["fun" "function" "functor"] @keyword.function + +["if" "then" "else"] @conditional + +["exception" "try"] @exception + +["include" "open"] @include + +["for" "to" "downto" "while" "do" "done"] @repeat + +; Punctuation +;------------ + +(attribute ["[@" "]"] @punctuation.special) +(item_attribute ["[@@" "]"] @punctuation.special) +(floating_attribute ["[@@@" "]"] @punctuation.special) +(extension ["[%" "]"] @punctuation.special) +(item_extension ["[%%" "]"] @punctuation.special) +(quoted_extension ["{%" "}"] @punctuation.special) +(quoted_item_extension ["{%%" "}"] @punctuation.special) + +"%" @punctuation.special + +["(" ")" "[" "]" "{" "}" "[|" "|]" "[<" "[>"] @punctuation.bracket + +(object_type ["<" ">"] @punctuation.bracket) + +[ + "," "." ";" ":" "=" "|" "~" "?" "+" "-" "!" ">" "&" + "->" ";;" ":>" "+=" ":=" ".." +] @punctuation.delimiter + +; Operators +;---------- + +[ + (prefix_operator) + (sign_operator) + (infix_operator) + (hash_operator) + (indexing_operator) + (let_operator) + (and_operator) + (match_operator) +] @operator + +(match_expression (match_operator) @keyword) + +(value_definition [(let_operator) (and_operator)] @keyword) + +;; TODO: this is an error now +;(prefix_operator "!" @operator) + +(infix_operator ["&" "+" "-" "=" ">" "|" "%"] @operator) + +(signed_number ["+" "-"] @operator) + +["*" "#" "::" "<-"] @operator + +; Attributes +;----------- + +(attribute_id) @property + +; Comments +;--------- + +[(comment) (line_number_directive) (directive) (shebang)] @comment + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/ocaml/injections.scm b/bundle/nvim-treesitter/queries/ocaml/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/ocaml/locals.scm b/bundle/nvim-treesitter/queries/ocaml/locals.scm new file mode 100644 index 000000000..9321ced2e --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml/locals.scm @@ -0,0 +1,77 @@ +; Scopes +;------- + +[ + (compilation_unit) + (structure) + (signature) + (module_binding) + (functor) + (let_binding) + (match_case) + (class_binding) + (class_function) + (method_definition) + (let_expression) + (fun_expression) + (for_expression) + (let_class_expression) + (object_expression) + (attribute_payload) +] @scope + +; Definitions +;------------ + +(value_pattern) @definition.var + +(let_binding + pattern: (value_name) @definition.var + (set! definition.var.scope "parent")) + +(let_binding + pattern: (tuple_pattern (value_name) @definition.var) + (set! definition.var.scope "parent")) + +(let_binding + pattern: (record_pattern (field_pattern (value_name) @definition.var)) + (set! definition.var.scope "parent")) + +(external (value_name) @definition.var) + +(type_binding (type_constructor) @definition.type) + +(abstract_type (type_constructor) @definition.type) + +(method_definition (method_name) @definition.method) + +(module_binding + (module_name) @definition.namespace + (set! definition.namespace.scope "parent")) + +(module_parameter (module_name) @definition.namespace) + +(module_type_definition (module_type_name) @definition.type) + +; References +;------------ + +(value_path . + (value_name) @reference + (set! reference.kind "var")) + +(type_constructor_path . + (type_constructor) @reference + (set! reference.kind "type")) + +(method_invocation + (method_name) @reference + (set! reference.kind "method")) + +(module_path . + (module_name) @reference + (set! reference.kind "type")) + +(module_type_path . + (module_type_name) @reference + (set! reference.kind "type")) diff --git a/bundle/nvim-treesitter/queries/ocaml_interface/folds.scm b/bundle/nvim-treesitter/queries/ocaml_interface/folds.scm new file mode 100644 index 000000000..6d3dfbcf2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml_interface/folds.scm @@ -0,0 +1 @@ +; inherits: ocaml diff --git a/bundle/nvim-treesitter/queries/ocaml_interface/highlights.scm b/bundle/nvim-treesitter/queries/ocaml_interface/highlights.scm new file mode 100644 index 000000000..6d3dfbcf2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml_interface/highlights.scm @@ -0,0 +1 @@ +; inherits: ocaml diff --git a/bundle/nvim-treesitter/queries/ocaml_interface/injections.scm b/bundle/nvim-treesitter/queries/ocaml_interface/injections.scm new file mode 100644 index 000000000..6d3dfbcf2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml_interface/injections.scm @@ -0,0 +1 @@ +; inherits: ocaml diff --git a/bundle/nvim-treesitter/queries/ocaml_interface/locals.scm b/bundle/nvim-treesitter/queries/ocaml_interface/locals.scm new file mode 100644 index 000000000..6d3dfbcf2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocaml_interface/locals.scm @@ -0,0 +1 @@ +; inherits: ocaml diff --git a/bundle/nvim-treesitter/queries/ocamllex/highlights.scm b/bundle/nvim-treesitter/queries/ocamllex/highlights.scm new file mode 100644 index 000000000..513316159 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocamllex/highlights.scm @@ -0,0 +1,29 @@ + +[(lexer_argument) (regexp_name) (any)] @type + +(lexer_entry_name) @function + +["as" "let" "and" "parse" "rule"] @keyword + +[(eof) (character)] @character +(string) @string + +(ocaml) @none + +(character_range "-" @operator) +(character_set "^" @operator) +(regexp_alternative ["|"] @operator) +(regexp_difference ["#"] @operator) +(regexp_option ["?"] @operator) +(regexp_repetition ["*"] @operator) +(regexp_strict_repetition ["+"] @operator) + +(action ["{" "}"] @punctuation.special) +(character_set ["[" "]"] @punctuation.bracket) +(parenthesized_regexp ["(" ")"] @punctuation.bracket) + +["="] @punctuation.delimiter +(lexer_entry "|" @punctuation.delimiter) + +(comment) @comment +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/ocamllex/injections.scm b/bundle/nvim-treesitter/queries/ocamllex/injections.scm new file mode 100644 index 000000000..337d8073e --- /dev/null +++ b/bundle/nvim-treesitter/queries/ocamllex/injections.scm @@ -0,0 +1,3 @@ +(ocaml) @ocaml + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/pascal/folds.scm b/bundle/nvim-treesitter/queries/pascal/folds.scm new file mode 100644 index 000000000..6db2857bf --- /dev/null +++ b/bundle/nvim-treesitter/queries/pascal/folds.scm @@ -0,0 +1,33 @@ +[ + (interface) + (implementation) + (initialization) + (finalization) + + (if) + (ifElse) + (while) + (repeat) + (for) + (foreach) + (try) + (case) + (caseCase) + (asm) + (with) + + (declVar) + (declConst) + (declEnum) + (declProcRef) + (declExports) + (declProcRef) + (declType) + (defProc) + (declField) + (declProp) + + (comment) +] @fold + +(interface (declProc) @fold) diff --git a/bundle/nvim-treesitter/queries/pascal/highlights.scm b/bundle/nvim-treesitter/queries/pascal/highlights.scm new file mode 100644 index 000000000..77c509cc1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/pascal/highlights.scm @@ -0,0 +1,389 @@ +; -- Keywords +[ + (kProgram) + (kLibrary) + (kUnit) + (kUses) + + (kBegin) + (kEnd) + (kAsm) + + (kVar) + (kThreadvar) + (kConst) + (kResourcestring) + (kConstref) + (kOut) + (kType) + (kLabel) + (kExports) + + (kAbsolute) + + (kProperty) + (kRead) + (kWrite) + (kImplements) + + (kClass) + (kInterface) + (kObject) + (kRecord) + (kObjcclass) + (kObjccategory) + (kObjcprotocol) + (kArray) + (kFile) + (kString) + (kSet) + (kOf) + (kHelper) + (kPacked) + + (kInherited) + + (kGeneric) + (kSpecialize) + + (kFunction) + (kProcedure) + (kConstructor) + (kDestructor) + (kOperator) + (kReference) + + (kInterface) + (kImplementation) + (kInitialization) + (kFinalization) + + (kPublished) + (kPublic) + (kProtected) + (kPrivate) + (kStrict) + (kRequired) + (kOptional) + + (kTry) + (kExcept) + (kFinally) + (kRaise) + (kOn) + (kCase) + (kWith) + (kGoto) +] @keyword + +[ + (kFor) + (kTo) + (kDownto) + (kDo) + (kWhile) + (kRepeat) + (kUntil) +] @repeat + +[ + (kIf) + (kThen) + (kElse) +] @conditional + + +; -- Attributes + +[ + (kDefault) + (kIndex) + (kNodefault) + (kStored) + + (kStatic) + (kVirtual) + (kAbstract) + (kSealed) + (kDynamic) + (kOverride) + (kOverload) + (kReintroduce) + (kInline) + + (kForward) + + (kStdcall) + (kCdecl) + (kCppdecl) + (kPascal) + (kRegister) + (kMwpascal) + (kExternal) + (kName) + (kMessage) + (kDeprecated) + (kExperimental) + (kPlatform) + (kUnimplemented) + (kCvar) + (kExport) + (kFar) + (kNear) + (kSafecall) + (kAssembler) + (kNostackframe) + (kInterrupt) + (kNoreturn) + (kIocheck) + (kLocal) + (kHardfloat) + (kSoftfloat) + (kMs_abi_default) + (kMs_abi_cdecl) + (kSaveregisters) + (kSysv_abi_default) + (kSysv_abi_cdecl) + (kVectorcall) + (kVarargs) + (kWinapi) + (kAlias) + (kDelayed) + + (rttiAttributes) + (procAttribute) + +] @attribute + +(procAttribute (kPublic) @attribute) + +; -- Punctuation & operators + +[ + "(" + ")" + "[" + "]" +] @punctuation.bracket + +[ + ";" + "," + ":" + (kEndDot) +] @punctuation.delimiter + +[ + ".." +] @punctuation.special + +[ + (kDot) + (kAdd) + (kSub) + (kMul) + (kFdiv) + (kAssign) + (kAssignAdd) + (kAssignSub) + (kAssignMul) + (kAssignDiv) + (kEq) + (kLt) + (kLte) + (kGt) + (kGte) + (kNeq) + (kAt) + (kHat) +] @operator + +[ + (kOr) + (kXor) + (kDiv) + (kMod) + (kAnd) + (kShl) + (kShr) + (kNot) + (kIs) + (kAs) + (kIn) +] @keyword.operator + +; -- Builtin constants + +[ + (kTrue) + (kFalse) +] @boolean + +[ + (kNil) +] @constant.builtin + +; -- Literals + +(literalNumber) @number +(literalString) @string + +; -- Variables + +(exprBinary (identifier) @variable) +(exprUnary (identifier) @variable) +(assignment (identifier) @variable) +(exprBrackets (identifier) @variable) +(exprParens (identifier) @variable) +(exprDot (identifier) @variable) +(exprTpl (identifier) @variable) +(exprArgs (identifier) @variable) +(defaultValue (identifier) @variable) + +; -- Comments + +(comment) @comment +(pp) @function.macro + +; -- Type declaration + +(declType name: (identifier) @type) +(declType name: (genericTpl entity: (identifier) @type)) + +; -- Procedure & function declarations + +; foobar +(declProc name: (identifier) @function) +; foobar +(declProc name: (genericTpl entity: (identifier) @function)) +; foo.bar +(declProc name: (genericDot rhs: (identifier) @function)) +; foo.bar +(declProc name: (genericDot rhs: (genericTpl entity: (identifier) @function))) + +; Treat property declarations like functions + +(declProp name: (identifier) @function) +(declProp getter: (identifier) @property) +(declProp setter: (identifier) @property) + +; -- Function parameters + +(declArg name: (identifier) @parameter) + +; -- Template parameters + +(genericArg name: (identifier) @parameter) +(genericArg type: (typeref) @type) + +(declProc name: (genericDot lhs: (identifier) @type)) +(declType (genericDot (identifier) @type)) + +(genericDot (genericTpl (identifier) @type)) +(genericDot (genericDot (identifier) @type)) + +(genericTpl entity: (identifier) @type) +(genericTpl entity: (genericDot (identifier) @type)) + +; -- Exception parameters + +(exceptionHandler variable: (identifier) @parameter) + +; -- Type usage + +(typeref) @type + +; -- Constant usage + +[ + (caseLabel) + (label) +] @constant + +(procAttribute (identifier) @constant) +(procExternal (identifier) @constant) + +; -- Variable & constant declarations +; (This is only questionable because we cannot detect types of identifiers +; declared in other units, so the results will be inconsistent) + +(declVar name: (identifier) @variable) +(declConst name: (identifier) @constant) +(declEnumValue name: (identifier) @constant) + +; -- Fields + +(exprDot rhs: (identifier) @property) +(exprDot rhs: (exprDot) @property) +(declClass (declField name:(identifier) @property)) +(declSection (declField name:(identifier) @property)) +(declSection (declVars (declVar name:(identifier) @property))) + +(recInitializerField name:(identifier) @property) + + +;;; ---------------------------------------------- ;;; +;;; EVERYTHING BELOW THIS IS OF QUESTIONABLE VALUE ;;; +;;; ---------------------------------------------- ;;; + + +; -- Procedure name in calls with parentheses +; (Pascal doesn't require parentheses for procedure calls, so this will not +; detect all calls) + +; foobar +(exprCall entity: (identifier) @function) +; foobar +(exprCall entity: (exprTpl entity: (identifier) @function)) +; foo.bar +(exprCall entity: (exprDot rhs: (identifier) @function)) +; foo.bar +(exprCall entity: (exprDot rhs: (exprTpl entity: (identifier) @function))) + +(inherited) @function + +; -- Heuristic for procedure/function calls without parentheses +; (If a statement consists only of an identifier, assume it's a procedure) +; (This will still not match all procedure calls, and also may produce false +; positives in rare cases, but only for nonsensical code) + +(statement (identifier) @function) +(statement (exprDot rhs: (identifier) @function)) +(statement (exprTpl entity: (identifier) @function)) +(statement (exprDot rhs: (exprTpl entity: (identifier) @function))) + +; -- Break, Continue & Exit +; (Not ideal: ideally, there would be a way to check if these special +; identifiers are shadowed by a local variable) +(statement ((identifier) @keyword.return + (#lua-match? @keyword.return "^[eE][xX][iI][tT]$"))) +(statement (exprCall entity: ((identifier) @keyword.return + (#lua-match? @keyword.return "^[eE][xX][iI][tT]$")))) +(statement ((identifier) @repeat + (#lua-match? @repeat "^[bB][rR][eE][aA][kK]$"))) +(statement ((identifier) @repeat + (#lua-match? @repeat "^[cC][oO][nN][tT][iI][nN][uU][eE]$"))) + +; -- Identifier type inferrence + +; VERY QUESTIONABLE: Highlighting of identifiers based on spelling +(exprBinary ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprUnary ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(assignment rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprBrackets ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprParens ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprDot rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprTpl args: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(exprArgs ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(declEnumValue ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) +(defaultValue ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) diff --git a/bundle/nvim-treesitter/queries/pascal/indents.scm b/bundle/nvim-treesitter/queries/pascal/indents.scm new file mode 100644 index 000000000..829054ddb --- /dev/null +++ b/bundle/nvim-treesitter/queries/pascal/indents.scm @@ -0,0 +1,32 @@ +[ + (statement) + (declVars) + (declConsts) + (declTypes) + (declProc) + (declArgs) + (declUses) + (declClass) + (exprArgs) + (exprSubscript) + (exprBrackets) + (exprParens) + (recInitializer) + (arrInitializer) + (defaultValue) +] @indent + +(defProc (block) @indent) + +[ + (kEnd) + (kFinally) + (kDo) + (kUntil) + (kExcept) + (kElse) + (kThen) + (declSection) + "]" + ")" +] @branch diff --git a/bundle/nvim-treesitter/queries/pascal/injections.scm b/bundle/nvim-treesitter/queries/pascal/injections.scm new file mode 100644 index 000000000..c410fbb41 --- /dev/null +++ b/bundle/nvim-treesitter/queries/pascal/injections.scm @@ -0,0 +1,4 @@ +(comment) @comment +; There is no parser for assembly language yet. Add an injection here when we +; have a parser. +; (asmBody) @asm diff --git a/bundle/nvim-treesitter/queries/pascal/locals.scm b/bundle/nvim-treesitter/queries/pascal/locals.scm new file mode 100644 index 000000000..b97cb096f --- /dev/null +++ b/bundle/nvim-treesitter/queries/pascal/locals.scm @@ -0,0 +1,25 @@ + +(root) @scope + +(defProc) @scope +(lambda) @scope +(interface (declProc) @scope) +(declSection (declProc) @scope) +(declClass (declProc) @scope) +(declHelper (declProc) @scope) +(declProcRef) @scope + +(exceptionHandler) @scope +(exceptionHandler variable: (identifier) @definition) + +(declArg name: (identifier) @definition) +(declVar name: (identifier) @definition) +(declConst name: (identifier) @definition) +(declLabel name: (identifier) @definition) +(genericArg name: (identifier) @definition) +(declEnumValue name: (identifier) @definition) +(declType name: (identifier) @definition) +(declType name: (genericTpl entity: (identifier) @definition)) + +(declProc name: (identifier) @definition) +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/perl/folds.scm b/bundle/nvim-treesitter/queries/perl/folds.scm new file mode 100644 index 000000000..994d569bc --- /dev/null +++ b/bundle/nvim-treesitter/queries/perl/folds.scm @@ -0,0 +1,12 @@ +[ + (function_definition) + (if_statement) + (unless_statement) + (while_statement) + (until_statement) + (for_statement_1) + (for_statement_2) + (foreach_statement) + (standalone_block) + (pod_statement) +] @fold diff --git a/bundle/nvim-treesitter/queries/perl/highlights.scm b/bundle/nvim-treesitter/queries/perl/highlights.scm new file mode 100644 index 000000000..66403530d --- /dev/null +++ b/bundle/nvim-treesitter/queries/perl/highlights.scm @@ -0,0 +1,182 @@ +; Misc keywords +[ + "my" "our" "local" + "next" "last" "redo" + "goto" + "package" +; "do" +; "eval" +] @keyword + +; Keywords for including +[ "use" "no" "require" ] @include + +; Keywords that mark conditional statements +[ "if" "elsif" "unless" "else" ] @conditional + +; Keywords that mark repeating loops +[ "while" "until" "for" "foreach" ] @repeat + +; Keyword for return expressions +[ "return" ] @keyword.return + +; Keywords for phaser blocks +; TODO: Ideally these would be @keyword.phaser but vim-treesitter doesn't +; have such a thing yet +[ "BEGIN" "CHECK" "UNITCHECK" "INIT" "END" ] @keyword.function + +; Keywords to define a function +[ "sub" ] @keyword.function + +; Lots of builtin functions, except tree-sitter-perl doesn't emit most of +; these yet +;[ +; "print" "printf" "sprintf" "say" +; "push" "pop" "shift" "unshift" "splice" +; "exists" "delete" "keys" "values" +; "each" +;] @function.builtin + +; Keywords that are regular infix operators +[ + "and" "or" "not" "xor" + "eq" "ne" "lt" "le" "ge" "gt" "cmp" +] @keyword.operator + +; Variables +[ + (scalar_variable) + (array_variable) + (hash_variable) +] @variable + +; Special builtin variables +[ + (special_scalar_variable) + (special_array_variable) + (special_hash_variable) + (special_literal) + (super) +] @variable.builtin + +; Integer numbers +[ + (integer) + (hexadecimal) +] @number + +; Float numbers +[ + (floating_point) + (scientific_notation) +] @float + +; version sortof counts as a kind of multipart integer +(version) @constant + +; Package names are types +(package_name) @type + +; The special SUPER:: could be called a namespace. It isn't really but it +; should highlight differently and we might as well do it this way +(super) @namespace + +; Comments are comments +(comments) @comment + +; POD should be handled specially with its own embedded subtype but for now +; we'll just have to do this. +(pod_statement) @text + +(method_invocation + function_name: (identifier) @method) +(call_expression + function_name: (identifier) @function) + +;; ---------- + +(use_constant_statement + constant: (identifier) @constant) + +(named_block_statement + function_name: (identifier) @function) + +(function_definition + name: (identifier) @function) + +[ +(function) +(map) +(grep) +(bless) +] @function + +[ +"(" +")" +"[" +"]" +"{" +"}" +] @punctuation.bracket +(standard_input_to_variable) @punctuation.bracket + +[ +"=~" +"!~" +"=" +"==" +"+" +"-" +"." +"//" +"||" +(arrow_operator) +(hash_arrow_operator) +(array_dereference) +(hash_dereference) +(to_reference) +(type_glob) +(hash_access_variable) +(ternary_expression) +(ternary_expression_in_hash) +] @operator + +[ +(regex_option) +(regex_option_for_substitution) +(regex_option_for_transliteration) +] @parameter + +(type_glob + (identifier) @variable) + +[ +(word_list_qw) +(command_qx_quoted) +(string_single_quoted) +(string_double_quoted) +(string_qq_quoted) +(bareword) +(transliteration_tr_or_y) +] @string + +[ +(regex_pattern_qr) +(patter_matcher_m) +(substitution_pattern_s) +] @string.regex + +(escape_sequence) @string.escape + +[ +"," +(semi_colon) +(start_delimiter) +(end_delimiter) +(ellipsis_statement) +] @punctuation.delimiter + +(function_attribute) @field + +(function_signature) @type diff --git a/bundle/nvim-treesitter/queries/php/folds.scm b/bundle/nvim-treesitter/queries/php/folds.scm new file mode 100644 index 000000000..3d447829a --- /dev/null +++ b/bundle/nvim-treesitter/queries/php/folds.scm @@ -0,0 +1,6 @@ +[ + (class_declaration) + (compound_statement) + (switch_statement) + (case_statement) +] @fold diff --git a/bundle/nvim-treesitter/queries/php/highlights.scm b/bundle/nvim-treesitter/queries/php/highlights.scm new file mode 100644 index 000000000..16f478465 --- /dev/null +++ b/bundle/nvim-treesitter/queries/php/highlights.scm @@ -0,0 +1,284 @@ +; Variables + +(variable_name) @variable + +; Types + +[ + (primitive_type) + (cast_type) + ] @type.builtin +(named_type (name)) @type +(named_type (qualified_name)) @type +(class_declaration + name: (name) @type) +(base_clause + [(name) (qualified_name)] @type) +(enum_declaration + name: (name) @type) +(interface_declaration + name: (name) @type) +(namespace_use_clause + [(name) (qualified_name)] @type) +(namespace_aliasing_clause (name)) @type +(class_interface_clause + [(name) (qualified_name)] @type) +(scoped_call_expression + scope: [(name) (qualified_name)] @type) +(class_constant_access_expression + . [(name) (qualified_name)] @type + (name) @constant) +(trait_declaration + name: (name) @type) +(use_declaration + (name) @type) + +; Functions, methods, constructors + +(array_creation_expression "array" @function.builtin) +(list_literal "list" @function.builtin) + +(method_declaration + name: (name) @method) + +(function_call_expression + function: (qualified_name (name)) @function) + +(function_call_expression + (name) @function) + +(scoped_call_expression + name: (name) @function) + +(member_call_expression + name: (name) @method) + +(function_definition + name: (name) @function) + +(nullsafe_member_call_expression + name: (name) @method) + +(method_declaration + name: (name) @constructor + (#eq? @constructor "__construct")) +(object_creation_expression + [(name) (qualified_name)] @constructor) + +; Parameters +[ + (simple_parameter) + (variadic_parameter) +] @parameter + +(argument + (name) @parameter) + +; Member + +(property_element + (variable_name) @property) + +(member_access_expression + name: (variable_name (name)) @property) + +(member_access_expression + name: (name) @property) + +; Variables + +(relative_scope) @variable.builtin + +((name) @constant + (#vim-match? @constant "^_?[A-Z][A-Z\d_]*$")) +((name) @constant.builtin + (#vim-match? @constant.builtin "^__[A-Z][A-Z\d_]+__$")) + +(const_declaration (const_element (name) @constant)) + +((name) @variable.builtin + (#eq? @variable.builtin "this")) + +; Namespace +(namespace_definition + name: (namespace_name) @namespace) + +; Conditions ( ? : ) +(conditional_expression) @conditional +; Basic tokens + +[ + (string) + (heredoc) + (shell_command_expression) ; backtick operator: `ls -la` + ] @string +(encapsed_string (escape_sequence) @string.escape) + +(boolean) @boolean +(null) @constant.builtin +(integer) @number +(float) @float +(comment) @comment + +(named_label_statement) @label +; Keywords + +[ + "and" + "as" + "instanceof" + "or" + "xor" +] @keyword.operator + +[ + "fn" + "function" +] @keyword.function + +[ + "$" + "abstract" + "break" + "class" + "clone" + "const" + "declare" + "default" + "echo" + "enddeclare" + "enum" + "extends" + "final" + "global" + "goto" + "implements" + "insteadof" + "interface" + "namespace" + "new" + "private" + "protected" + "public" + "static" + "trait" + "unset" + ] @keyword + +[ + "return" + "yield" +] @keyword.return + +[ + "case" + "else" + "elseif" + "endif" + "endswitch" + "if" + "switch" + "match" + "??" + ] @conditional + +[ + "continue" + "do" + "endfor" + "endforeach" + "endwhile" + "for" + "foreach" + "while" + ] @repeat + +[ + "catch" + "finally" + "throw" + "try" + ] @exception + +[ + "include_once" + "include" + "require_once" + "require" + "use" + ] @include + +[ + "," + ";" + ] @punctuation.delimiter + +[ + (php_tag) + "?>" + "(" + ")" + "[" + "]" + "{" + "}" + ] @punctuation.bracket + +[ + "=" + + "." + "-" + "*" + "/" + "+" + "%" + "**" + + "~" + "|" + "^" + "&" + "<<" + ">>" + + "->" + "?->" + + "=>" + + "<" + "<=" + ">=" + ">" + "<>" + "==" + "!=" + "===" + "!==" + + "!" + "&&" + "||" + + ".=" + "-=" + "+=" + "*=" + "/=" + "%=" + "**=" + "&=" + "|=" + "^=" + "<<=" + ">>=" + "??=" + "--" + "++" + + "@" + "::" +] @operator + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/php/indents.scm b/bundle/nvim-treesitter/queries/php/indents.scm new file mode 100644 index 000000000..2247f17ac --- /dev/null +++ b/bundle/nvim-treesitter/queries/php/indents.scm @@ -0,0 +1,21 @@ +[ + (array_creation_expression) + (compound_statement) + (declaration_list) + (binary_expression) + (return_statement) + (arguments) + (formal_parameters) +] @indent + +[ + ")" + "}" + "]" +] @branch + +[ + (comment) +] @ignore + +(compound_statement "}" @indent_end) diff --git a/bundle/nvim-treesitter/queries/php/injections.scm b/bundle/nvim-treesitter/queries/php/injections.scm new file mode 100644 index 000000000..c90e2f937 --- /dev/null +++ b/bundle/nvim-treesitter/queries/php/injections.scm @@ -0,0 +1,3 @@ +(text) @html + +(comment) @phpdoc diff --git a/bundle/nvim-treesitter/queries/php/locals.scm b/bundle/nvim-treesitter/queries/php/locals.scm new file mode 100644 index 000000000..277888d5c --- /dev/null +++ b/bundle/nvim-treesitter/queries/php/locals.scm @@ -0,0 +1,87 @@ +; Scopes +;------- + +((class_declaration + name: (name) @definition.type) @scope + (set! definition.type.scope "parent")) + +((method_declaration + name: (name) @definition.method) @scope + (set! definition.method.scope "parent")) + +((function_definition + name: (name) @definition.function) @scope + (set! definition.function.scope "parent")) + +(anonymous_function_creation_expression + (anonymous_function_use_clause + (variable_name + (name) @definition.var))) @scope + +; Definitions +;------------ + +(simple_parameter + (variable_name + (name) @definition.var)) + +(foreach_statement + (pair + (variable_name + (name) @definition.var))) + +(foreach_statement + (variable_name + (name) @reference + (set! reference.kind "var")) + (variable_name + (name) @definition.var)) + +(property_declaration + (property_element + (variable_name + (name) @definition.field))) + +(namespace_use_clause + (qualified_name + (name) @definition.type)) + +; References +;------------ + +(named_type + (name) @reference + (set! reference.kind "type")) + +(named_type + (qualified_name) @reference + (set! reference.kind "type")) + +(variable_name + (name) @reference + (set! reference.kind "var")) + +(member_access_expression + name: (name) @reference + (set! reference.kind "field")) + +(member_call_expression + name: (name) @reference + (set! reference.kind "method")) + +(function_call_expression + function: (qualified_name + (name) @reference + (set! reference.kind "function"))) + +(object_creation_expression + (qualified_name + (name) @reference + (set! reference.kind "type"))) + +(scoped_call_expression + scope: (qualified_name + (name) @reference + (set! reference.kind "type")) + name: (name) @reference + (set! reference.kind "method")) diff --git a/bundle/nvim-treesitter/queries/phpdoc/highlights.scm b/bundle/nvim-treesitter/queries/phpdoc/highlights.scm new file mode 100644 index 000000000..b0433da9f --- /dev/null +++ b/bundle/nvim-treesitter/queries/phpdoc/highlights.scm @@ -0,0 +1,42 @@ +(tag_name) @attribute +(tag + (tag_name) @_tag (#eq? @_tag "@param") + (variable_name) @parameter +) +(tag + (tag_name) @_tag (#eq? @_tag "@property") + (variable_name) @property +) +(tag + (tag_name) @_tag (#eq? @_tag "@var") + (variable_name) @variable +) +(tag + (tag_name) @_tag (#eq? @_tag "@method") + (name) @method +) +(parameter + (variable_name) @parameter) +(type_list + [ + (array_type) + (primitive_type) + (named_type) + ] @type) +(tag + (description (text) @text)) +(tag + [ + (author_name) + (version) + ] @text) +(tag + (email_address) @text.uri +) + +(type_list "|" @keyword) +(variable_name "$" @keyword) +(tag + (tag_name) @_tag_name + ["<" ">"] @keyword + (#eq? @_tag_name "@author")) diff --git a/bundle/nvim-treesitter/queries/pioasm/highlights.scm b/bundle/nvim-treesitter/queries/pioasm/highlights.scm new file mode 100644 index 000000000..c455103f9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/pioasm/highlights.scm @@ -0,0 +1,30 @@ +[ (line_comment) (block_comment) ] @comment + +(label_decl) @label + +(string) @string + +(instruction + opcode: _ @keyword) + +[ "pins" "x" "y" "null" "isr" "osr" "status" "pc" "exec" ] @variable.builtin + +(out_target "pindirs" @variable.builtin) +(directive "pindirs" @keyword) + +(condition [ "--" "!=" ] @operator) +(expression [ "+" "-" "*" "/" "|" "&" "^" "::" ] @operator) +(not) @operator + +[ "optional" "opt" "side" "sideset" "side_set" "pin" "gpio" "osre" ] @keyword +[ "block" "noblock" "iffull" "ifempty" "rel" ] @keyword +(irq_modifiers) @keyword + +(integer) @number + +(directive (identifier) @variable) +(directive (symbol_def (identifier) @variable)) +(value (identifier) @variable) + +(directive + directive: _ @keyword) diff --git a/bundle/nvim-treesitter/queries/pioasm/injections.scm b/bundle/nvim-treesitter/queries/pioasm/injections.scm new file mode 100644 index 000000000..a8a0cf49e --- /dev/null +++ b/bundle/nvim-treesitter/queries/pioasm/injections.scm @@ -0,0 +1,10 @@ + [ (line_comment) (block_comment) ] @comment + +((code_block + (code_block_language) @_language + (code_block_body) @c) + (#eq? @_language "c-sdk")) + +(code_block + (code_block_language) @language + (code_block_body) @content) diff --git a/bundle/nvim-treesitter/queries/prisma/highlights.scm b/bundle/nvim-treesitter/queries/prisma/highlights.scm new file mode 100644 index 000000000..e3a025d98 --- /dev/null +++ b/bundle/nvim-treesitter/queries/prisma/highlights.scm @@ -0,0 +1,39 @@ +(variable) @variable + +[ + "datasource" + "enum" + "generator" + "model" + "type" +] @keyword + +[ + (comment) + (developer_comment) +] @comment + +[ + (attribute) + (call_expression) +] @function + +(arguments) @property +(column_type) @type +(enumeral) @constant +(column_declaration (identifier) @variable) +(string) @string + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "=" + "@" +] @operator diff --git a/bundle/nvim-treesitter/queries/pug/highlights.scm b/bundle/nvim-treesitter/queries/pug/highlights.scm new file mode 100644 index 000000000..af860be04 --- /dev/null +++ b/bundle/nvim-treesitter/queries/pug/highlights.scm @@ -0,0 +1,30 @@ +(comment) @comment +(tag_name) @tag +( + (tag_name) @constant.builtin + ; https://www.script-example.com/html-tag-liste + (#any-of? @constant.builtin + "head" "title" "base" "link" "meta" "style" + "body" "article" "section" "nav" "aside" "h1" "h2" "h3" "h4" "h5" "h6" "hgroup" "header" "footer" "address" + "p" "hr" "pre" "blockquote" "ol" "ul" "menu" "li" "dl" "dt" "dd" "figure" "figcaption" "main" "div" + "a" "em" "strong" "small" "s" "cite" "q" "dfn" "abbr" "ruby" "rt" "rp" "data" "time" "code" "var" "samp" "kbd" "sub" "sup" "i" "b" "u" "mark" "bdi" "bdo" "span" "br" "wbr" + "ins" "del" + "picture" "source" "img" "iframe" "embed" "object" "param" "video" "audio" "track" "map" "area" + "table" "caption" "colgroup" "col" "tbody" "thead" "tfoot" "tr" "td" "th " + "form" "label" "input" "button" "select" "datalist" "optgroup" "option" "textarea" "output" "progress" "meter" "fieldset" "legend" + "details" "summary" "dialog" + "script" "noscript" "template" "slot" "canvas") +) +(content) @none +(quoted_attribute_value) @string +(id) @constant +(class) @constant +(attribute_name) @symbol +( + (attribute_name ) @keyword + (#match? @keyword "^(:|v-bind|v-|\\@)") +) @keyword + +[ + ":" +] @punctuation.delimiter diff --git a/bundle/nvim-treesitter/queries/pug/injections.scm b/bundle/nvim-treesitter/queries/pug/injections.scm new file mode 100644 index 000000000..027744402 --- /dev/null +++ b/bundle/nvim-treesitter/queries/pug/injections.scm @@ -0,0 +1,7 @@ +(javascript) @javascript + +( + (attribute_name) @_attribute_name + (quoted_attribute_value (attribute_value ) @javascript) + (#match? @_attribute_name "^(:|v-bind|v-|\\@)") +) diff --git a/bundle/nvim-treesitter/queries/python/folds.scm b/bundle/nvim-treesitter/queries/python/folds.scm new file mode 100644 index 000000000..aacd0aaca --- /dev/null +++ b/bundle/nvim-treesitter/queries/python/folds.scm @@ -0,0 +1,27 @@ +(function_definition (block) @fold) +(class_definition (block) @fold) + +(while_statement (block) @fold) +(for_statement (block) @fold) +(if_statement (block) @fold) +(with_statement (block) @fold) +(try_statement (block) @fold) + +[ + (import_from_statement) + (parameters) + (argument_list) + + (parenthesized_expression) + (generator_expression) + (list_comprehension) + (set_comprehension) + (dictionary_comprehension) + + (tuple) + (list) + (set) + (dictionary) + + (string) +] @fold diff --git a/bundle/nvim-treesitter/queries/python/highlights.scm b/bundle/nvim-treesitter/queries/python/highlights.scm new file mode 100644 index 000000000..ec419375f --- /dev/null +++ b/bundle/nvim-treesitter/queries/python/highlights.scm @@ -0,0 +1,299 @@ +;; From tree-sitter-python licensed under MIT License +; Copyright (c) 2016 Max Brunsfeld + +; Variables +(identifier) @variable + +; Reset highlighting in f-string interpolations +(interpolation) @none + +;; Identifier naming conventions +((identifier) @type + (#lua-match? @type "^[A-Z].*[a-z]")) +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) + +((identifier) @constant.builtin + (#lua-match? @constant.builtin "^__[a-zA-Z0-9_]*__$")) + +((identifier) @constant.builtin + (#any-of? @constant.builtin + ;; https://docs.python.org/3/library/constants.html + "NotImplemented" + "Ellipsis" + "quit" + "exit" + "copyright" + "credits" + "license")) + +((attribute + attribute: (identifier) @field) + (#match? @field "^([A-Z])@!.*$")) + +((identifier) @type.builtin + (#any-of? @type.builtin + ;; https://docs.python.org/3/library/exceptions.html + "BaseException" "Exception" "ArithmeticError" "BufferError" "LookupError" "AssertionError" "AttributeError" + "EOFError" "FloatingPointError" "GeneratorExit" "ImportError" "ModuleNotFoundError" "IndexError" "KeyError" + "KeyboardInterrupt" "MemoryError" "NameError" "NotImplementedError" "OSError" "OverflowError" "RecursionError" + "ReferenceError" "RuntimeError" "StopIteration" "StopAsyncIteration" "SyntaxError" "IndentationError" "TabError" + "SystemError" "SystemExit" "TypeError" "UnboundLocalError" "UnicodeError" "UnicodeEncodeError" "UnicodeDecodeError" + "UnicodeTranslateError" "ValueError" "ZeroDivisionError" "EnvironmentError" "IOError" "WindowsError" + "BlockingIOError" "ChildProcessError" "ConnectionError" "BrokenPipeError" "ConnectionAbortedError" + "ConnectionRefusedError" "ConnectionResetError" "FileExistsError" "FileNotFoundError" "InterruptedError" + "IsADirectoryError" "NotADirectoryError" "PermissionError" "ProcessLookupError" "TimeoutError" "Warning" + "UserWarning" "DeprecationWarning" "PendingDeprecationWarning" "SyntaxWarning" "RuntimeWarning" + "FutureWarning" "ImportWarning" "UnicodeWarning" "BytesWarning" "ResourceWarning")) + +; Function calls + +(decorator) @function +((decorator (attribute (identifier) @function)) + (#match? @function "^([A-Z])@!.*$")) +(decorator) @function +((decorator (identifier) @function) + (#match? @function "^([A-Z])@!.*$")) + +(call + function: (identifier) @function) + +(call + function: (attribute + attribute: (identifier) @method)) + +((call + function: (identifier) @constructor) + (#lua-match? @constructor "^[A-Z]")) + +((call + function: (attribute + attribute: (identifier) @constructor)) + (#lua-match? @constructor "^[A-Z]")) + +;; Builtin functions + +((call + function: (identifier) @function.builtin) + (#any-of? @function.builtin + "abs" "all" "any" "ascii" "bin" "bool" "breakpoint" "bytearray" "bytes" "callable" "chr" "classmethod" + "compile" "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval" "exec" "filter" "float" "format" + "frozenset" "getattr" "globals" "hasattr" "hash" "help" "hex" "id" "input" "int" "isinstance" "issubclass" + "iter" "len" "list" "locals" "map" "max" "memoryview" "min" "next" "object" "oct" "open" "ord" "pow" + "print" "property" "range" "repr" "reversed" "round" "set" "setattr" "slice" "sorted" "staticmethod" "str" + "sum" "super" "tuple" "type" "vars" "zip" "__import__")) + +;; Function definitions + +(function_definition + name: (identifier) @function) + +(type (identifier) @type) +(type + (subscript + (identifier) @type)) ; type subscript: Tuple[int] + +((call + function: (identifier) @_isinstance + arguments: (argument_list + (_) + (identifier) @type)) + (#eq? @_isinstance "isinstance")) + +;; Normal parameters +(parameters + (identifier) @parameter) +;; Lambda parameters +(lambda_parameters + (identifier) @parameter) +(lambda_parameters + (tuple_pattern + (identifier) @parameter)) +; Default parameters +(keyword_argument + name: (identifier) @parameter) +; Naming parameters on call-site +(default_parameter + name: (identifier) @parameter) +(typed_parameter + (identifier) @parameter) +(typed_default_parameter + (identifier) @parameter) +; Variadic parameters *args, **kwargs +(parameters + (list_splat_pattern ; *args + (identifier) @parameter)) +(parameters + (dictionary_splat_pattern ; **kwargs + (identifier) @parameter)) + + +;; Literals + +(none) @constant.builtin +[(true) (false)] @boolean +((identifier) @variable.builtin + (#eq? @variable.builtin "self")) + +(integer) @number +(float) @float + +(comment) @comment +(string) @string +[ + (escape_sequence) + "{{" + "}}" +] @string.escape + +; Tokens + +[ + "-" + "-=" + ":=" + "!=" + "*" + "**" + "**=" + "*=" + "/" + "//" + "//=" + "/=" + "&" + "&=" + "%" + "%=" + "^" + "^=" + "+" + "+=" + "<" + "<<" + "<<=" + "<=" + "<>" + "=" + "==" + ">" + ">=" + ">>" + ">>=" + "@" + "@=" + "|" + "|=" + "~" + "->" +] @operator + +; Keywords +[ + "and" + "in" + "is" + "not" + "or" + + "del" +] @keyword.operator + +[ + "def" + "lambda" +] @keyword.function + +[ + "assert" + "async" + "await" + "class" + "exec" + "global" + "nonlocal" + "pass" + "print" + "with" + "as" +] @keyword + +[ + "return" + "yield" +] @keyword.return +(yield "from" @keyword.return) + +(import_from_statement "from" @include) +"import" @include + +(aliased_import "as" @include) + +["if" "elif" "else" "match" "case"] @conditional + +["for" "while" "break" "continue"] @repeat + +[ + "try" + "except" + "raise" + "finally" +] @exception + +(try_statement + (else_clause + "else" @exception)) + +["(" ")" "[" "]" "{" "}"] @punctuation.bracket + +(interpolation + "{" @punctuation.special + "}" @punctuation.special) + +["," "." ":" ";" (ellipsis)] @punctuation.delimiter + +;; Class definitions + +(class_definition name: (identifier) @type) + +(class_definition + body: (block + (function_definition + name: (identifier) @method))) + +(class_definition + superclasses: (argument_list + (identifier) @type)) + +((class_definition + body: (block + (expression_statement + (assignment + left: (identifier) @field)))) + (#match? @field "^([A-Z])@!.*$")) +((class_definition + body: (block + (expression_statement + (assignment + left: (_ + (identifier) @field))))) + (#match? @field "^([A-Z])@!.*$")) + +((class_definition + (block + (function_definition + name: (identifier) @constructor))) + (#any-of? @constructor "__new__" "__init__")) + +; First parameter of a classmethod is cls. +((class_definition + body: (block + (decorated_definition + (decorator (identifier) @_decorator) + definition: (function_definition + parameters: (parameters . (identifier) @variable.builtin))))) + (#eq? @variable.builtin "cls") + (#eq? @_decorator "classmethod")) + +;; Error +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/python/indents.scm b/bundle/nvim-treesitter/queries/python/indents.scm new file mode 100644 index 000000000..3032cedfb --- /dev/null +++ b/bundle/nvim-treesitter/queries/python/indents.scm @@ -0,0 +1,55 @@ +[ + (list) + (dictionary) + (set) + + (if_statement) + (for_statement) + (while_statement) + (with_statement) + (try_statement) + (import_from_statement) + + (parenthesized_expression) + (generator_expression) + (list_comprehension) + (set_comprehension) + (dictionary_comprehension) + + (tuple_pattern) + (list_pattern) + (binary_operator) + + (lambda) + (function_definition) + (class_definition) + + (concatenated_string) +] @indent + +(if_statement + condition: (parenthesized_expression) @aligned_indent + (#set! "delimiter" "()") +) +((ERROR "(" . (_)) @aligned_indent + (#set! "delimiter" "()")) +((argument_list) @aligned_indent + (#set! "delimiter" "()")) +((argument_list) @aligned_indent + (#set! "delimiter" "()")) +((parameters) @aligned_indent + (#set! "delimiter" "()")) +((tuple) @aligned_indent + (#set! "delimiter" "()")) + +[ + ")" + "]" + "}" + (elif_clause) + (else_clause) + (except_clause) + (finally_clause) +] @branch + +(string) @auto diff --git a/bundle/nvim-treesitter/queries/python/injections.scm b/bundle/nvim-treesitter/queries/python/injections.scm new file mode 100644 index 000000000..04d0eed1f --- /dev/null +++ b/bundle/nvim-treesitter/queries/python/injections.scm @@ -0,0 +1,8 @@ +((call + function: (attribute + object: (identifier) @_re) + arguments: (argument_list (string) @regex)) + (#eq? @_re "re") + (#lua-match? @regex "^r.*")) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/python/locals.scm b/bundle/nvim-treesitter/queries/python/locals.scm new file mode 100644 index 000000000..76a14fef5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/python/locals.scm @@ -0,0 +1,115 @@ +;;; Program structure +(module) @scope + +(class_definition + body: (block + (expression_statement + (assignment + left: (identifier) @definition.field)))) @scope +(class_definition + body: (block + (expression_statement + (assignment + left: (_ + (identifier) @definition.field))))) @scope + +; Imports +(aliased_import + alias: (identifier) @definition.import) +(import_statement + name: (dotted_name ((identifier) @definition.import))) +(import_from_statement + name: (dotted_name ((identifier) @definition.import))) + +; Function with parameters, defines parameters +(parameters + (identifier) @definition.parameter) + +(default_parameter + (identifier) @definition.parameter) + +(typed_parameter + (identifier) @definition.parameter) + +(typed_default_parameter + (identifier) @definition.parameter) + +; *args parameter +(parameters + (list_splat_pattern + (identifier) @definition.parameter)) + +; **kwargs parameter +(parameters + (dictionary_splat_pattern + (identifier) @definition.parameter)) + +; Function defines function and scope +((function_definition + name: (identifier) @definition.function) @scope + (#set! definition.function.scope "parent")) + + +((class_definition + name: (identifier) @definition.type) @scope + (#set! definition.type.scope "parent")) + +(class_definition + body: (block + (function_definition + name: (identifier) @definition.method))) + +;;; Loops +; not a scope! +(for_statement + left: (pattern_list + (identifier) @definition.var)) +(for_statement + left: (tuple_pattern + (identifier) @definition.var)) +(for_statement + left: (identifier) @definition.var) + +; not a scope! +;(while_statement) @scope + +; for in list comprehension +(for_in_clause + left: (identifier) @definition.var) +(for_in_clause + left: (tuple_pattern + (identifier) @definition.var)) +(for_in_clause + left: (pattern_list + (identifier) @definition.var)) + +(dictionary_comprehension) @scope +(list_comprehension) @scope +(set_comprehension) @scope + +;;; Assignments + +(assignment + left: (identifier) @definition.var) + +(assignment + left: (pattern_list + (identifier) @definition.var)) +(assignment + left: (tuple_pattern + (identifier) @definition.var)) + +(assignment + left: (attribute + (identifier) + (identifier) @definition.field)) + +; Walrus operator x := 1 +(named_expression + (identifier) @definition.var) + +(as_pattern + alias: (as_pattern_target) @definition.var) + +;;; REFERENCES +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/ql/highlights.scm b/bundle/nvim-treesitter/queries/ql/highlights.scm new file mode 100644 index 000000000..7481f3c60 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ql/highlights.scm @@ -0,0 +1,130 @@ +[ + "as" + "asc" + "by" + "class" + "desc" + "extends" + "forall" + "forex" + "from" + "implies" + "in" + "module" + "newtype" + "order" + "select" + "where" + + (predicate) + (result) + (specialId) +] @keyword + +[ + "and" + "not" + "or" +] @keyword.operator + +[ + "avg" + "any" + "count" + "concat" + "exists" + "max" + "min" + "instanceof" + "rank" + "sum" + "strictconcat" + "strictcount" + "strictsum" +] @function.builtin + +[ + "import" +] @include + +[ + "if" + "then" + "else" +] @conditional + +[ + (true) + (false) +] @boolean + +[ + (this) + (super) +] @variable.builtin + +[ + "boolean" + "float" + "int" + "date" + "string" +] @type.builtin + +(annotName) @attribute + +[ + "<" + "<=" + "=" + ">" + ">=" + "-" + "!=" + "/" + "*" + "%" + "+" + "::" +] @operator + +[ + "(" + ")" + "{" + "}" + "[" + "]" +] @punctuation.bracket + +[ + "," + "|" +] @punctuation.delimiter + +(moduleExpr (simpleId) @namespace) +(module name: (moduleName) @namespace) + +(dataclass name: (className) @type) +(datatype name: (className) @type) +(typeExpr name: (className) @type) + +(importModuleExpr name: (simpleId) @variable) +(qualModuleExpr name: (simpleId) @variable) +(varName) @variable + +(integer) @number +(float) @float + +(string) @string + +(aritylessPredicateExpr (literalId) @function) +(memberPredicate name: (predicateName) @function) +(classlessPredicate name: (predicateName) @function) +(charpred (className) @function) + +[ + (line_comment) + (block_comment) + (qldoc) +] @comment diff --git a/bundle/nvim-treesitter/queries/ql/indents.scm b/bundle/nvim-treesitter/queries/ql/indents.scm new file mode 100644 index 000000000..1641db671 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ql/indents.scm @@ -0,0 +1,22 @@ +[ + (dataclass) + (charpred) + (memberPredicate) + (quantified) +] @indent + +[ + (variable) + "(" + ")" + "{" + "}" + "[" + "]" +] @branch + +[ + (block_comment) + (line_comment) + (qldoc) +] @ignore diff --git a/bundle/nvim-treesitter/queries/ql/injections.scm b/bundle/nvim-treesitter/queries/ql/injections.scm new file mode 100644 index 000000000..88d49d424 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ql/injections.scm @@ -0,0 +1,5 @@ +[ + (line_comment) + (block_comment) + (qldoc) +] @comment diff --git a/bundle/nvim-treesitter/queries/ql/locals.scm b/bundle/nvim-treesitter/queries/ql/locals.scm new file mode 100644 index 000000000..e5fcb1698 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ql/locals.scm @@ -0,0 +1,30 @@ +; SCOPES +(module) @scope +(dataclass) @scope +(datatype) @scope +;; TODO does not work +;(classMember (body) @scope) +(memberPredicate (body) @scope) +(classlessPredicate (body) @scope) +(quantified (conjunction) @scope) +(select) @scope + +; DEFINITIONS + +; module +(module name: (moduleName) @definition.namespace) + +; classes +(dataclass name: (className) @definition.type) +(datatype name: (className) @definition.type) + +; predicates +(charpred (className) @definition.method) +(memberPredicate name: (predicateName) @definition.method) +(classlessPredicate name: (predicateName) @definition.function) + +; variables +(varDecl (varName (simpleId) @definition.var)) + +; REFERENCES +(simpleId) @reference diff --git a/bundle/nvim-treesitter/queries/query/folds.scm b/bundle/nvim-treesitter/queries/query/folds.scm new file mode 100644 index 000000000..47dd96512 --- /dev/null +++ b/bundle/nvim-treesitter/queries/query/folds.scm @@ -0,0 +1,6 @@ +[ + (named_node) + (predicate) + (grouping) + (list) +] @fold diff --git a/bundle/nvim-treesitter/queries/query/highlights.scm b/bundle/nvim-treesitter/queries/query/highlights.scm new file mode 100644 index 000000000..37435a871 --- /dev/null +++ b/bundle/nvim-treesitter/queries/query/highlights.scm @@ -0,0 +1,31 @@ +(string) @string +(escape_sequence) @string.escape +(capture (identifier) @type) +(anonymous_node (identifier) @string) +(predicate name: (identifier) @function) +(named_node name: (identifier) @variable) +(field_definition name: (identifier) @property) +(negated_field "!" @operator (identifier) @property) +(comment) @comment + +(quantifier) @operator +(predicate_type) @punctuation.special + +"." @operator + +[ + "[" + "]" + "(" + ")" +] @punctuation.bracket + +":" @punctuation.delimiter +["@" "#"] @punctuation.special +"_" @constant + +((parameters (identifier) @number) + (#match? @number "^[-+]?[0-9]+(.[0-9]+)?$")) + +((program . (comment) @include) + (#match? @include "^;\ +inherits\ *:")) diff --git a/bundle/nvim-treesitter/queries/query/indents.scm b/bundle/nvim-treesitter/queries/query/indents.scm new file mode 100644 index 000000000..0df23706f --- /dev/null +++ b/bundle/nvim-treesitter/queries/query/indents.scm @@ -0,0 +1,8 @@ +[ + (list) +] @indent + +[ + "[" + "]" +] @branch diff --git a/bundle/nvim-treesitter/queries/query/injections.scm b/bundle/nvim-treesitter/queries/query/injections.scm new file mode 100644 index 000000000..95ce2978f --- /dev/null +++ b/bundle/nvim-treesitter/queries/query/injections.scm @@ -0,0 +1,6 @@ +((predicate + name: (identifier) @_name + parameters: (parameters (string) @regex)) + (#match? @_name "^#?(not-)?(match|vim-match|lua-match)$")) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/query/locals.scm b/bundle/nvim-treesitter/queries/query/locals.scm new file mode 100644 index 000000000..29ab9fe0d --- /dev/null +++ b/bundle/nvim-treesitter/queries/query/locals.scm @@ -0,0 +1,15 @@ +(program) @scope +(program (named_node) @scope) +(program (anonymous_node) @scope) +(program (grouping) @scope) + +(identifier) @reference + +(named_node + (capture) @definition.var) + +(anonymous_node + (capture) @definition.var) + +(grouping + (capture) @definition.var) diff --git a/bundle/nvim-treesitter/queries/r/highlights.scm b/bundle/nvim-treesitter/queries/r/highlights.scm new file mode 100644 index 000000000..287fb648f --- /dev/null +++ b/bundle/nvim-treesitter/queries/r/highlights.scm @@ -0,0 +1,124 @@ +; highlights.scm + +; Literals +(integer) @number + +(float) @float + +(complex) @number + +(string) @string +(string (escape_sequence) @string.escape) + +(comment) @comment + +(identifier) @variable + +(formal_parameters (identifier) @parameter) +(formal_parameters + (default_parameter name: (identifier) @parameter)) + +; Operators +[ + "=" + "<-" + "<<-" + "->" +] @operator + +(unary operator: [ + "-" + "+" + "!" + "~" +] @operator) + +(binary operator: [ + "-" + "+" + "*" + "/" + "^" + "<" + ">" + "<=" + ">=" + "==" + "!=" + "||" + "|" + "&&" + "&" + ":" + "~" +] @operator) + +[ + "|>" + (special) +] @operator + +(lambda_function "\\" @operator) + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +(dollar "$" @operator) + +(subset2 + "[[" @punctuation.bracket + "]]" @punctuation.bracket) + +[ + "in" + (dots) + (break) + (next) + (inf) +] @keyword + +[ + (nan) + (na) + (null) +] @type.builtin + +[ + "if" + "else" + "switch" +] @conditional + +[ + "while" + "repeat" + "for" +] @repeat + +[ + (true) + (false) +] @boolean + +"function" @keyword.function + +(call function: (identifier) @function) +(default_argument name: (identifier) @parameter) + +(namespace_get function: (identifier) @method) +(namespace_get_internal function: (identifier) @method) + +(namespace_get namespace: (identifier) @namespace + "::" @operator) + +(namespace_get_internal namespace: (identifier) @namespace + ":::" @operator) + +; Error +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/r/indents.scm b/bundle/nvim-treesitter/queries/r/indents.scm new file mode 100644 index 000000000..66e1e989b --- /dev/null +++ b/bundle/nvim-treesitter/queries/r/indents.scm @@ -0,0 +1,30 @@ +[ + (brace_list) + (paren_list) + (special) + (pipe) + (call) + "|>" + "if" + "else" + "while" + "repeat" + "for" +] @indent + +[ + "}" + ")" +] @branch + +((formal_parameters (identifier)) @aligned_indent + (#set! "delimiter" "()")) + +[ + ")" + "}" +] @indent_end + +[ + (comment) +] @ignore diff --git a/bundle/nvim-treesitter/queries/r/injections.scm b/bundle/nvim-treesitter/queries/r/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/r/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/r/locals.scm b/bundle/nvim-treesitter/queries/r/locals.scm new file mode 100644 index 000000000..394a23dfc --- /dev/null +++ b/bundle/nvim-treesitter/queries/r/locals.scm @@ -0,0 +1,11 @@ +; locals.scm + +(function_definition) @scope + +(formal_parameters (identifier) @definition.parameter) + +(left_assignment name: (identifier) @definition) +(equals_assignment name: (identifier) @definition) +(right_assignment name: (identifier) @definition) + +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/rasi/folds.scm b/bundle/nvim-treesitter/queries/rasi/folds.scm new file mode 100644 index 000000000..1557b831e --- /dev/null +++ b/bundle/nvim-treesitter/queries/rasi/folds.scm @@ -0,0 +1,5 @@ +[ + (rule_set) + (list_value) + (distance_calc) + ] @fold diff --git a/bundle/nvim-treesitter/queries/rasi/highlights.scm b/bundle/nvim-treesitter/queries/rasi/highlights.scm new file mode 100644 index 000000000..8d8876eb8 --- /dev/null +++ b/bundle/nvim-treesitter/queries/rasi/highlights.scm @@ -0,0 +1,82 @@ +(comment) @comment + +"@media" @keyword +"@import" @include +"@theme" @include + +(string_value) @string +[ + (integer_value) + (float_value) + "0" + ] @number +(boolean_value) @boolean + +[ + (feature_name) + (url_image_scale) + (direction) + (text_style_value) + (line_style_value) + (position_value) + (orientation_value) + (cursor_value) + "inherit" + ] @keyword + + +(url_image "url" @function.builtin) +(gradient_image "linear-gradient" @function.builtin) +(distance_calc "calc" @function.builtin) +(rgb_color ["rgb" "rgba"] @function.builtin) +(hsl_color ["hsl" "hsla"] @function.builtin) +(hwb_color ["hwb" "hwba"] @function.builtin) +(cmyk_color "cmyk" @function.builtin) + +[ + "(" + ")" + "{" + "}" + "[" + "]" + ] @punctuation.bracket + +(distance_op) @operator + +[ + ";" + "," + ":" + "." + ] @punctuation.delimiter + +[ + (angle_unit) + (integer_distance_unit) + (float_distance_unit) + ] @type +(percentage) @number +(percentage "%" @type) + +[ + (global_selector) + (id_selector) + ] @namespace + +(id_selector_view [ "normal" "selected" "alternate" ] @property) +(id_selector_state [ "normal" "urgent" "active" ] @tag) + +(hex_color) @number +(hex_color "#" @punctuation.special) +(named_color (identifier) @string.special) +(named_color "/" @operator) +(reference_value "@" @punctuation.special (identifier) @variable) +(reference_value "var" @function.builtin (identifier) @variable) +(list_value (identifier) @variable) +(environ_value "$" @punctuation.special (identifier) @variable) +(environ_value "env" @function.builtin (identifier) @variable) + +(property_name) @variable + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/rasi/indents.scm b/bundle/nvim-treesitter/queries/rasi/indents.scm new file mode 100644 index 000000000..ad8fe49bf --- /dev/null +++ b/bundle/nvim-treesitter/queries/rasi/indents.scm @@ -0,0 +1,5 @@ +(rule_set) @indent + +(block "}" @branch) + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/rasi/locals.scm b/bundle/nvim-treesitter/queries/rasi/locals.scm new file mode 100644 index 000000000..a658e2477 --- /dev/null +++ b/bundle/nvim-treesitter/queries/rasi/locals.scm @@ -0,0 +1,5 @@ +(rule_set (selectors (id_selector))) @scope + +(block (declaration (property_name) @definition.var)) + +(reference_value name:(identifier) @reference) diff --git a/bundle/nvim-treesitter/queries/regex/highlights.scm b/bundle/nvim-treesitter/queries/regex/highlights.scm new file mode 100644 index 000000000..3f5ee8515 --- /dev/null +++ b/bundle/nvim-treesitter/queries/regex/highlights.scm @@ -0,0 +1,34 @@ +;; Forked from tree-sitter-regex +;; The MIT License (MIT) Copyright (c) 2014 Max Brunsfeld +[ + "(" + ")" + "(?" + "(?:" + "(?<" + ">" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +(group_name) @property + +;; These are escaped special characters that lost their special meaning +;; -> no special highlighting +(identity_escape) @string.regex + +(class_character) @constant + +[ + (control_letter_escape) + (character_class_escape) + (control_escape) + (start_assertion) + (end_assertion) + (boundary_assertion) + (non_boundary_assertion) +] @string.escape + +[ "*" "+" "?" "|" "=" "<=" "!" "" + "=>" + "->" + ">>" + "<<" + ">" + "<" + ">=" + "<=" + "**" + "*" + "/" + "%" + "+" + "-" + "&" + "|" + "^" + "&&" + "||" + "||=" + "&&=" + "!=" + "%=" + "+=" + "-=" + "*=" + "/=" + "=~" + "!~" + "?" + ":" + ".." + "..." + ] @operator + +[ + "," + ";" + "." + ] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + "{" + "}" + "%w(" + "%i(" + ] @punctuation.bracket + +(interpolation + "#{" @punctuation.special + "}" @punctuation.special) @none + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/ruby/indents.scm b/bundle/nvim-treesitter/queries/ruby/indents.scm new file mode 100644 index 000000000..882a81574 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ruby/indents.scm @@ -0,0 +1,41 @@ +[ + (class) + (singleton_class) + (method) + (singleton_method) + (module) + (call) + (if) + (block) + (do_block) + (hash) + (array) + (argument_list) + (case) + (while) + (until) + (for) + (begin) +] @indent + +[ + "end" + ")" + "}" + "]" +] @indent_end + +[ + "(" + ")" + "{" + "}" + "[" + "]" + (when) + (elsif) + (else) + "end" +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/ruby/injections.scm b/bundle/nvim-treesitter/queries/ruby/injections.scm new file mode 100644 index 000000000..89bb058a6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ruby/injections.scm @@ -0,0 +1,7 @@ +(comment) @comment + +(heredoc_body + (heredoc_content) @content + (heredoc_end) @language + (#set! "language" @language) + (#downcase! "language")) diff --git a/bundle/nvim-treesitter/queries/ruby/locals.scm b/bundle/nvim-treesitter/queries/ruby/locals.scm new file mode 100644 index 000000000..dacc46994 --- /dev/null +++ b/bundle/nvim-treesitter/queries/ruby/locals.scm @@ -0,0 +1,55 @@ +; The MIT License (MIT) +; +; Copyright (c) 2016 Rob Rix +; +; Permission is hereby granted, free of charge, to any person obtaining a copy +; of this software and associated documentation files (the "Software"), to deal +; in the Software without restriction, including without limitation the rights +; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +; copies of the Software, and to permit persons to whom the Software is +; furnished to do so, subject to the following conditions: +; +; The above copyright notice and this permission notice shall be included in all +; copies or substantial portions of the Software. +; +; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +; SOFTWARE. + +;;; DECLARATIONS AND SCOPES +(method) @scope +(class) @scope + +[ + (block) + (do_block) + ] @scope + +(identifier) @reference +(constant) @reference +(instance_variable) @reference + +(module name: (constant) @definition.namespace) +(class name: (constant) @definition.type) +(method name: [(identifier) (constant)] @definition.function) +(singleton_method name: [(identifier) (constant)] @definition.function) + +(method_parameters (identifier) @definition.var) +(lambda_parameters (identifier) @definition.var) +(block_parameters (identifier) @definition.var) +(splat_parameter (identifier) @definition.var) +(hash_splat_parameter (identifier) @definition.var) +(optional_parameter name: (identifier) @definition.var) +(destructured_parameter (identifier) @definition.var) +(block_parameter name: (identifier) @definition.var) +(keyword_parameter name: (identifier) @definition.var) + +(assignment left: (_) @definition.var) + +(left_assignment_list (identifier) @definition.var) +(rest_assignment (identifier) @definition.var) +(destructured_left_assignment (identifier) @definition.var) diff --git a/bundle/nvim-treesitter/queries/rust/folds.scm b/bundle/nvim-treesitter/queries/rust/folds.scm new file mode 100644 index 000000000..d83351cb4 --- /dev/null +++ b/bundle/nvim-treesitter/queries/rust/folds.scm @@ -0,0 +1,25 @@ +[(mod_item) + (function_item) + (struct_item) + (trait_item) + (enum_item) + (impl_item) + (type_item) + (union_item) + + (use_declaration) + (let_declaration) + + (loop_expression) + (for_expression) + (while_expression) + (if_expression) + (if_let_expression) + (match_expression) + (call_expression) + + (macro_definition) + (macro_invocation) + + (attribute_item) +] @fold diff --git a/bundle/nvim-treesitter/queries/rust/highlights.scm b/bundle/nvim-treesitter/queries/rust/highlights.scm new file mode 100644 index 000000000..554d64542 --- /dev/null +++ b/bundle/nvim-treesitter/queries/rust/highlights.scm @@ -0,0 +1,273 @@ +; Forked from https://github.com/tree-sitter/tree-sitter-rust +; Copyright (c) 2017 Maxim Sokolov +; Licensed under the MIT license. + +; Identifier conventions + +(identifier) @variable +((identifier) @type + (#lua-match? @type "^[A-Z]")) +(const_item + name: (identifier) @constant) +; Assume all-caps names are constants +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z%d_]*$")) + +; Other identifiers + +(type_identifier) @type +(primitive_type) @type.builtin +(field_identifier) @field +(shorthand_field_initializer + (identifier) @field) +(mod_item + name: (identifier) @namespace) + +(self) @variable.builtin + +(lifetime ["'" (identifier)] @label) +(loop_label ["'" (identifier)] @label) + + +; Function definitions + +(function_item (identifier) @function) +(function_signature_item (identifier) @function) + +(parameter (identifier) @parameter) +(closure_parameters (_) @parameter) + +; Function calls +(call_expression + function: (identifier) @function) +(call_expression + function: (scoped_identifier + (identifier) @function .)) +(call_expression + function: (field_expression + field: (field_identifier) @function)) + +(generic_function + function: (identifier) @function) +(generic_function + function: (scoped_identifier + name: (identifier) @function)) +(generic_function + function: (field_expression + field: (field_identifier) @function)) + +; Assume other uppercase names are enum constructors +((field_identifier) @constant + (#lua-match? @constant "^[A-Z]")) + +(enum_variant + name: (identifier) @constant) + +; Assume that uppercase names in paths are types +(scoped_identifier + path: (identifier) @namespace) +(scoped_identifier + (scoped_identifier + name: (identifier) @namespace)) +(scoped_type_identifier + path: (identifier) @namespace) +(scoped_type_identifier + (scoped_identifier + name: (identifier) @namespace)) +((scoped_identifier + path: (identifier) @type) + (#lua-match? @type "^[A-Z]")) +((scoped_identifier + name: (identifier) @type) + (#lua-match? @type "^[A-Z]")) + +[ + (crate) + (super) +] @namespace + +(scoped_use_list + path: (identifier) @namespace) +(scoped_use_list + path: (scoped_identifier + (identifier) @namespace)) +(use_list (scoped_identifier (identifier) @namespace . (_))) +(use_list (identifier) @type (#lua-match? @type "^[A-Z]")) +(use_as_clause alias: (identifier) @type (#lua-match? @type "^[A-Z]")) + +;; Correct enum constructors +(call_expression + function: (scoped_identifier + "::" + name: (identifier) @constant) + (#lua-match? @constant "^[A-Z]")) + +; Assume uppercase names in a match arm are constants. +((match_arm + pattern: (match_pattern (identifier) @constant)) + (#lua-match? @constant "^[A-Z]")) +((match_arm + pattern: (match_pattern + (scoped_identifier + name: (identifier) @constant))) + (#lua-match? @constant "^[A-Z]")) + +((identifier) @constant.builtin + (#any-of? @constant.builtin "Some" "None" "Ok" "Err")) + +;; Macro definitions +"$" @function.macro +(metavariable) @function.macro +(macro_definition "macro_rules!" @function.macro) + +;; Attribute macros +(attribute_item (meta_item (identifier) @function.macro)) +(meta_item (scoped_identifier (identifier) @function.macro .)) + +;; Derive macros (assume all arguments are types) +(meta_item + (identifier) @_name + arguments: (meta_arguments (meta_item (identifier) @type)) + (#eq? @_name "derive")) + +;; Function-like macros +(macro_invocation + macro: (identifier) @function.macro) +(macro_invocation + macro: (scoped_identifier + (identifier) @function.macro .)) + + + +;;; Literals + +[ + (line_comment) + (block_comment) +] @comment + +(boolean_literal) @boolean +(integer_literal) @number +(float_literal) @float + +[ + (raw_string_literal) + (string_literal) +] @string +(escape_sequence) @string.escape +(char_literal) @character + + +;;; Keywords + +[ + "use" + "mod" +] @include +(use_as_clause "as" @include) + +[ + "async" + "await" + "const" + "default" + "dyn" + "enum" + "extern" + "impl" + "let" + "match" + "move" + "pub" + "ref" + "static" + "struct" + "trait" + "type" + "union" + "unsafe" + "where" + (mutable_specifier) +] @keyword + +"fn" @keyword.function +[ + "return" + "yield" +] @keyword.return + +(type_cast_expression "as" @keyword.operator) +(qualified_type "as" @keyword.operator) + +(use_list (self) @keyword) +(scoped_use_list (self) @keyword) +(scoped_identifier (self) @keyword) + +[ + "else" + "if" +] @conditional + +[ + "break" + "continue" + "for" + "in" + "loop" + "while" +] @repeat + + + +;;; Operators & Punctuation + +[ + "!" + "!=" + "%" + "%=" + "&" + "&&" + "&=" + "*" + "*=" + "+" + "+=" + "-" + "-=" + "->" + ".." + "..=" + "/" + "/=" + "<" + "<<" + "<<=" + "<=" + "=" + "==" + "=>" + ">" + ">=" + ">>" + ">>=" + "?" + "@" + "^" + "^=" + "|" + "|=" + "||" +] @operator + +["(" ")" "[" "]" "{" "}"] @punctuation.bracket +(closure_parameters "|" @punctuation.bracket) +(type_arguments ["<" ">"] @punctuation.bracket) +(type_parameters ["<" ">"] @punctuation.bracket) + +["," "." ":" "::" ";"] @punctuation.delimiter + +(attribute_item "#" @punctuation.special) +(inner_attribute_item ["!" "#"] @punctuation.special) +(macro_invocation "!" @function.macro) +(empty_type "!" @type.builtin) diff --git a/bundle/nvim-treesitter/queries/rust/indents.scm b/bundle/nvim-treesitter/queries/rust/indents.scm new file mode 100644 index 000000000..e6d16dadf --- /dev/null +++ b/bundle/nvim-treesitter/queries/rust/indents.scm @@ -0,0 +1,60 @@ +[ + (mod_item) + (struct_item) + (enum_item) + (impl_item) + (for_expression) + (struct_expression) + (match_expression) + (tuple_expression) + (match_arm) + (match_block) + (if_let_expression) + (call_expression) + (assignment_expression) + (arguments) + (block) + (where_clause) + (use_list) + (array_expression) + (ordered_field_declaration_list) + (field_declaration_list) + (enum_variant_list) + (parameters) + (token_tree) + (macro_definition) +] @indent +(trait_item body: (_) @indent) +(string_literal (escape_sequence)) @indent + +(block "}" @indent_end) +(enum_item + body: (enum_variant_list "}" @indent_end)) +(impl_item + body: (declaration_list "}" @indent_end)) +(match_expression + body: (match_block "}" @indent_end)) +(mod_item + body: (declaration_list "}" @indent_end)) +(struct_item + body: (field_declaration_list "}" @indent_end)) +(trait_item + body: (declaration_list "}" @indent_end)) + +(impl_item (where_clause) @dedent) + +[ + "where" + ")" + "]" + "}" +] @branch +(impl_item (declaration_list) @branch) + +[ + (line_comment) + (string_literal) +] @ignore + + +(raw_string_literal) @auto diff --git a/bundle/nvim-treesitter/queries/rust/injections.scm b/bundle/nvim-treesitter/queries/rust/injections.scm new file mode 100644 index 000000000..fd19fbec2 --- /dev/null +++ b/bundle/nvim-treesitter/queries/rust/injections.scm @@ -0,0 +1,34 @@ +(macro_invocation + (token_tree) @rust) + +(macro_definition + (macro_rule + left: (token_tree_pattern) @rust + right: (token_tree) @rust)) + +[ + (line_comment) + (block_comment) +] @comment + +( + (macro_invocation + macro: ((identifier) @_html_def) + (token_tree) @html) + + (#eq? @_html_def "html") +) + +(call_expression + function: (scoped_identifier + path: (identifier) @_regex (#eq? @_regex "Regex") + name: (identifier) @_new (#eq? @_new "new")) + arguments: (arguments + (raw_string_literal) @regex)) + +(call_expression + function: (scoped_identifier + path: (scoped_identifier (identifier) @_regex (#eq? @_regex "Regex").) + name: (identifier) @_new (#eq? @_new "new")) + arguments: (arguments + (raw_string_literal) @regex)) diff --git a/bundle/nvim-treesitter/queries/rust/locals.scm b/bundle/nvim-treesitter/queries/rust/locals.scm new file mode 100644 index 000000000..010bf4afd --- /dev/null +++ b/bundle/nvim-treesitter/queries/rust/locals.scm @@ -0,0 +1,104 @@ +; Imports +(extern_crate_declaration + name: (identifier) @definition.import) + +(use_declaration + argument: (scoped_identifier + name: (identifier) @definition.import)) + +(use_as_clause + alias: (identifier) @definition.import) + +(use_list + (identifier) @definition.import) ; use std::process::{Child, Command, Stdio}; + +; Functions +(function_item + name: (identifier) @definition.function) + +(function_item + name: (identifier) @definition.method + parameters: (parameters + (self_parameter))) + +; Variables +(parameter + pattern: (identifier) @definition.var) + +(let_declaration + pattern: (identifier) @definition.var) + +(const_item + name: (identifier) @definition.var) + +(tuple_pattern + (identifier) @definition.var) + +(if_let_expression + pattern: (_ + (identifier) @definition.var)) + +(tuple_struct_pattern + (identifier) @definition.var) + +(closure_parameters + (identifier) @definition.var) + +(self_parameter + (self) @definition.var) + +(for_expression + pattern: (identifier) @definition.var) + +; Types +(struct_item + name: (type_identifier) @definition.type) + +(constrained_type_parameter + left: (type_identifier) @definition.type) ; the P in remove_file>(path: P) + +(enum_item + name: (type_identifier) @definition.type) + + +; Fields +(field_declaration + name: (field_identifier) @definition.field) + +(enum_variant + name: (identifier) @definition.field) + +; References +(identifier) @reference +((type_identifier) @reference + (set! reference.kind "type")) +((field_identifier) @reference + (set! reference.kind "field")) + + +; Macros +(macro_definition + name: (identifier) @definition.macro) + +; Module +(mod_item + name: (identifier) @definition.namespace) + +; Scopes +[ + (block) + (function_item) + (closure_expression) + (while_expression) + (for_expression) + (loop_expression) + (if_expression) + (if_let_expression) + (match_expression) + (match_arm) + + (struct_item) + (enum_item) + (impl_item) +] @scope + diff --git a/bundle/nvim-treesitter/queries/scala/folds.scm b/bundle/nvim-treesitter/queries/scala/folds.scm new file mode 100644 index 000000000..e748e86df --- /dev/null +++ b/bundle/nvim-treesitter/queries/scala/folds.scm @@ -0,0 +1,15 @@ +(call_expression (block) @fold) + +[(class_definition) + (trait_definition) + (object_definition) + (function_definition) + (val_definition) + (import_declaration) + + (while_expression) + (do_while_expression) + (for_expression) + (try_expression) + (match_expression) +] @fold diff --git a/bundle/nvim-treesitter/queries/scala/highlights.scm b/bundle/nvim-treesitter/queries/scala/highlights.scm new file mode 100644 index 000000000..7cf5906b0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/scala/highlights.scm @@ -0,0 +1,204 @@ +; CREDITS @stumash (stuart.mashaal@gmail.com) + +;; variables + +(identifier) @variable + +((identifier) @variable.builtin + (#lua-match? @variable.builtin "^this$")) + +(interpolation) @none + +; Assume other uppercase names constants. +; NOTE: In order to distinguish constants we highlight +; all the identifiers that are uppercased. But this solution +; is not suitable for all occurrences e.g. it will highlight +; an uppercased method as a constant if used with no params. +; Introducing highlighting for those specific cases, is probably +; best way to resolve the issue. +((identifier) @constant (#lua-match? @constant "^[A-Z]")) + +;; types + +(type_identifier) @type + +(class_definition + name: (identifier) @type) + +(object_definition + name: (identifier) @type) + +(trait_definition + name: (identifier) @type) + +(type_definition + name: (type_identifier) @type) + +; method definition + +(class_definition + body: (template_body + (function_definition + name: (identifier) @method))) +(object_definition + body: (template_body + (function_definition + name: (identifier) @method))) +(trait_definition + body: (template_body + (function_definition + name: (identifier) @method))) + +; imports + +(import_declaration + path: (identifier) @namespace) +((stable_identifier (identifier) @namespace)) + +((import_declaration + path: (identifier) @type) (#lua-match? @type "^[A-Z]")) +((stable_identifier (identifier) @type) (#lua-match? @type "^[A-Z]")) + +((import_selectors (identifier) @type) (#lua-match? @type "^[A-Z]")) + +; method invocation + + +(call_expression + function: (identifier) @function) + +(call_expression + function: (field_expression + field: (identifier) @method)) + +((call_expression + function: (identifier) @constructor) + (#lua-match? @constructor "^[A-Z]")) + +(generic_function + function: (identifier) @function) + +( + (identifier) @function.builtin + (#lua-match? @function.builtin "^super$") +) + +; function definitions + +(function_definition + name: (identifier) @function) + +(parameter + name: (identifier) @parameter) + +; expressions + + +(field_expression field: (identifier) @property) +(field_expression value: (identifier) @type + (#lua-match? @type "^[A-Z]")) + +(infix_expression operator: (identifier) @operator) +(infix_expression operator: (operator_identifier) @operator) +(infix_type operator: (operator_identifier) @operator) +(infix_type operator: (operator_identifier) @operator) + +; literals + +(boolean_literal) @boolean +(integer_literal) @number +(floating_point_literal) @float + +[ +(symbol_literal) +(string) +(character_literal) +(interpolated_string_expression) +] @string + +(interpolation "$" @punctuation.special) + +;; keywords + +[ + "abstract" + "case" + "class" + "extends" + "final" + "finally" +;; `forSome` existential types not implemented yet + "implicit" + "lazy" +;; `macro` not implemented yet + "object" + "override" + "package" + "private" + "protected" + "sealed" + "trait" + "type" + "val" + "var" + "with" +] @keyword + +(null_literal) @keyword +(wildcard) @keyword + +;; special keywords + +"new" @keyword.operator + +[ + "else" + "if" + "match" +] @conditional + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + +[ + "." + "," +] @punctuation.delimiter + +[ + "do" + "for" + "while" + "yield" +] @repeat + +"def" @keyword.function + +[ + "=>" + "<-" + "@" +] @operator + +"import" @include + +[ + "try" + "catch" + "throw" +] @exception + +"return" @keyword.return + +(comment) @comment + +;; `case` is a conditional keyword in case_block + +(case_block + (case_clause ("case") @conditional)) diff --git a/bundle/nvim-treesitter/queries/scala/injections.scm b/bundle/nvim-treesitter/queries/scala/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/scala/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/scheme/folds.scm b/bundle/nvim-treesitter/queries/scheme/folds.scm new file mode 100644 index 000000000..64a9a08e6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/scheme/folds.scm @@ -0,0 +1 @@ +(program (list) @fold) diff --git a/bundle/nvim-treesitter/queries/scheme/highlights.scm b/bundle/nvim-treesitter/queries/scheme/highlights.scm new file mode 100644 index 000000000..7798eff7c --- /dev/null +++ b/bundle/nvim-treesitter/queries/scheme/highlights.scm @@ -0,0 +1,181 @@ +;; A highlight query can override the highlights queries before it. +;; So the order is important. +;; We should highlight general rules, then highlight special forms. + +(number) @number +(character) @character +(boolean) @boolean +(string) @string +(comment) @comment + +;; highlight for datum comment +;; copied from ../clojure/highlights.scm +([(comment) (directive)] @comment + (#set! "priority" 105)) + +(escape_sequence) @string.escape + +["(" ")" "[" "]" "{" "}"] @punctuation.bracket + +;; variables + +(symbol) @variable +((symbol) @variable.builtin + (#any-of? @variable.builtin "..." ".")) + +;; procedure + +(list + . + (symbol) @function) + +;; special forms + +(list + "[" + (symbol)+ @variable + "]") + +(list + . + (symbol) @_f + . + (list + (symbol) @variable) + (#eq? @_f "lambda")) + +(list + . + (symbol) @_f + . + (list + (list + (symbol) @variable)) + (#any-of? @_f + "let" "let*" "let-syntax" "let-values" "let*-values" "letrec" "letrec*" "letrec-syntax")) + +;; operators + +((symbol) @operator + (#any-of? @operator + "+" "-" "*" "/" "=" "<=" ">=" "<" ">")) + +;; keyword + +((symbol) @keyword + (#any-of? @keyword + "define" "lambda" "begin" "do" "define-syntax" + "and" "or" + "if" "cond" "case" "when" "unless" "else" "=>" + "let" "let*" "let-syntax" "let-values" "let*-values" "letrec" "letrec*" "letrec-syntax" + "set!" + "syntax-rules" "identifier-syntax" + "quote" "unquote" "quote-splicing" "quasiquote" "unquote-splicing" + "delay" + "assert" + "library" "export" "import" "rename" "only" "except" "prefix")) + +((symbol) @conditional + (#any-of? @conditional "if" "cond" "case" "when" "unless")) + +;; quote + +(abbreviation + "'" + (symbol)) @symbol + +(list + . + (symbol) @_f + (#eq? @_f "quote")) @symbol + +;; library + +(list + . + (symbol) @_lib + . + (symbol) @namespace + + (#eq? @_lib "library")) + +;; builtin procedures +;; procedures in R5RS and R6RS but not in R6RS-lib + +((symbol) @function.builtin + (#any-of? @function.builtin + ;; eq + "eqv?" "eq?" "equal?" + ;; number + "number?" "complex?" "real?" "rational?" "integer?" + "exact?" "inexact?" + "zero?" "positive?" "negative?" "odd?" "even?" "finite?" "infinite?" "nan?" + "max" "min" + "abs" "quotient" "remainder" "modulo" + "div" "div0" "mod" "mod0" "div-and-mod" "div0-and-mod0" + "gcd" "lcm" "numerator" "denominator" + "floor" "ceiling" "truncate" "round" + "rationalize" + "exp" "log" "sin" "cos" "tan" "asin" "acos" "atan" + "sqrt" "expt" + "exact-integer-sqrt" + "make-rectangular" "make-polar" "real-part" "imag-part" "magnitude" "angle" + "real-valued" "rational-valued?" "integer-valued?" + "exact" "inexact" "exact->inexact" "inexact->exact" + "number->string" "string->number" + ;; boolean + "boolean?" "not" "boolean=?" + ;; pair + "pair?" "cons" + "car" "cdr" + "caar" "cadr" "cdar" "cddr" + "caaar" "caadr" "cadar" "caddr" "cdaar" "cdadr" "cddar" "cdddr" + "caaaar" "caaadr" "caadar" "caaddr" "cadaar" "cadadr" "caddar" "cadddr" + "cdaaar" "cdaadr" "cdadar" "cdaddr" "cddaar" "cddadr" "cdddar" "cddddr" + "set-car!" "set-cdr!" + ;; list + "null?" "list?" + "list" "length" "append" "reverse" "list-tail" "list-ref" + "map" "for-each" + "memq" "memv" "member" "assq" "assv" "assoc" + ;; symbol + "symbol?" "symbol->string" "string->symbol" "symbol=?" + ;; char + "char?" "char=?" "char?" "char<=?" "char>=?" + "char-ci=?" "char-ci?" "char-ci<=?" "char-ci>=?" + "char-alphabetic?" "char-numeric?" "char-whitespace?" "char-upper-case?" "char-lower-case?" + "char->integer" "integer->char" + "char-upcase" "char-downcase" + ;; string + "string?" "make-string" "string" "string-length" "string-ref" "string-set!" + "string=?" "string-ci=?" "string?" "string<=?" "string>=?" + "string-ci?" "string-ci<=?" "string-ci>=?" + "substring" "string-append" "string->list" "list->string" + "string-for-each" + "string-copy" "string-fill!" + "string-upcase" "string-downcase" + ;; vector + "vector?" "make-vector" "vector" "vector-length" "vector-ref" "vector-set!" + "vector->list" "list->vector" "vector-fill!" "vector-map" "vector-for-each" + ;; bytevector + "bytevector?" "native-endianness" + "make-bytevector" "bytevector-length" "bytevector=?" "bytevector-fill!" + "bytevector-copy!" "bytevector-copy" + ;; error + "error" "assertion-violation" + ;; control + "procedure?" "apply" "force" + "call-with-current-continuation" "call/cc" + "values" "call-with-values" "dynamic-wind" + "eval" "scheme-report-environment" "null-environment" "interaction-environment" + ;; IO + "call-with-input-file" "call-with-output-file" "input-port?" "output-port?" + "current-input-port" "current-output-port" "with-input-from-file" "with-output-to-file" + "open-input-file" "open-output-file" "close-input-port" "close-output-port" + ;; input + "read" "read-char" "peek-char" "eof-object?" "char-ready?" + ;; output + "write" "display" "newline" "write-char" + ;; system + "load" "transcript-on" "transcript-off")) + diff --git a/bundle/nvim-treesitter/queries/scheme/injections.scm b/bundle/nvim-treesitter/queries/scheme/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/scheme/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/scss/highlights.scm b/bundle/nvim-treesitter/queries/scss/highlights.scm new file mode 100644 index 000000000..f60e78019 --- /dev/null +++ b/bundle/nvim-treesitter/queries/scss/highlights.scm @@ -0,0 +1,50 @@ +; inherits: css + +[ + "@mixin" + "@media" + "@include" +] @keyword + +[ + "@while" + "@each" + "@for" + "from" + "through" + "in" +] @repeat + +(single_line_comment) @comment +(function_name) @function + + +[ + ">=" + "<=" +] @operator + + +(mixin_statement (name) @function) +(mixin_statement (parameters (parameter) @parameter)) +(plain_value) @string +(keyword_query) @function +(identifier) @variable +(variable_name) @variable + +(each_statement (key) @parameter) +(each_statement (value) @parameter) +(each_statement (variable_value) @parameter) + +(for_statement (variable) @parameter) +(for_statement (_ (variable_value) @parameter)) + +(argument) @parameter +(arguments (variable_value) @parameter) + +[ + "[" + "]" +] @punctuation.bracket + +(include_statement (identifier) @function) diff --git a/bundle/nvim-treesitter/queries/scss/indents.scm b/bundle/nvim-treesitter/queries/scss/indents.scm new file mode 100644 index 000000000..2889ddca7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/scss/indents.scm @@ -0,0 +1,7 @@ +; inherits: css + +[ + (mixin_statement) + (while_statement) + (each_statement) +] @indent diff --git a/bundle/nvim-treesitter/queries/slint/highlights.scm b/bundle/nvim-treesitter/queries/slint/highlights.scm new file mode 100644 index 000000000..7372f331c --- /dev/null +++ b/bundle/nvim-treesitter/queries/slint/highlights.scm @@ -0,0 +1,115 @@ + +(user_type_identifier) @type + +(var_identifier) @variable + +(state_identifier) @field + +(var_identifier + (post_identifier) @variable) + +(function_identifier) @function + +(reference_identifier) @keyword +(visibility_modifier) @include + +(comment) @comment + +(value) @number +(string) @string + +[ +"in" +"for" +] @repeat + +"@" @keyword + +[ +"import" +"from" +] @include + +[ +"if" +"else" +] @conditional + +[ +"root" +"parent" +"this" +] @variable.builtin + +[ +"true" +"false" +] @boolean + + +[ +"struct" +"property" +"callback" +"in" +"animate" +"states" +"when" +"out" +"transitions" +"global" +] @keyword + +[ + "black" + "transparent" + "blue" + "ease" + "ease_in" + "ease-in" + "ease_in_out" + "ease-in-out" + "ease_out" + "ease-out" + "end" + "green" + "red" + "red" + "start" + "yellow" + ] @constant.builtin + + +; Punctuation +[ +"," +"." +] @punctuation.delimiter + +; Brackets +[ +"(" +")" +"[" +"]" +"{" +"}" +] @punctuation.bracket + +[ +"angle" +"bool" +"brush" +; "color" // This causes problems +"duration" +"easing" +"float" +"image" +"int" +"length" +"percent" +"physical-length" +"physical_length" +"string" +] @type.builtin + diff --git a/bundle/nvim-treesitter/queries/slint/indents.scm b/bundle/nvim-treesitter/queries/slint/indents.scm new file mode 100644 index 000000000..30761ef8f --- /dev/null +++ b/bundle/nvim-treesitter/queries/slint/indents.scm @@ -0,0 +1,13 @@ + +[ +(field_declaration_list_body) +(list_definition_body) +(struct_field_declaration_list_body) +] @indent + +"}" @indent_end + +(comment) @auto + +(string) @auto + diff --git a/bundle/nvim-treesitter/queries/solidity/highlights.scm b/bundle/nvim-treesitter/queries/solidity/highlights.scm new file mode 100644 index 000000000..abb3ec3d0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/solidity/highlights.scm @@ -0,0 +1,212 @@ +(comment) @comment +( + (comment) @attribute + (#match? @attribute "^/// .*") +) ;; Handles natspec comments + +; Pragma +(pragma_directive) @tag + + +; Literals +[ + (string) + (hex_string_literal) + (unicode_string_literal) + (yul_string_literal) +] @string +[ + (number_literal) + (yul_decimal_number) + (yul_hex_number) +] @number +[ + (true) + (false) +] @constant.builtin + + +; Type +(type_name (identifier) @type) +(type_name "mapping" @type) +(primitive_type) @type +(contract_declaration name: (identifier) @type) +(struct_declaration struct_name: (identifier) @type) +(struct_member name: (identifier) @field) +(enum_declaration enum_type_name: (identifier) @type) +; Color payable in payable address conversion as type and not as keyword +(payable_conversion_expression "payable" @type) +(emit_statement . (identifier) @type) +; Handles ContractA, ContractB in function foo() override(ContractA, contractB) {} +(override_specifier (identifier) @type) +; Ensures that delimiters in mapping( ... => .. ) are not colored like types +(type_name "(" @punctuation.bracket "=>" @punctuation.delimiter ")" @punctuation.bracket) + + +; Functions and parameters + +(function_definition + function_name: (identifier) @function) +(modifier_definition + name: (identifier) @function) +(yul_evm_builtin) @function.builtin + +; Use contructor coloring for special functions +(constructor_definition "constructor" @constructor) +(fallback_receive_definition "receive" @constructor) +(fallback_receive_definition "fallback" @constructor) + +(modifier_invocation (identifier) @function) + +; Handles expressions like structVariable.g(); +(call_expression . (member_expression (property_identifier) @method)) + +; Handles expressions like g(); +(call_expression . (identifier) @function) +(function_definition + function_name: (identifier) @function) + +; Handles the field in struct literals like MyStruct({MyField: MyVar * 2}) +(call_expression (identifier) @field . ":") + +; Function parameters +(event_paramater name: (identifier) @parameter) +(parameter name: (identifier) @parameter) + +; Yul functions +(yul_function_call function: (yul_identifier) @function) + +; Yul function parameters +(yul_function_definition . (yul_identifier) @function (yul_identifier) @parameter) + +(meta_type_expression "type" @keyword) + +(member_expression (property_identifier) @field) +(property_identifier) @field +(struct_expression ((identifier) @field . ":")) +(enum_value) @constant + + +; Keywords +[ + "pragma" + "contract" + "interface" + "library" + "is" + "struct" + "enum" + "event" + "using" + "assembly" + "emit" + "public" + "internal" + "private" + "external" + "pure" + "view" + "payable" + "modifier" + "memory" + "storage" + "calldata" + "var" + (constant) + (virtual) + (override_specifier) + (yul_leave) +] @keyword + +[ + "for" + "while" + "do" +] @repeat + +[ + "break" + "continue" + "if" + "else" + "switch" + "case" + "default" +] @conditional + +[ + "try" + "catch" +] @exception + +[ + "return" + "returns" +] @keyword.return + +"function" @keyword.function + +"import" @include +(import_directive "as" @include) +(import_directive "from" @include) + +(event_paramater "indexed" @keyword) + +; Punctuation + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket + + +[ + "." + "," +] @punctuation.delimiter + + +; Operators + +[ + "&&" + "||" + ">>" + ">>>" + "<<" + "&" + "^" + "|" + "+" + "-" + "*" + "/" + "%" + "**" + "<" + "<=" + "==" + "!=" + "!==" + ">=" + ">" + "!" + "~" + "-" + "+" + "++" + "--" +] @operator + +[ + "delete" + "new" +] @keyword.operator + +(identifier) @variable +(yul_identifier) @variable + diff --git a/bundle/nvim-treesitter/queries/sparql/folds.scm b/bundle/nvim-treesitter/queries/sparql/folds.scm new file mode 100644 index 000000000..2b93a7bc7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/sparql/folds.scm @@ -0,0 +1,26 @@ +[ + (prologue) + (select_query) + (construct_query) + (describe_query) + (ask_query) + (values_clause) + (load) + (clear) + (drop) + (add) + (move) + (copy) + (create) + (insert_data) + (delete_data) + (delete_where) + (modify) + (group_graph_pattern) + (triples_same_subject) + (where_clause) + (delete_clause) + (insert_clause) + (data_block) + (blank_node_property_list) +] @fold diff --git a/bundle/nvim-treesitter/queries/sparql/highlights.scm b/bundle/nvim-treesitter/queries/sparql/highlights.scm new file mode 100644 index 000000000..8b09502bc --- /dev/null +++ b/bundle/nvim-treesitter/queries/sparql/highlights.scm @@ -0,0 +1,211 @@ +[ + (path_mod) + "||" + "&&" + "=" + "<" + ">" + "<=" + ">=" + "+" + "-" + "*" + "/" + "!" + "|" + "^" +] @operator + +[ + "_:" + (namespace) +] @namespace + +[ + "UNDEF" + "a" +] @variable.builtin + + +[ + "ADD" + "ALL" + "AS" + "ASC" + "ASK" + "BIND" + "BY" + "CLEAR" + "CONSTRUCT" + "COPY" + "CREATE" + "DEFAULT" + "DELETE" + "DELETE DATA" + "DELETE WHERE" + "DESC" + "DESCRIBE" + "DISTINCT" + "DROP" + "EXISTS" + "FILTER" + "FROM" + "GRAPH" + "GROUP" + "HAVING" + "INSERT" + "INSERT DATA" + "INTO" + "LIMIT" + "LOAD" + "MINUS" + "MOVE" + "NAMED" + "NOT" + "OFFSET" + "OPTIONAL" + "ORDER" + "PREFIX" + "REDUCED" + "SELECT" + "SERVICE" + "SILENT" + "UNION" + "USING" + "VALUES" + "WHERE" + "WITH" +] @keyword + +(string) @string +(echar) @string.escape + +(integer) @number +[ + (decimal) + (double) +] @float +(boolean_literal) @boolean + +[ + "BASE" + "PREFIX" +] @keyword + +[ + "ABS" + "AVG" + "BNODE" + "BOUND" + "CEIL" + "CONCAT" + "COALESCE" + "CONTAINS" + "DATATYPE" + "DAY" + "ENCODE_FOR_URI" + "FLOOR" + "HOURS" + "IF" + "IRI" + "LANG" + "LANGMATCHES" + "LCASE" + "MD5" + "MINUTES" + "MONTH" + "NOW" + "RAND" + "REGEX" + "ROUND" + "SECONDS" + "SHA1" + "SHA256" + "SHA384" + "SHA512" + "STR" + "SUM" + "MAX" + "MIN" + "SAMPLE" + "GROUP_CONCAT" + "SEPARATOR" + "COUNT" + "STRAFTER" + "STRBEFORE" + "STRDT" + "STRENDS" + "STRLANG" + "STRLEN" + "STRSTARTS" + "STRUUID" + "TIMEZONE" + "TZ" + "UCASE" + "URI" + "UUID" + "YEAR" + "isBLANK" + "isIRI" + "isLITERAL" + "isNUMERIC" + "isURI" + "sameTerm" +] @function.builtin + +[ + "." + "," + ";" +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + "{" + "}" + (nil) + (anon) +] @punctuation.bracket + +[ + "IN" + ("NOT" "IN") +] @keyword.operator + + +(comment) @comment + + +; Could this be summarized? +(select_clause + [ + bound_variable: (var) + "*" + ] @parameter) +(bind bound_variable: (var) @parameter) +(data_block bound_variable: (var) @parameter) +(group_condition bound_variable: (var) @parameter) + +(iri_reference ["<" ">"] @namespace) + +(lang_tag) @type +(rdf_literal + "^^" @type + datatype: (_ ["<" ">" (namespace)] @type) @type) + +(function_call identifier: (_) @function) + +(function_call identifier: (iri_reference ["<" ">"] @function)) +(function_call identifier: (prefixed_name (namespace) @function)) +(base_declaration (iri_reference ["<" ">"] @variable)) +(prefix_declaration (iri_reference ["<" ">"] @variable)) + +[ + (var) + (blank_node_label) + (iri_reference) + (prefixed_name) +] @variable diff --git a/bundle/nvim-treesitter/queries/sparql/indents.scm b/bundle/nvim-treesitter/queries/sparql/indents.scm new file mode 100644 index 000000000..a154522a5 --- /dev/null +++ b/bundle/nvim-treesitter/queries/sparql/indents.scm @@ -0,0 +1,17 @@ +[ + (group_graph_pattern) + (triples_block) + (triples_template) + (construct_template) + (construct_triples) + (quads) + (data_block) + (blank_node_property_list) + (collection) +] @indent +[ + "}" + "]" + ")" + (triples_same_subject) +] @branch diff --git a/bundle/nvim-treesitter/queries/sparql/injections.scm b/bundle/nvim-treesitter/queries/sparql/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/sparql/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/sparql/locals.scm b/bundle/nvim-treesitter/queries/sparql/locals.scm new file mode 100644 index 000000000..107aaeb75 --- /dev/null +++ b/bundle/nvim-treesitter/queries/sparql/locals.scm @@ -0,0 +1,8 @@ +(group_graph_pattern (triples_block) @scope) + +((sub_select (select_clause (var) @definition.var)) + (#set! "definition.var.scope" "parent")) +((select_query (select_clause (var) @definition.var)) + (#set! "definition.var.scope" "parent")) + +(var) @reference diff --git a/bundle/nvim-treesitter/queries/supercollider/folds.scm b/bundle/nvim-treesitter/queries/supercollider/folds.scm new file mode 100644 index 000000000..214247bc0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/supercollider/folds.scm @@ -0,0 +1,7 @@ +[ +(function_call) +(code_block) +(function_block) +(control_structure) +] @fold + diff --git a/bundle/nvim-treesitter/queries/supercollider/highlights.scm b/bundle/nvim-treesitter/queries/supercollider/highlights.scm new file mode 100644 index 000000000..f9b6d6f1f --- /dev/null +++ b/bundle/nvim-treesitter/queries/supercollider/highlights.scm @@ -0,0 +1,97 @@ +; highlights.scm +; See this for full list: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md + +; comments +(line_comment) @comment +(block_comment) @comment + +; Argument definition +(argument name: (identifier) @parameter) + +; Variables +(local_var name: (identifier) @variable) +(environment_var name:(identifier) @variable.builtin) +(builtin_var) @constant.builtin + +; (variable) @variable + +; Functions +(function_definition + name: (variable) @function) + +; For function calls +(named_argument + name: (identifier) @property) + +; Methods +(method_call + name: (method_name) @method) + +; Classes +(class) @type + +; Literals +(number) @number +(float) @float + +(string) @string +(symbol) @string.special + +; Operators +[ +"&&" +"||" +"&" +"|" +"^" +"==" +"!=" +"<" +"<=" +">" +">=" +"<<" +">>" +"+" +"-" +"*" +"/" +"%" +"=" +] @operator + +; Keywords +[ +"arg" +"classvar" +"const" +; "super" +; "this" +"var" +] @keyword + +; Brackets +[ + "(" + ")" + "[" + "]" + "{" + "}" + "|" +] @punctuation.bracket + +; Delimiters +[ + ";" + "." + "," +] @punctuation.delimiter + +; control structure +(control_structure) @conditional + +(escape_sequence) @string.escape + +; SinOsc.ar()!2 +(duplicated_statement) @repeat diff --git a/bundle/nvim-treesitter/queries/supercollider/indents.scm b/bundle/nvim-treesitter/queries/supercollider/indents.scm new file mode 100644 index 000000000..c0be0cbaa --- /dev/null +++ b/bundle/nvim-treesitter/queries/supercollider/indents.scm @@ -0,0 +1,31 @@ +[ + (function_block) + (binary_expression) + (collection) + (indexed_collection) + (parameter_call_list) + (function_call) + (class_def) + (classvar) + (const) + (instance_var) + (variable_definition) + (variable_definition_sequence (variable_definition)) + (control_structure) + (return_statement) +] @indent + +[ + (parameter_call_list (argument_calls)) + "(" + ")" + "{" + "}" + "[" + "]" +] @branch + +[ + (block_comment) + (line_comment) +] @ignore diff --git a/bundle/nvim-treesitter/queries/supercollider/injections.scm b/bundle/nvim-treesitter/queries/supercollider/injections.scm new file mode 100644 index 000000000..e48ce9af3 --- /dev/null +++ b/bundle/nvim-treesitter/queries/supercollider/injections.scm @@ -0,0 +1,4 @@ +[ + (line_comment) + (block_comment) +] @comment diff --git a/bundle/nvim-treesitter/queries/supercollider/locals.scm b/bundle/nvim-treesitter/queries/supercollider/locals.scm new file mode 100644 index 000000000..f2238b478 --- /dev/null +++ b/bundle/nvim-treesitter/queries/supercollider/locals.scm @@ -0,0 +1,27 @@ +; Scopes +[ +(function_call) +(code_block) +(function_block) +(control_structure) +] @scope + +; Definitions +(argument + name: (identifier) @definition.parameter + (#set! "definition.var.scope" "local") +) + +(variable_definition + name: (variable (local_var (identifier) @definition.var + ))) + +(variable_definition + name: (variable (environment_var (identifier) @definition.var)) + (#set! "definition.var.scope" "global")) + +(function_definition name: (variable) @definition.var + (#set! "definition.var.scope" "parent") +) + +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/surface/folds.scm b/bundle/nvim-treesitter/queries/surface/folds.scm new file mode 100644 index 000000000..994f12e1e --- /dev/null +++ b/bundle/nvim-treesitter/queries/surface/folds.scm @@ -0,0 +1,6 @@ +; Surface folds similar to HTML and includes blocks +[ + (tag) + (component) + (block) +] @fold diff --git a/bundle/nvim-treesitter/queries/surface/highlights.scm b/bundle/nvim-treesitter/queries/surface/highlights.scm new file mode 100644 index 000000000..0144193c9 --- /dev/null +++ b/bundle/nvim-treesitter/queries/surface/highlights.scm @@ -0,0 +1,44 @@ +; Surface text is highlighted as such +(text) @text + +; Surface has two types of comments, both are highlighted as such +(comment) @comment + +; Surface attributes are highlighted as HTML attributes +(attribute_name) @tag.attribute + +; Attributes are highlighted as strings +(quoted_attribute_value) @string + +; Surface blocks are highlighted as keywords +[ + (start_block) + (end_block) + (subblock) +] @keyword + +; Surface supports HTML tags and are highlighted as such +[ + "<" + ">" + "" + "{" + "}" + "" + "{!--" + "--}" +] @tag.delimiter + +; Surface tags are highlighted as HTML +(tag_name) @tag + +; Surface components are highlighted as types (Elixir modules) +(component_name) @type + +; Surface directives are highlighted as keywords +(directive_name) @keyword + +; Surface operators +["="] @operator diff --git a/bundle/nvim-treesitter/queries/surface/indents.scm b/bundle/nvim-treesitter/queries/surface/indents.scm new file mode 100644 index 000000000..dceea9c7e --- /dev/null +++ b/bundle/nvim-treesitter/queries/surface/indents.scm @@ -0,0 +1,14 @@ +; Surface indents like HTML, with the addition of blocks +[ + (component) + (tag) + (block) +] @indent + +; Dedent at the end of each tag, as well as a subblock +[ + (end_tag) + (end_component) + (end_block) + (subblock) +] @branch diff --git a/bundle/nvim-treesitter/queries/surface/injections.scm b/bundle/nvim-treesitter/queries/surface/injections.scm new file mode 100644 index 000000000..928977a34 --- /dev/null +++ b/bundle/nvim-treesitter/queries/surface/injections.scm @@ -0,0 +1,8 @@ +; Surface expressions and components are Elixir code +[ + (expression_value) + (component_name) +] @elixir + +; Surface comments are nvim-treesitter comments +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/svelte/folds.scm b/bundle/nvim-treesitter/queries/svelte/folds.scm new file mode 100644 index 000000000..795c32fc4 --- /dev/null +++ b/bundle/nvim-treesitter/queries/svelte/folds.scm @@ -0,0 +1,9 @@ +[ + (style_element) + (script_element) + (element) + (if_statement) + (else_statement) + (each_statement) + (await_statement) +] @fold diff --git a/bundle/nvim-treesitter/queries/svelte/highlights.scm b/bundle/nvim-treesitter/queries/svelte/highlights.scm new file mode 100644 index 000000000..058682a7c --- /dev/null +++ b/bundle/nvim-treesitter/queries/svelte/highlights.scm @@ -0,0 +1,21 @@ +; inherits: html_tags + +(raw_text_expr) @none + +[ + (special_block_keyword) + (then) + (as) +] @keyword + +[ + "{" + "}" +] @punctuation.bracket + +[ + "#" + ":" + "/" + "@" +] @tag.delimiter diff --git a/bundle/nvim-treesitter/queries/svelte/indents.scm b/bundle/nvim-treesitter/queries/svelte/indents.scm new file mode 100644 index 000000000..2f6f5c32e --- /dev/null +++ b/bundle/nvim-treesitter/queries/svelte/indents.scm @@ -0,0 +1,20 @@ +[ + (element) + (if_statement) + (each_statement) + (await_statement) + (script_element) + (style_element) +] @indent + +[ + (end_tag) + (else_statement) + (if_end_expr) + (each_end_expr) + (await_end_expr) + ">" + "/>" +] @branch + +(comment) @ignore diff --git a/bundle/nvim-treesitter/queries/svelte/injections.scm b/bundle/nvim-treesitter/queries/svelte/injections.scm new file mode 100644 index 000000000..d66530f7a --- /dev/null +++ b/bundle/nvim-treesitter/queries/svelte/injections.scm @@ -0,0 +1,31 @@ +; inherits: html_tags + +( + (style_element + (start_tag + (attribute + (quoted_attribute_value (attribute_value) @_lang))) + (raw_text) @scss) + (#any-of? @_lang "scss" "postcss" "less") +) + +((attribute + (attribute_name) @_attr + (quoted_attribute_value (attribute_value) @css)) + (#eq? @_attr "style")) + +[ + (raw_text_expr) + (raw_text_each) +] @javascript + +( + (script_element + (start_tag + (attribute + (quoted_attribute_value (attribute_value) @_lang))) + (raw_text) @typescript) + (#any-of? @_lang "ts" "typescript") +) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/swift/highlights.scm b/bundle/nvim-treesitter/queries/swift/highlights.scm new file mode 100644 index 000000000..95f38f9ef --- /dev/null +++ b/bundle/nvim-treesitter/queries/swift/highlights.scm @@ -0,0 +1,150 @@ +[ "." ";" ":" "," ] @punctuation.delimiter +[ "\\(" "(" ")" "[" "]" "{" "}"] @punctuation.bracket ; TODO: "\\(" ")" in interpolations should be @punctuation.special + +; Identifiers +(attribute) @variable +(simple_identifier) @variable +(type_identifier) @type +(self_expression) @variable.builtin + +; Declarations +"func" @keyword.function +[ + (visibility_modifier) + (member_modifier) + (function_modifier) + (property_modifier) + (parameter_modifier) + (inheritance_modifier) +] @keyword + +(function_declaration (simple_identifier) @method) +(function_declaration ["init" @constructor]) +(throws) @keyword +(async) @keyword +(where_keyword) @keyword +(parameter external_name: (simple_identifier) @parameter) +(parameter name: (simple_identifier) @parameter) +(type_parameter (type_identifier) @parameter) +(inheritance_constraint (identifier (simple_identifier) @parameter)) +(equality_constraint (identifier (simple_identifier) @parameter)) + +[ + "typealias" + "struct" + "class" + "enum" + "protocol" + "extension" + "indirect" +] @keyword + +(class_body (property_declaration (value_binding_pattern (non_binding_pattern (simple_identifier) @property)))) +(protocol_property_declaration (value_binding_pattern (non_binding_pattern (simple_identifier) @property))) + +(import_declaration ["import" @include]) + +(enum_entry ["case" @keyword]) + +; Function calls +(call_expression (simple_identifier) @function) ; foo() +(call_expression ; foo.bar.baz(): highlight the baz() + (navigation_expression + (navigation_suffix (simple_identifier) @function))) +((navigation_expression + (simple_identifier) @type) ; SomeType.method(): highlight SomeType as a type + (#lua-match? @type "^[A-Z]")) + +(directive) @function.macro +(diagnostic) @function.macro + +; Statements +(for_statement ["for" @repeat]) +(for_statement ["in" @repeat]) +(for_statement item: (simple_identifier) @variable) +(else) @keyword +(as_operator) @keyword + +["while" "repeat" "continue" "break"] @repeat + +["let" "var"] @keyword +(non_binding_pattern (simple_identifier) @variable) + +(guard_statement ["guard" @conditional]) +(if_statement ["if" @conditional]) +(switch_statement ["switch" @conditional]) +(switch_entry ["case" @keyword]) +(switch_entry ["fallthrough" @keyword]) +(switch_entry (default_keyword) @keyword) +"return" @keyword.return +(ternary_expression + ["?" ":"] @conditional) + +["do" (throw_keyword) (catch_keyword)] @keyword + +(statement_label) @label + +; Comments +(comment) @comment +(multiline_comment) @comment + +; String literals +(line_str_text) @string +(str_escaped_char) @string +(multi_line_str_text) @string +(raw_str_part) @string +(raw_str_end_part) @string +(raw_str_interpolation_start) @punctuation.special +["\"" "\"\"\""] @string + +; Lambda literals +(lambda_literal ["in" @keyword.operator]) + +; Basic literals +[ + (integer_literal) + (hex_literal) + (oct_literal) + (bin_literal) +] @number +(real_literal) @float +(boolean_literal) @boolean +"nil" @variable.builtin + +; Operators +(custom_operator) @operator +[ + "try" + "try?" + "try!" + "!" + "+" + "-" + "*" + "/" + "%" + "=" + "+=" + "-=" + "*=" + "/=" + "<" + ">" + "<=" + ">=" + "++" + "--" + "&" + "~" + "%=" + "!=" + "!==" + "==" + "===" + "??" + + "->" + + "..<" + "..." +] @operator diff --git a/bundle/nvim-treesitter/queries/swift/locals.scm b/bundle/nvim-treesitter/queries/swift/locals.scm new file mode 100644 index 000000000..dfe1c83b1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/swift/locals.scm @@ -0,0 +1,18 @@ +(import_declaration (identifier) @definition.import) +(function_declaration name: (simple_identifier) @definition.function) + +; Scopes +[ + (statements) + (for_statement) + (while_statement) + (repeat_while_statement) + (do_statement) + (if_statement) + (guard_statement) + (switch_statement) + (property_declaration) + (function_declaration) + (class_declaration) + (protocol_declaration) +] @scope diff --git a/bundle/nvim-treesitter/queries/teal/folds.scm b/bundle/nvim-treesitter/queries/teal/folds.scm new file mode 100644 index 000000000..4583057cf --- /dev/null +++ b/bundle/nvim-treesitter/queries/teal/folds.scm @@ -0,0 +1,13 @@ +[ +(do_statement) +(numeric_for_statement) +(generic_for_statement) +(while_statement) +(repeat_statement) +(if_statement) +(function_statement) +(record_declaration) +(enum_declaration) +(anon_function) +(table_constructor) +] @fold diff --git a/bundle/nvim-treesitter/queries/teal/highlights.scm b/bundle/nvim-treesitter/queries/teal/highlights.scm new file mode 100644 index 000000000..c12fcb53d --- /dev/null +++ b/bundle/nvim-treesitter/queries/teal/highlights.scm @@ -0,0 +1,131 @@ + +;; Primitives +(boolean) @boolean +(comment) @comment +(shebang_comment) @comment +(identifier) @variable +((identifier) @variable.builtin + (#eq? @variable.builtin "self")) +(nil) @constant.builtin +(number) @number +(string) @string +(table_constructor ["{" "}"] @constructor) +(varargs "..." @constant.builtin) +[ "," "." ":" ";" ] @punctuation.delimiter + +(escape_sequence) @string.escape +(format_specifier) @string.escape + +;; Basic statements/Keywords +[ "if" "then" "elseif" "else" ] @conditional +[ "for" "while" "repeat" "until" ] @repeat +"return" @keyword.return +[ "in" "local" (break) (goto) "do" "end" ] @keyword +(label) @label + +;; Global isn't a real keyword, but it gets special treatment in these places +(var_declaration "global" @keyword) +(type_declaration "global" @keyword) +(function_statement "global" @keyword) +(record_declaration "global" @keyword) +(enum_declaration "global" @keyword) + +;; Ops +(bin_op (op) @operator) +(unary_op (op) @operator) +[ "=" "as" ] @operator + +;; Functions +(function_statement + "function" @keyword.function + . name: (_) @function) +(anon_function + "function" @keyword.function) +(function_body "end" @keyword.function) + +(arg name: (identifier) @parameter) + +(function_signature + (arguments + . (arg name: (identifier) @variable.builtin)) + (#eq? @variable.builtin "self")) + +(typeargs + "<" @punctuation.bracket + . (_) @parameter + . ("," . (_) @parameter)* + . ">" @punctuation.bracket) + +(function_call + (identifier) @function . (arguments)) +(function_call + (index (_) key: (identifier) @function) . (arguments)) +(function_call + (method_index (_) key: (identifier) @function) . (arguments)) + +;; Types +(record_declaration + . "record" @keyword + name: (identifier) @type) +(anon_record . "record" @keyword) +(record_body + (record_declaration + . [ "record" ] @keyword + . name: (identifier) @type)) +(record_body + (enum_declaration + . [ "enum" ] @keyword + . name: (identifier) @type)) +(record_body + (typedef + . "type" @keyword + . name: (identifier) @type . "=")) +(record_body + (metamethod "metamethod" @keyword)) +(record_body + (userdata) @keyword) + +(enum_declaration + "enum" @keyword + name: (identifier) @type) + +(type_declaration "type" @keyword) +(type_declaration (identifier) @type) +(simple_type name: (identifier) @type) +(type_index (identifier) @type) +(type_union "|" @operator) +(function_type "function" @type) + +;; The rest of it +(var_declaration + declarators: (var_declarators + (var name: (identifier) @variable))) +(var_declaration + declarators: (var_declarators + (var + "<" @punctuation.bracket + . attribute: (attribute) @attribute + . ">" @punctuation.bracket))) +[ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket + +;; Only highlight format specifiers in calls to string.format +;; string.format('...') +;(function_call +; called_object: (index +; (identifier) @base +; key: (identifier) @entry) +; arguments: (arguments . +; (string (format_specifier) @string.escape)) +; +; (#eq? @base "string") +; (#eq? @entry "format")) + +;; ('...'):format() +;(function_call +; called_object: (method_index +; (string (format_specifier) @string.escape) +; key: (identifier) @func-name) +; (#eq? @func-name "format")) + + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/teal/indents.scm b/bundle/nvim-treesitter/queries/teal/indents.scm new file mode 100644 index 000000000..b199015a6 --- /dev/null +++ b/bundle/nvim-treesitter/queries/teal/indents.scm @@ -0,0 +1,18 @@ +[ + (record_declaration) + (anon_function) + (function_body) + (table_constructor) + (if_statement) + (return_statement) + (while_statement) +] @indent + +[ + "{" + "}" + "(" + ")" + "end" + "then" +] @branch diff --git a/bundle/nvim-treesitter/queries/teal/injections.scm b/bundle/nvim-treesitter/queries/teal/injections.scm new file mode 100644 index 000000000..f37f4d747 --- /dev/null +++ b/bundle/nvim-treesitter/queries/teal/injections.scm @@ -0,0 +1,27 @@ +( + (function_call + (index + (identifier) @_cdef_identifier) + (arguments + (string) @c) + ) + + (#eq? @_cdef_identifier "cdef") + (#lua-match? @c "^[\"']") + (#offset! @c 0 1 0 -1) +) + +( + (function_call + (index + (identifier) @_cdef_identifier) + (arguments + (string) @c) + ) + + (#eq? @_cdef_identifier "cdef") + (#lua-match? @c "^%[%[") + (#offset! @c 0 2 0 -2) +) + +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/teal/locals.scm b/bundle/nvim-treesitter/queries/teal/locals.scm new file mode 100644 index 000000000..431e659a1 --- /dev/null +++ b/bundle/nvim-treesitter/queries/teal/locals.scm @@ -0,0 +1,23 @@ +(var_declaration + declarators: (var_declarators + (var (identifier)) @definition.var)) + +(var_assignment + variables: (assignment_variables + (var (identifier) @definition.var) @definition.associated)) + +(arg name: (identifier) @definition.parameter) + +(anon_function) @scope +((function_statement + (function_name) @definition.function) @scope) + +(program) @scope +(if_statement) @scope +(generic_for_statement (for_body) @scope) +(numeric_for_statement (for_body) @scope) +(repeat_statement) @scope +(while_statement (while_body) @scope) +(do_statement) @scope + +(identifier) @reference diff --git a/bundle/nvim-treesitter/queries/tlaplus/folds.scm b/bundle/nvim-treesitter/queries/tlaplus/folds.scm new file mode 100644 index 000000000..2ca0168c0 --- /dev/null +++ b/bundle/nvim-treesitter/queries/tlaplus/folds.scm @@ -0,0 +1,5 @@ +[ + (extramodular_text) + (block_comment) + (non_terminal_proof) +] @fold diff --git a/bundle/nvim-treesitter/queries/tlaplus/highlights.scm b/bundle/nvim-treesitter/queries/tlaplus/highlights.scm new file mode 100644 index 000000000..98901ef61 --- /dev/null +++ b/bundle/nvim-treesitter/queries/tlaplus/highlights.scm @@ -0,0 +1,232 @@ +; ; Intended for consumption by nvim-treesitter +; ; Default capture names for nvim-treesitter found here: +; ; https://github.com/nvim-treesitter/nvim-treesitter/blob/e473630fe0872cb0ed97cd7085e724aa58bc1c84/lua/nvim-treesitter/highlight.lua#L14-L104 + +; Keywords +[ + "ACTION" + "ASSUME" + "ASSUMPTION" + "AXIOM" + "BY" + "CASE" + "CHOOSE" + "CONSTANT" + "CONSTANTS" + "COROLLARY" + "DEF" + "DEFINE" + "DEFS" + "DOMAIN" + "ELSE" + "ENABLED" + "EXCEPT" + "EXTENDS" + "HAVE" + "HIDE" + "IF" + "IN" + "INSTANCE" + "LAMBDA" + "LEMMA" + "LET" + "LOCAL" + "MODULE" + "NEW" + "OBVIOUS" + "OMITTED" + "ONLY" + "OTHER" + "PICK" + "PROOF" + "PROPOSITION" + "PROVE" + "QED" + "RECURSIVE" + "SF_" + "STATE" + "SUBSET" + "SUFFICES" + "TAKE" + "TEMPORAL" + "THEN" + "THEOREM" + "UNCHANGED" + "UNION" + "USE" + "VARIABLE" + "VARIABLES" + "WF_" + "WITH" + "WITNESS" + (address) + (all_map_to) + (assign) + (case_arrow) + (case_box) + (def_eq) + (exists) + (forall) + (gets) + (label_as) + (maps_to) + (set_in) + (temporal_exists) + (temporal_forall) +] @keyword +; Pluscal keywords +[ + (pcal_algorithm_start) + "algorithm" + "assert" + "await" + "begin" + "call" + "define" + "end" + "fair" + "goto" + "macro" + "or" + "procedure" + "process" + "skip" + "variable" + "variables" + "when" + "with" +] @keyword +(pcal_with ("=") @keyword) +(pcal_process ("=") @keyword) +[ + "if" + "then" + "else" + "elsif" + (pcal_end_if) + "either" + (pcal_end_either) +] @conditional +[ + "while" + "do" + (pcal_end_while) + "with" + (pcal_end_with) +] @repeat +("return") @keyword.return +("print") @function.macro + + +; Literals +(binary_number (format) @keyword) +(binary_number (value) @number) +(boolean) @boolean +(boolean_set) @type +(hex_number (format) @keyword) +(hex_number (value) @number) +(int_number_set) @type +(nat_number) @number +(nat_number_set) @type +(octal_number (format) @keyword) +(octal_number (value) @number) +(real_number) @number +(real_number_set) @type +(string) @string +(escape_char) @string.escape +(string_set) @type + +; Namespaces and includes +(extends (identifier_ref) @include) +(module name: (_) @namespace) +(pcal_algorithm name: (identifier) @namespace) + +; Operators and functions +(bound_infix_op symbol: (_) @function.builtin) +(bound_nonfix_op (infix_op_symbol) @operator) +(bound_nonfix_op (postfix_op_symbol) @operator) +(bound_nonfix_op (prefix_op_symbol) @operator) +(bound_postfix_op symbol: (_) @function.builtin) +(bound_prefix_op symbol: (_) @function.builtin) +(function_definition name: (identifier) @function) +(module_definition name: (identifier) @function) +(operator_definition name: (_) @operator) +(pcal_macro_decl name: (identifier) @function.macro) +(pcal_macro_call name: (identifier) @function.macro) +(pcal_proc_decl name: (identifier) @function.macro) +(pcal_process name: (identifier) @function) +(recursive_declaration (identifier) @operator) +(recursive_declaration (operator_declaration name: (_) @operator)) + +; Constants and variables +(constant_declaration (identifier) @constant.builtin) +(constant_declaration (operator_declaration name: (_) @constant.builtin)) +(pcal_var_decl (identifier) @variable.builtin) +(pcal_with (identifier) @parameter) +((".") . (identifier) @attribute) +(record_literal (identifier) @attribute) +(set_of_records (identifier) @attribute) +(variable_declaration (identifier) @variable.builtin) + +; Parameters +(quantifier_bound (identifier) @parameter) +(quantifier_bound (tuple_of_identifiers (identifier) @parameter)) +(lambda (identifier) @parameter) +(module_definition (operator_declaration name: (_) @parameter)) +(module_definition parameter: (identifier) @parameter) +(operator_definition (operator_declaration name: (_) @parameter)) +(operator_definition parameter: (identifier) @parameter) +(pcal_macro_decl parameter: (identifier) @parameter) +(pcal_proc_var_decl (identifier) @parameter) + +; Delimiters +[ + (langle_bracket) + (rangle_bracket) + (rangle_bracket_sub) + "{" + "}" + "[" + "]" + "]_" + "(" + ")" +] @punctuation.bracket +[ + "," + ":" + "." + "!" + ";" + (bullet_conj) + (bullet_disj) + (prev_func_val) + (placeholder) +] @punctuation.delimiter + +; Proofs +(proof_step_id "<" @punctuation.bracket) +(proof_step_id (level) @label) +(proof_step_id (name) @label) +(proof_step_id ">" @punctuation.bracket) +(proof_step_ref "<" @punctuation.bracket) +(proof_step_ref (level) @label) +(proof_step_ref (name) @label) +(proof_step_ref ">" @punctuation.bracket) + +; Comments and tags +(block_comment "(*" @comment) +(block_comment "*)" @comment) +(block_comment_text) @comment +(comment) @comment +(single_line) @comment +(_ label: (identifier) @label) +(label name: (_) @label) +(pcal_goto statement: (identifier) @label) + +; Reference highlighting with the same color as declarations. +; `constant`, `operator`, and others are custom captures defined in locals.scm +((identifier_ref) @constant.builtin (#is? @constant.builtin constant)) +((identifier_ref) @operator (#is? @operator function)) +((identifier_ref) @parameter (#is? @parameter parameter)) +((identifier_ref) @variable.builtin (#is? @variable.builtin var)) diff --git a/bundle/nvim-treesitter/queries/tlaplus/injections.scm b/bundle/nvim-treesitter/queries/tlaplus/injections.scm new file mode 100644 index 000000000..4d0833e1b --- /dev/null +++ b/bundle/nvim-treesitter/queries/tlaplus/injections.scm @@ -0,0 +1,4 @@ +[ + (comment) + (block_comment_text) +] @comment diff --git a/bundle/nvim-treesitter/queries/tlaplus/locals.scm b/bundle/nvim-treesitter/queries/tlaplus/locals.scm new file mode 100644 index 000000000..7687c5110 --- /dev/null +++ b/bundle/nvim-treesitter/queries/tlaplus/locals.scm @@ -0,0 +1,42 @@ +; Scopes +[ + (bounded_quantification) + (function_definition) + (lambda) + (module) + (module_definition) + (pcal_algorithm) + (pcal_macro) + (pcal_procedure) + (pcal_with) + (unbounded_quantification) +] @scope + +; Definitions +(constant_declaration (identifier) @definition.constant) +(function_definition name: (identifier) @definition.function) +(lambda (identifier) @definition.parameter) +(operator_definition name: (identifier) @definition.function) +(operator_definition parameter: (identifier) @definition.parameter) +(pcal_macro_decl parameter: (identifier) @definition.parameter) +(pcal_proc_var_decl (identifier) @definition.parameter) +(pcal_var_decl (identifier) @definition.var) +(pcal_with (identifier) @definition.parameter) +(quantifier_bound (identifier) @definition.parameter) +(quantifier_bound (tuple_of_identifiers (identifier) @definition.parameter)) +(variable_declaration (identifier) @definition.var) + +; Builtin variables +(pcal_algorithm_body + [ + (_ (identifier_ref) @definition.var) + (_ (_ (identifier_ref) @definition.var)) + (_ (_ (_ (identifier_ref) @definition.var))) + (_ (_ (_ (_ (identifier_ref) @definition.var)))) + (_ (_ (_ (_ (_ (identifier_ref) @definition.var))))) + ] + (#vim-match? @definition.var "^(self|pc|stack)$") +) + +; References +(identifier_ref) @reference diff --git a/bundle/nvim-treesitter/queries/todotxt/highlights.scm b/bundle/nvim-treesitter/queries/todotxt/highlights.scm new file mode 100644 index 000000000..37f91b8a7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/todotxt/highlights.scm @@ -0,0 +1,6 @@ +(done_task) @comment +(task (priority) @keyword) +(task (date) @comment) +(task (kv) @comment) +(task (project) @string) +(task (context) @type) diff --git a/bundle/nvim-treesitter/queries/toml/folds.scm b/bundle/nvim-treesitter/queries/toml/folds.scm new file mode 100644 index 000000000..a58aae4ca --- /dev/null +++ b/bundle/nvim-treesitter/queries/toml/folds.scm @@ -0,0 +1,5 @@ +[ + (table) + (array) + (table_array_element) +] @fold diff --git a/bundle/nvim-treesitter/queries/toml/highlights.scm b/bundle/nvim-treesitter/queries/toml/highlights.scm new file mode 100644 index 000000000..17c83d547 --- /dev/null +++ b/bundle/nvim-treesitter/queries/toml/highlights.scm @@ -0,0 +1,35 @@ +; Properties +;----------- + +(bare_key) @property +(quoted_key) @string + +; Literals +;--------- + +(boolean) @boolean +(comment) @comment +(string) @string +(integer) @number +(float) @float +(offset_date_time) @string.special +(local_date_time) @string.special +(local_date) @string.special +(local_time) @string.special + +; Punctuation +;------------ + +"." @punctuation.delimiter +"," @punctuation.delimiter + +"=" @operator + +"[" @punctuation.bracket +"]" @punctuation.bracket +"[[" @punctuation.bracket +"]]" @punctuation.bracket +"{" @punctuation.bracket +"}" @punctuation.bracket + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/toml/indents.scm b/bundle/nvim-treesitter/queries/toml/indents.scm new file mode 100644 index 000000000..ae5a84344 --- /dev/null +++ b/bundle/nvim-treesitter/queries/toml/indents.scm @@ -0,0 +1,11 @@ +[ + (array) + (inline_table) +] @indent + +[ + "[" + "]" + "{" + "}" +] @branch diff --git a/bundle/nvim-treesitter/queries/toml/injections.scm b/bundle/nvim-treesitter/queries/toml/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/toml/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/toml/locals.scm b/bundle/nvim-treesitter/queries/toml/locals.scm new file mode 100644 index 000000000..d3dda77b4 --- /dev/null +++ b/bundle/nvim-treesitter/queries/toml/locals.scm @@ -0,0 +1,4 @@ +[ + (table) + (table_array_element) +] @scope diff --git a/bundle/nvim-treesitter/queries/tsx/folds.scm b/bundle/nvim-treesitter/queries/tsx/folds.scm new file mode 100644 index 000000000..07391231c --- /dev/null +++ b/bundle/nvim-treesitter/queries/tsx/folds.scm @@ -0,0 +1 @@ +; inherits: typescript,jsx diff --git a/bundle/nvim-treesitter/queries/tsx/highlights.scm b/bundle/nvim-treesitter/queries/tsx/highlights.scm new file mode 100644 index 000000000..07391231c --- /dev/null +++ b/bundle/nvim-treesitter/queries/tsx/highlights.scm @@ -0,0 +1 @@ +; inherits: typescript,jsx diff --git a/bundle/nvim-treesitter/queries/tsx/indents.scm b/bundle/nvim-treesitter/queries/tsx/indents.scm new file mode 100644 index 000000000..07391231c --- /dev/null +++ b/bundle/nvim-treesitter/queries/tsx/indents.scm @@ -0,0 +1 @@ +; inherits: typescript,jsx diff --git a/bundle/nvim-treesitter/queries/tsx/injections.scm b/bundle/nvim-treesitter/queries/tsx/injections.scm new file mode 100644 index 000000000..04328f099 --- /dev/null +++ b/bundle/nvim-treesitter/queries/tsx/injections.scm @@ -0,0 +1 @@ +; inherits: ecma diff --git a/bundle/nvim-treesitter/queries/tsx/locals.scm b/bundle/nvim-treesitter/queries/tsx/locals.scm new file mode 100644 index 000000000..07391231c --- /dev/null +++ b/bundle/nvim-treesitter/queries/tsx/locals.scm @@ -0,0 +1 @@ +; inherits: typescript,jsx diff --git a/bundle/nvim-treesitter/queries/turtle/folds.scm b/bundle/nvim-treesitter/queries/turtle/folds.scm new file mode 100644 index 000000000..863e442a7 --- /dev/null +++ b/bundle/nvim-treesitter/queries/turtle/folds.scm @@ -0,0 +1,4 @@ +[ + (statement) + (blank_node_property_list) +] @fold diff --git a/bundle/nvim-treesitter/queries/turtle/highlights.scm b/bundle/nvim-treesitter/queries/turtle/highlights.scm new file mode 100644 index 000000000..0608f96ae --- /dev/null +++ b/bundle/nvim-treesitter/queries/turtle/highlights.scm @@ -0,0 +1,58 @@ +(string) @string + +(lang_tag) @type + +[ + "_:" + "<" + ">" + (namespace) +] @namespace + +[ + (iri_reference) + (prefixed_name) +] @variable + +(blank_node_label) @variable + +"a" @variable.builtin + +(integer) @number + +[ + (decimal) + (double) +] @float + +(boolean_literal) @boolean + +[ + "BASE" + "PREFIX" + "@prefix" + "@base" +] @keyword + +[ + "." + "," + ";" +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + (anon) +] @punctuation.bracket + +(comment) @comment + +(echar) @string.escape + + +(rdf_literal + "^^" @type + datatype: (_ ["<" ">" (namespace)] @type) @type) diff --git a/bundle/nvim-treesitter/queries/turtle/indents.scm b/bundle/nvim-treesitter/queries/turtle/indents.scm new file mode 100644 index 000000000..839f50c71 --- /dev/null +++ b/bundle/nvim-treesitter/queries/turtle/indents.scm @@ -0,0 +1,10 @@ +[ + (statement) + (blank_node_property_list) + (collection) +] @indent +[ + "]" + ")" +] @branch + diff --git a/bundle/nvim-treesitter/queries/turtle/injections.scm b/bundle/nvim-treesitter/queries/turtle/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/turtle/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/turtle/locals.scm b/bundle/nvim-treesitter/queries/turtle/locals.scm new file mode 100644 index 000000000..e791f0bbd --- /dev/null +++ b/bundle/nvim-treesitter/queries/turtle/locals.scm @@ -0,0 +1,12 @@ +(turtle_doc) @scope + +(subject + [ + (prefixed_name) + (iri_reference) + ] @definition.var) + +[ + (prefixed_name) + (iri_reference) +] @reference diff --git a/bundle/nvim-treesitter/queries/typescript/folds.scm b/bundle/nvim-treesitter/queries/typescript/folds.scm new file mode 100644 index 000000000..dced30d9a --- /dev/null +++ b/bundle/nvim-treesitter/queries/typescript/folds.scm @@ -0,0 +1,7 @@ +; inherits: ecma + +[ + (interface_declaration) + (internal_module) + (type_alias_declaration) +] @fold diff --git a/bundle/nvim-treesitter/queries/typescript/highlights.scm b/bundle/nvim-treesitter/queries/typescript/highlights.scm new file mode 100644 index 000000000..26725f821 --- /dev/null +++ b/bundle/nvim-treesitter/queries/typescript/highlights.scm @@ -0,0 +1,80 @@ +; inherits: ecma +[ +"abstract" +"declare" +"enum" +"export" +"implements" +"interface" +"keyof" +"namespace" +"private" +"protected" +"public" +"type" +"readonly" +] @keyword + +; types + +(type_identifier) @type +(predefined_type) @type.builtin + +(import_statement "type" + (import_clause + (named_imports + ((import_specifier + name: (identifier) @type))))) + +; punctuation + +(type_arguments + "<" @punctuation.bracket + ">" @punctuation.bracket) + +(union_type + "|" @punctuation.delimiter) + +(intersection_type + "&" @punctuation.delimiter) + +(type_annotation + ":" @punctuation.delimiter) + +(pair + ":" @punctuation.delimiter) + +(property_signature "?" @punctuation.special) +(optional_parameter "?" @punctuation.special) + +; Variables + +(undefined) @variable.builtin + +;;; Parameters +(required_parameter (identifier) @parameter) +(optional_parameter (identifier) @parameter) + +(required_parameter + (rest_pattern + (identifier) @parameter)) + +;; ({ a }) => null +(required_parameter + (object_pattern + (shorthand_property_identifier_pattern) @parameter)) + +;; ({ a: b }) => null +(required_parameter + (object_pattern + (pair_pattern + value: (identifier) @parameter))) + +;; ([ a ]) => null +(required_parameter + (array_pattern + (identifier) @parameter)) + +;; a => null +(arrow_function + parameter: (identifier) @parameter) diff --git a/bundle/nvim-treesitter/queries/typescript/indents.scm b/bundle/nvim-treesitter/queries/typescript/indents.scm new file mode 100644 index 000000000..d7f9cbc2a --- /dev/null +++ b/bundle/nvim-treesitter/queries/typescript/indents.scm @@ -0,0 +1,7 @@ +; inherits: ecma + +[ + (enum_declaration) + (interface_declaration) + (object_type) +] @indent diff --git a/bundle/nvim-treesitter/queries/typescript/injections.scm b/bundle/nvim-treesitter/queries/typescript/injections.scm new file mode 100644 index 000000000..04328f099 --- /dev/null +++ b/bundle/nvim-treesitter/queries/typescript/injections.scm @@ -0,0 +1 @@ +; inherits: ecma diff --git a/bundle/nvim-treesitter/queries/typescript/locals.scm b/bundle/nvim-treesitter/queries/typescript/locals.scm new file mode 100644 index 000000000..efbcaecaa --- /dev/null +++ b/bundle/nvim-treesitter/queries/typescript/locals.scm @@ -0,0 +1,27 @@ +; inherits: ecma +(required_parameter (identifier) @definition) +(optional_parameter (identifier) @definition) + +; x => x +(arrow_function + parameter: (identifier) @definition.parameter) + +;; ({ a }) => null +(required_parameter + (object_pattern + (shorthand_property_identifier_pattern) @definition.parameter)) + +;; ({ a: b }) => null +(required_parameter + (object_pattern + (pair_pattern + value: (identifier) @definition.parameter))) + +;; ([ a ]) => null +(required_parameter + (array_pattern + (identifier) @definition.parameter)) + +(required_parameter + (rest_pattern + (identifier) @definition.parameter)) diff --git a/bundle/nvim-treesitter/queries/vala/highlights.scm b/bundle/nvim-treesitter/queries/vala/highlights.scm new file mode 100644 index 000000000..d1be32530 --- /dev/null +++ b/bundle/nvim-treesitter/queries/vala/highlights.scm @@ -0,0 +1,297 @@ +; Identifiers + +((identifier) @constant (#match? @constant "^[A-Z][A-Z\\d_]+$")) + +(namespaced_identifier + left: [ + ; Lowercased names in lhs typically are variables, while camel cased are namespaces + ; ((identifier) @namespace (#match? @namespace "^[A-Z]+[a-z]+$")) + ((identifier) @variable (#match? @variable "^[a-z]")) + (_) + ] + right: [ + ; Lowercased are variables, camel cased are types + ; ((identifier) @parameter (#match? @parameter "^[a-z]")) + ((identifier) @type (#match? @type "^[A-Z]+[a-z]+$")) + (_) + ] +) + +((identifier) @constructor (#match? @constructor "^[A-Z]*[a-z]+")) + +; Pointers + +(address_of_identifier "&" @symbol) +(pointer_type "*" @symbol) +(indirection_identifier "*" @symbol) + +; Misc + +(number) @number + +[ + "{" + "}" + "(" + ")" + "[" + "]" +] @punctuation.bracket + +[ + ";" + ":" + "." + "," + "->" +] @punctuation.delimiter + +; Reserved keywords + +[ + "return" + "yield" + "break" +] @keyword.return + + +(null) @constant.builtin + +[ + "typeof" + "is" +] @keyword.operator + +[ + (modifier) + "var" + "class" + "interface" + (property_parameter) + (this) + "enum" + "new" + "in" + "as" + "try" + "catch" + "requires" + "ensures" + "owned" + "throws" + "delete" + "#if" + "#elif" + (preproc_else) + (preproc_endif) +] @keyword + +"throw" @exception + +[ + "if" + "else" + "switch" + "case" + "default" +] @conditional + +[ + "for" + "foreach" + "while" + "do" +] @repeat + +[ + (true) + (false) +] @boolean + +; Operators + +(binary_expression + [ + "*" + "/" + "+" + "-" + "%" + "<" + "<=" + ">" + ">=" + "==" + "!=" + "+=" + "-=" + "*=" + "/=" + "%=" + "&&" + "||" + "&" + "|" + "^" + "~" + "|=" + "&=" + "^=" + "??" + "=" + ] @operator +) + +(unary_expression + [ + "-" + "!" + "--" + "++" + ] @operator +) + +; Declaration + +(declaration + type_name: (_) @type +) + +; Methods + +(function_definition + type: (_) @type + name: [ + (identifier) @method + (generic_identifier (_) @type) + ] +) + +(function_call + identifier: [ + (identifier) @method + (generic_identifier (_) @type) + ] +) + +(member_function + identifier: [ + (identifier) @method + (generic_identifier (_) @type) + ] +) + +; Types + +(primitive_type) @type + +(nullable_type + (_) @type + "?" @symbol +) + +; Comments + +(comment) @comment + +; Namespace + +(namespace + "namespace" @include + (_) @namespace +) + +"global::" @namespace + +(using + "using" @include + (_) @namespace +) + +; Classes + +(class_declaration) @type + +(class_constructor_definition + name: [ + (_) + (namespaced_identifier (_) @constructor .) + ] @constructor +) + +(class_destructor + "~" @symbol + (_) @constructor +) + +; Interfaces + +(interface_declaration) @type + +; Strings and escape sequences + +(string_literal) @string +(verbatim) @string +(escape_sequence) @string.escape + +(string_template + "@" @symbol +) @string + +(string_template_variable) @variable + +(string_template_expression) @variable + +; New instance from Object + +(new_instance + "new" @keyword +) + +; GObject construct + +(gobject_construct + "construct" @keyword +) + +; Try statement + +(try_statement + exception: (parameter_list (declaration_parameter + (_) @exception + (_) @variable + )) +) + +; Enum + +(enum_declaration + name: (identifier) @type +) + +; Loop + +(foreach_statement + loop_item: (identifier) @variable +) + +; Casting + +(static_cast + type: (_) @type +) + +(dynamic_cast + type: (_) @type +) + +; Regex + +(regex_literal) @string.regex + +; Code attribute + +(code_attribute + name: (identifier) @attribute + param: (_) @attribute +) @attribute diff --git a/bundle/nvim-treesitter/queries/verilog/folds.scm b/bundle/nvim-treesitter/queries/verilog/folds.scm new file mode 100644 index 000000000..efc0ac66b --- /dev/null +++ b/bundle/nvim-treesitter/queries/verilog/folds.scm @@ -0,0 +1,6 @@ +[ + (seq_block) + (function_body_declaration) + (task_body_declaration) + (generate_block) +] @fold diff --git a/bundle/nvim-treesitter/queries/verilog/highlights.scm b/bundle/nvim-treesitter/queries/verilog/highlights.scm new file mode 100644 index 000000000..ba282aa07 --- /dev/null +++ b/bundle/nvim-treesitter/queries/verilog/highlights.scm @@ -0,0 +1,311 @@ +; Keywords + +[ + ; block delimeters + (module_keyword) + "endmodule" + "program" + "endprogram" + "class" + "endclass" + "interface" + "endinterface" + "package" + "endpackage" + "checker" + "endchecker" + "config" + "endconfig" + + "pure" + "virtual" + "extends" + "implements" + "super" + (class_item_qualifier) + + "parameter" + "localparam" + "defparam" + "assign" + "typedef" + "modport" + "fork" + "join" + "join_none" + "join_any" + "default" + "break" + "assert" + (unique_priority) + "tagged" + "extern" +] @keyword + +[ + "function" + "endfunction" + + "task" + "endtask" +] @keyword.function + +"return" @keyword.return + +[ + "begin" + "end" +] @label + +[ + (always_keyword) + "generate" + "for" + "foreach" + "repeat" + "forever" + "initial" + "while" +] @repeat + +[ + "if" + "else" + (case_keyword) + "endcase" +] @conditional + +(comment) @comment + +(include_compiler_directive) @constant.macro +(package_import_declaration + "import" @include) + +(package_import_declaration + (package_import_item + (package_identifier + (simple_identifier) @constant))) + +(text_macro_identifier + (simple_identifier) @constant.macro) + +(package_scope + (package_identifier + (simple_identifier) @constant)) + +(package_declaration + (package_identifier + (simple_identifier) @constant)) + +(parameter_port_list + "#" @constructor) + +[ + "=" + "-" + "+" + "/" + "*" + "^" + "&" + "|" + "&&" + "||" + ":" + (unary_operator) + "{" + "}" + "'{" + "<=" + "@" + "or" + "and" + "==" + "!=" + "===" + "!==" + "-:" + "<" + ">" + ">=" + "%" + ">>" + "<<" + "|=" + (inc_or_dec_operator) +] @operator + +(cast + ["'" "(" ")"] @operator) + +(edge_identifier) @attribute + +(port_direction) @label +(port_identifier + (simple_identifier) @variable) + +[ + (net_type) + (integer_vector_type) + (integer_atom_type) +] @type.builtin + +[ + "signed" + "unsigned" +] @label + +(data_type + (simple_identifier) @type) + +(method_call_body + (method_identifier) @field) + +(interface_identifier + (simple_identifier) @type) + +(modport_identifier + (modport_identifier + (simple_identifier) @field)) + +(net_port_type1 + (simple_identifier) @type) + +[ + (double_quoted_string) + (string_literal) +] @string + +[ + (include_compiler_directive) + (default_nettype_compiler_directive) + (timescale_compiler_directive) +] @constant.macro + +; begin/end label +(seq_block + (simple_identifier) @comment) + +[ + ";" + "::" + "," + "." +] @punctuation.delimiter + + +(default_nettype_compiler_directive + (default_nettype_value) @string) + +(text_macro_identifier + (simple_identifier) @constant) + +(module_declaration + (module_header + (simple_identifier) @constructor)) + +(class_constructor_declaration + "new" @constructor) + +(parameter_identifier + (simple_identifier) @parameter) + +[ + (integral_number) + (unsigned_number) + (unbased_unsized_literal) +] @number + +(time_unit) @attribute + +(checker_instantiation + (checker_identifier + (simple_identifier) @constructor)) + +(module_instantiation + (simple_identifier) @constructor) + +(name_of_instance + (instance_identifier + (simple_identifier) @variable)) + +(interface_port_declaration + (interface_identifier + (simple_identifier) @type)) + +(net_declaration + (simple_identifier) @type) + +(lifetime) @label + +(function_identifier + (function_identifier + (simple_identifier) @function)) + +(function_subroutine_call + (subroutine_call + (tf_call + (simple_identifier) @function))) + +(function_subroutine_call + (subroutine_call + (system_tf_call + (system_tf_identifier) @function.builtin))) + +(task_identifier + (task_identifier + (simple_identifier) @method)) + +;;TODO: fixme +;(assignment_pattern_expression + ;(assignment_pattern + ;(parameter_identifier) @field)) + +(type_declaration + (data_type ["packed"] @label)) + +(struct_union) @type + +[ + "enum" +] @type + +(enum_name_declaration + (enum_identifier + (simple_identifier) @constant)) + +(type_declaration + (simple_identifier) @type) + +[ + (integer_atom_type) + (non_integer_type) + "genvar" +] @type.builtin + +(struct_union_member + (list_of_variable_decl_assignments + (variable_decl_assignment + (simple_identifier) @field))) + +(member_identifier + (simple_identifier) @field) + +(struct_union_member + (data_type_or_void + (data_type + (simple_identifier) @type))) + +(type_declaration + (simple_identifier) @type) + +(generate_block_identifier) @comment + +[ + "[" + "]" + "(" + ")" +] @punctuation.bracket + +(ERROR) @error diff --git a/bundle/nvim-treesitter/queries/verilog/injections.scm b/bundle/nvim-treesitter/queries/verilog/injections.scm new file mode 100644 index 000000000..4bb7d675d --- /dev/null +++ b/bundle/nvim-treesitter/queries/verilog/injections.scm @@ -0,0 +1 @@ +(comment) @comment diff --git a/bundle/nvim-treesitter/queries/verilog/locals.scm b/bundle/nvim-treesitter/queries/verilog/locals.scm new file mode 100644 index 000000000..507ddea44 --- /dev/null +++ b/bundle/nvim-treesitter/queries/verilog/locals.scm @@ -0,0 +1,61 @@ +[ + (loop_generate_construct) + (loop_statement) + (conditional_statement) + (case_item) + (function_declaration) + (always_construct) + (module_declaration) +] @scope + +(data_declaration + (list_of_variable_decl_assignments + (variable_decl_assignment + (simple_identifier) @definition.var))) + +(genvar_initialization + (genvar_identifier + (simple_identifier) @definition.var)) + +(for_initialization + (for_variable_declaration + (simple_identifier) @definition.var)) + +(net_declaration + (list_of_net_decl_assignments + (net_decl_assignment + (simple_identifier) @definition.var))) + +(ansi_port_declaration + (port_identifier + (simple_identifier) @definition.var)) + +(parameter_declaration + (list_of_param_assignments + (param_assignment + (parameter_identifier + (simple_identifier) @definition.parameter)))) + +(local_parameter_declaration + (list_of_param_assignments + (param_assignment + (parameter_identifier + (simple_identifier) @definition.parameter)))) + +;; TODO: fixme +;(function_declaration + ;(function_identifier + ;(simple_identifier) @definition.function)) + +(function_declaration + (function_body_declaration + (function_identifier + (function_identifier + (simple_identifier) @definition.function)))) + +(tf_port_item1 + (port_identifier + (simple_identifier) @definition.parameter)) + +; too broad, now includes types etc +(simple_identifier) @reference diff --git a/bundle/nvim-treesitter/queries/vim/highlights.scm b/bundle/nvim-treesitter/queries/vim/highlights.scm new file mode 100644 index 000000000..64120e14a --- /dev/null +++ b/bundle/nvim-treesitter/queries/vim/highlights.scm @@ -0,0 +1,219 @@ +(identifier) @variable +((identifier) @constant + (#lua-match? @constant "^[A-Z][A-Z_0-9]*$")) + +;; Keywords + +[ + "if" + "else" + "elseif" + "endif" +] @conditional + +[ + "try" + "catch" + "finally" + "endtry" + "throw" +] @exception + +[ + "for" + "endfor" + "in" + "while" + "endwhile" +] @repeat + +[ + "function" + "endfunction" +] @keyword.function + +;; Function related +(function_declaration name: (_) @function) +(call_expression function: (identifier) @function) +(parameters (identifier) @parameter) +(default_parameter (identifier) @parameter) + +[ (bang) (spread) (at) ] @punctuation.special + +[ (no_option) (inv_option) (default_option) (option_name) ] @variable.builtin +[ + (scope) + "a:" + "$" +] @namespace + +;; Commands and user defined commands + +[ + "let" + "unlet" + "call" + "execute" + "normal" + "set" + "setlocal" + "silent" + "echo" + "echomsg" + "autocmd" + "augroup" + "return" + "syntax" + "lua" + "ruby" + "perl" + "python" + "highlight" + "delcommand" + "comclear" + "colorscheme" + "startinsert" + "stopinsert" + "global" + "runtime" + "wincmd" +] @keyword +(map_statement cmd: _ @keyword) +(command_name) @function.macro + +;; Syntax command + +(syntax_statement (keyword) @string) +(syntax_statement [ + "enable" + "on" + "off" + "reset" + "case" + "spell" + "foldlevel" + "iskeyword" + "keyword" + "match" + "cluster" + "region" +] @keyword) + +(syntax_argument name: _ @keyword) + +[ + "" + "" + "" + "