aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/lint.yml4
-rw-r--r--.github/workflows/test-queries.yml2
-rw-r--r--.stylua.toml6
-rw-r--r--CONTRIBUTING.md27
-rw-r--r--Makefile7
-rw-r--r--README.md742
-rw-r--r--SUPPORTED_LANGUAGES.md305
-rw-r--r--TODO.md34
-rw-r--r--assets/logo.pngbin26664 -> 0 bytes
-rw-r--r--autoload/nvim_treesitter.vim27
-rw-r--r--doc/nvim-treesitter.txt484
-rw-r--r--lua/nvim-treesitter.lua22
-rw-r--r--lua/nvim-treesitter/caching.lua71
-rw-r--r--lua/nvim-treesitter/compat.lua39
-rw-r--r--lua/nvim-treesitter/config.lua144
-rw-r--r--lua/nvim-treesitter/configs.lua616
-rw-r--r--lua/nvim-treesitter/fold.lua123
-rw-r--r--lua/nvim-treesitter/health.lua181
-rw-r--r--lua/nvim-treesitter/highlight.lua49
-rw-r--r--lua/nvim-treesitter/incremental_selection.lua176
-rw-r--r--lua/nvim-treesitter/indent.lua121
-rw-r--r--lua/nvim-treesitter/info.lua190
-rw-r--r--lua/nvim-treesitter/init.lua11
-rw-r--r--lua/nvim-treesitter/install.lua842
-rw-r--r--lua/nvim-treesitter/locals.lua125
-rw-r--r--lua/nvim-treesitter/parsers.lua4366
-rw-r--r--lua/nvim-treesitter/query.lua304
-rw-r--r--lua/nvim-treesitter/query_predicates.lua167
-rw-r--r--lua/nvim-treesitter/shell_cmds.lua255
-rw-r--r--lua/nvim-treesitter/shell_command_selectors.lua368
-rw-r--r--lua/nvim-treesitter/statusline.lua53
-rw-r--r--lua/nvim-treesitter/ts_utils.lua482
-rw-r--r--lua/nvim-treesitter/tsrange.lua154
-rw-r--r--lua/nvim-treesitter/utils.lua235
-rw-r--r--parser-info/.gitignore2
-rw-r--r--parser/.gitignore2
-rw-r--r--plugin/filetypes.lua66
-rw-r--r--plugin/nvim-treesitter.lua102
-rw-r--r--plugin/query_predicates.lua141
-rw-r--r--runtime/queries/ada/folds.scm (renamed from queries/ada/folds.scm)0
-rw-r--r--runtime/queries/ada/highlights.scm (renamed from queries/ada/highlights.scm)0
-rw-r--r--runtime/queries/ada/injections.scm (renamed from queries/unison/injections.scm)0
-rw-r--r--runtime/queries/ada/locals.scm (renamed from queries/ada/locals.scm)0
-rw-r--r--runtime/queries/agda/folds.scm (renamed from queries/agda/folds.scm)0
-rw-r--r--runtime/queries/agda/highlights.scm (renamed from queries/agda/highlights.scm)0
-rw-r--r--runtime/queries/agda/injections.scm (renamed from queries/solidity/injections.scm)0
-rw-r--r--runtime/queries/angular/folds.scm (renamed from queries/angular/folds.scm)0
-rw-r--r--runtime/queries/angular/highlights.scm (renamed from queries/angular/highlights.scm)0
-rw-r--r--runtime/queries/angular/indents.scm (renamed from queries/angular/indents.scm)0
-rw-r--r--runtime/queries/angular/injections.scm (renamed from queries/angular/injections.scm)0
-rw-r--r--runtime/queries/angular/locals.scm (renamed from queries/angular/locals.scm)0
-rw-r--r--runtime/queries/apex/folds.scm (renamed from queries/apex/folds.scm)0
-rw-r--r--runtime/queries/apex/highlights.scm (renamed from queries/apex/highlights.scm)0
-rw-r--r--runtime/queries/apex/injections.scm (renamed from queries/apex/injections.scm)0
-rw-r--r--runtime/queries/apex/locals.scm (renamed from queries/apex/locals.scm)0
-rw-r--r--runtime/queries/arduino/folds.scm (renamed from queries/arduino/folds.scm)0
-rw-r--r--runtime/queries/arduino/highlights.scm (renamed from queries/arduino/highlights.scm)0
-rw-r--r--runtime/queries/arduino/indents.scm (renamed from queries/arduino/indents.scm)0
-rw-r--r--runtime/queries/arduino/injections.scm (renamed from queries/arduino/injections.scm)0
-rw-r--r--runtime/queries/arduino/locals.scm (renamed from queries/arduino/locals.scm)0
-rw-r--r--runtime/queries/asm/highlights.scm (renamed from queries/asm/highlights.scm)0
-rw-r--r--runtime/queries/asm/injections.scm (renamed from queries/asm/injections.scm)0
-rw-r--r--runtime/queries/astro/folds.scm (renamed from queries/astro/folds.scm)0
-rw-r--r--runtime/queries/astro/highlights.scm (renamed from queries/astro/highlights.scm)0
-rw-r--r--runtime/queries/astro/indents.scm (renamed from queries/astro/indents.scm)0
-rw-r--r--runtime/queries/astro/injections.scm (renamed from queries/astro/injections.scm)0
-rw-r--r--runtime/queries/astro/locals.scm (renamed from queries/astro/locals.scm)0
-rw-r--r--runtime/queries/authzed/highlights.scm (renamed from queries/authzed/highlights.scm)0
-rw-r--r--runtime/queries/authzed/injections.scm (renamed from queries/bass/injections.scm)0
-rw-r--r--runtime/queries/awk/highlights.scm (renamed from queries/awk/highlights.scm)0
-rw-r--r--runtime/queries/awk/injections.scm (renamed from queries/awk/injections.scm)0
-rw-r--r--runtime/queries/bash/folds.scm (renamed from queries/bash/folds.scm)0
-rw-r--r--runtime/queries/bash/highlights.scm (renamed from queries/bash/highlights.scm)0
-rw-r--r--runtime/queries/bash/injections.scm (renamed from queries/bash/injections.scm)0
-rw-r--r--runtime/queries/bash/locals.scm (renamed from queries/bash/locals.scm)0
-rw-r--r--runtime/queries/bass/folds.scm (renamed from queries/bass/folds.scm)0
-rw-r--r--runtime/queries/bass/highlights.scm (renamed from queries/bass/highlights.scm)0
-rw-r--r--runtime/queries/bass/indents.scm (renamed from queries/bass/indents.scm)0
-rw-r--r--runtime/queries/bass/injections.scm (renamed from queries/scala/injections.scm)0
-rw-r--r--runtime/queries/bass/locals.scm (renamed from queries/bass/locals.scm)0
-rw-r--r--runtime/queries/beancount/folds.scm (renamed from queries/beancount/folds.scm)0
-rw-r--r--runtime/queries/beancount/highlights.scm (renamed from queries/beancount/highlights.scm)0
-rw-r--r--runtime/queries/beancount/injections.scm (renamed from queries/verilog/injections.scm)0
-rw-r--r--runtime/queries/bibtex/folds.scm (renamed from queries/bibtex/folds.scm)0
-rw-r--r--runtime/queries/bibtex/highlights.scm (renamed from queries/bibtex/highlights.scm)0
-rw-r--r--runtime/queries/bibtex/indents.scm (renamed from queries/bibtex/indents.scm)0
-rw-r--r--runtime/queries/bibtex/injections.scm (renamed from queries/bibtex/injections.scm)0
-rw-r--r--runtime/queries/bicep/folds.scm (renamed from queries/bicep/folds.scm)0
-rw-r--r--runtime/queries/bicep/highlights.scm (renamed from queries/bicep/highlights.scm)0
-rw-r--r--runtime/queries/bicep/indents.scm (renamed from queries/bicep/indents.scm)0
-rw-r--r--runtime/queries/bicep/injections.scm (renamed from queries/bicep/injections.scm)0
-rw-r--r--runtime/queries/bicep/locals.scm (renamed from queries/bicep/locals.scm)0
-rw-r--r--runtime/queries/bitbake/folds.scm (renamed from queries/bitbake/folds.scm)0
-rw-r--r--runtime/queries/bitbake/highlights.scm (renamed from queries/bitbake/highlights.scm)0
-rw-r--r--runtime/queries/bitbake/indents.scm (renamed from queries/bitbake/indents.scm)0
-rw-r--r--runtime/queries/bitbake/injections.scm (renamed from queries/bitbake/injections.scm)0
-rw-r--r--runtime/queries/bitbake/locals.scm (renamed from queries/bitbake/locals.scm)0
-rw-r--r--runtime/queries/blade/folds.scm (renamed from queries/blade/folds.scm)0
-rw-r--r--runtime/queries/blade/highlights.scm (renamed from queries/blade/highlights.scm)0
-rw-r--r--runtime/queries/blade/indents.scm (renamed from queries/blade/indents.scm)0
-rw-r--r--runtime/queries/blade/injections.scm (renamed from queries/blade/injections.scm)0
-rw-r--r--runtime/queries/blueprint/highlights.scm (renamed from queries/blueprint/highlights.scm)0
-rw-r--r--runtime/queries/blueprint/injections.scm (renamed from queries/ada/injections.scm)0
-rw-r--r--runtime/queries/bp/folds.scm (renamed from queries/bp/folds.scm)0
-rw-r--r--runtime/queries/bp/highlights.scm (renamed from queries/bp/highlights.scm)0
-rw-r--r--runtime/queries/bp/indents.scm (renamed from queries/bp/indents.scm)0
-rw-r--r--runtime/queries/bp/injections.scm (renamed from queries/agda/injections.scm)0
-rw-r--r--runtime/queries/bp/locals.scm (renamed from queries/bp/locals.scm)0
-rw-r--r--runtime/queries/brightscript/folds.scm (renamed from queries/brightscript/folds.scm)0
-rw-r--r--runtime/queries/brightscript/highlights.scm (renamed from queries/brightscript/highlights.scm)0
-rw-r--r--runtime/queries/brightscript/indents.scm (renamed from queries/brightscript/indents.scm)0
-rw-r--r--runtime/queries/brightscript/injections.scm (renamed from queries/authzed/injections.scm)0
-rw-r--r--runtime/queries/c/folds.scm (renamed from queries/c/folds.scm)0
-rw-r--r--runtime/queries/c/highlights.scm (renamed from queries/c/highlights.scm)0
-rw-r--r--runtime/queries/c/indents.scm (renamed from queries/c/indents.scm)0
-rw-r--r--runtime/queries/c/injections.scm (renamed from queries/c/injections.scm)0
-rw-r--r--runtime/queries/c/locals.scm (renamed from queries/c/locals.scm)0
-rw-r--r--runtime/queries/c_sharp/folds.scm (renamed from queries/c_sharp/folds.scm)0
-rw-r--r--runtime/queries/c_sharp/highlights.scm (renamed from queries/c_sharp/highlights.scm)0
-rw-r--r--runtime/queries/c_sharp/injections.scm (renamed from queries/beancount/injections.scm)0
-rw-r--r--runtime/queries/c_sharp/locals.scm (renamed from queries/c_sharp/locals.scm)0
-rw-r--r--runtime/queries/caddy/folds.scm (renamed from queries/caddy/folds.scm)0
-rw-r--r--runtime/queries/caddy/highlights.scm (renamed from queries/caddy/highlights.scm)0
-rw-r--r--runtime/queries/caddy/indents.scm (renamed from queries/caddy/indents.scm)0
-rw-r--r--runtime/queries/caddy/injections.scm (renamed from queries/blueprint/injections.scm)0
-rw-r--r--runtime/queries/cairo/folds.scm (renamed from queries/cairo/folds.scm)0
-rw-r--r--runtime/queries/cairo/highlights.scm (renamed from queries/cairo/highlights.scm)0
-rw-r--r--runtime/queries/cairo/indents.scm (renamed from queries/cairo/indents.scm)0
-rw-r--r--runtime/queries/cairo/injections.scm (renamed from queries/cairo/injections.scm)0
-rw-r--r--runtime/queries/cairo/locals.scm (renamed from queries/cairo/locals.scm)0
-rw-r--r--runtime/queries/capnp/folds.scm (renamed from queries/capnp/folds.scm)0
-rw-r--r--runtime/queries/capnp/highlights.scm (renamed from queries/capnp/highlights.scm)0
-rw-r--r--runtime/queries/capnp/indents.scm (renamed from queries/capnp/indents.scm)0
-rw-r--r--runtime/queries/capnp/injections.scm (renamed from queries/bp/injections.scm)0
-rw-r--r--runtime/queries/capnp/locals.scm (renamed from queries/capnp/locals.scm)0
-rw-r--r--runtime/queries/chatito/folds.scm (renamed from queries/chatito/folds.scm)0
-rw-r--r--runtime/queries/chatito/highlights.scm (renamed from queries/chatito/highlights.scm)0
-rw-r--r--runtime/queries/chatito/indents.scm (renamed from queries/chatito/indents.scm)0
-rw-r--r--runtime/queries/chatito/injections.scm (renamed from queries/brightscript/injections.scm)0
-rw-r--r--runtime/queries/chatito/locals.scm (renamed from queries/chatito/locals.scm)0
-rw-r--r--runtime/queries/circom/folds.scm (renamed from queries/circom/folds.scm)0
-rw-r--r--runtime/queries/circom/highlights.scm (renamed from queries/circom/highlights.scm)0
-rw-r--r--runtime/queries/circom/injections.scm (renamed from queries/c_sharp/injections.scm)0
-rw-r--r--runtime/queries/circom/locals.scm (renamed from queries/circom/locals.scm)0
-rw-r--r--runtime/queries/clojure/folds.scm (renamed from queries/clojure/folds.scm)0
-rw-r--r--runtime/queries/clojure/highlights.scm (renamed from queries/clojure/highlights.scm)0
-rw-r--r--runtime/queries/clojure/injections.scm (renamed from queries/caddy/injections.scm)0
-rw-r--r--runtime/queries/clojure/locals.scm (renamed from queries/clojure/locals.scm)0
-rw-r--r--runtime/queries/cmake/folds.scm (renamed from queries/cmake/folds.scm)0
-rw-r--r--runtime/queries/cmake/highlights.scm (renamed from queries/cmake/highlights.scm)0
-rw-r--r--runtime/queries/cmake/indents.scm (renamed from queries/cmake/indents.scm)0
-rw-r--r--runtime/queries/cmake/injections.scm (renamed from queries/cmake/injections.scm)0
-rw-r--r--runtime/queries/comment/highlights.scm (renamed from queries/comment/highlights.scm)0
-rw-r--r--runtime/queries/commonlisp/folds.scm (renamed from queries/commonlisp/folds.scm)0
-rw-r--r--runtime/queries/commonlisp/highlights.scm (renamed from queries/commonlisp/highlights.scm)0
-rw-r--r--runtime/queries/commonlisp/injections.scm (renamed from queries/commonlisp/injections.scm)0
-rw-r--r--runtime/queries/commonlisp/locals.scm (renamed from queries/commonlisp/locals.scm)0
-rw-r--r--runtime/queries/cooklang/highlights.scm (renamed from queries/cooklang/highlights.scm)0
-rw-r--r--runtime/queries/cooklang/injections.scm (renamed from queries/capnp/injections.scm)0
-rw-r--r--runtime/queries/corn/folds.scm (renamed from queries/corn/folds.scm)0
-rw-r--r--runtime/queries/corn/highlights.scm (renamed from queries/corn/highlights.scm)0
-rw-r--r--runtime/queries/corn/indents.scm (renamed from queries/corn/indents.scm)0
-rw-r--r--runtime/queries/corn/injections.scm (renamed from queries/chatito/injections.scm)0
-rw-r--r--runtime/queries/corn/locals.scm (renamed from queries/corn/locals.scm)0
-rw-r--r--runtime/queries/cpon/folds.scm (renamed from queries/cpon/folds.scm)0
-rw-r--r--runtime/queries/cpon/highlights.scm (renamed from queries/cpon/highlights.scm)0
-rw-r--r--runtime/queries/cpon/indents.scm (renamed from queries/cpon/indents.scm)0
-rw-r--r--runtime/queries/cpon/injections.scm (renamed from queries/circom/injections.scm)0
-rw-r--r--runtime/queries/cpon/locals.scm (renamed from queries/cpon/locals.scm)0
-rw-r--r--runtime/queries/cpp/folds.scm (renamed from queries/cpp/folds.scm)0
-rw-r--r--runtime/queries/cpp/highlights.scm (renamed from queries/cpp/highlights.scm)0
-rw-r--r--runtime/queries/cpp/indents.scm (renamed from queries/cpp/indents.scm)0
-rw-r--r--runtime/queries/cpp/injections.scm (renamed from queries/cpp/injections.scm)2
-rw-r--r--runtime/queries/cpp/locals.scm (renamed from queries/cpp/locals.scm)0
-rw-r--r--runtime/queries/css/folds.scm (renamed from queries/css/folds.scm)0
-rw-r--r--runtime/queries/css/highlights.scm (renamed from queries/css/highlights.scm)0
-rw-r--r--runtime/queries/css/indents.scm (renamed from queries/css/indents.scm)0
-rw-r--r--runtime/queries/css/injections.scm (renamed from queries/clojure/injections.scm)0
-rw-r--r--runtime/queries/csv/highlights.scm (renamed from queries/csv/highlights.scm)0
-rw-r--r--runtime/queries/cuda/folds.scm (renamed from queries/cuda/folds.scm)0
-rw-r--r--runtime/queries/cuda/highlights.scm (renamed from queries/cuda/highlights.scm)0
-rw-r--r--runtime/queries/cuda/indents.scm (renamed from queries/cuda/indents.scm)0
-rw-r--r--runtime/queries/cuda/injections.scm (renamed from queries/cuda/injections.scm)0
-rw-r--r--runtime/queries/cuda/locals.scm (renamed from queries/cuda/locals.scm)0
-rw-r--r--runtime/queries/cue/folds.scm (renamed from queries/cue/folds.scm)0
-rw-r--r--runtime/queries/cue/highlights.scm (renamed from queries/cue/highlights.scm)0
-rw-r--r--runtime/queries/cue/indents.scm (renamed from queries/cue/indents.scm)0
-rw-r--r--runtime/queries/cue/injections.scm (renamed from queries/cooklang/injections.scm)0
-rw-r--r--runtime/queries/cue/locals.scm (renamed from queries/cue/locals.scm)0
-rw-r--r--runtime/queries/cylc/folds.scm (renamed from queries/cylc/folds.scm)0
-rw-r--r--runtime/queries/cylc/highlights.scm (renamed from queries/cylc/highlights.scm)0
-rw-r--r--runtime/queries/cylc/indents.scm (renamed from queries/cylc/indents.scm)0
-rw-r--r--runtime/queries/cylc/injections.scm (renamed from queries/cylc/injections.scm)0
-rw-r--r--runtime/queries/d/folds.scm (renamed from queries/d/folds.scm)0
-rw-r--r--runtime/queries/d/highlights.scm (renamed from queries/d/highlights.scm)0
-rw-r--r--runtime/queries/d/indents.scm (renamed from queries/d/indents.scm)0
-rw-r--r--runtime/queries/d/injections.scm (renamed from queries/d/injections.scm)0
-rw-r--r--runtime/queries/d/locals.scm (renamed from queries/d/locals.scm)0
-rw-r--r--runtime/queries/dart/folds.scm (renamed from queries/dart/folds.scm)0
-rw-r--r--runtime/queries/dart/highlights.scm (renamed from queries/dart/highlights.scm)0
-rw-r--r--runtime/queries/dart/indents.scm (renamed from queries/dart/indents.scm)0
-rw-r--r--runtime/queries/dart/injections.scm (renamed from queries/corn/injections.scm)0
-rw-r--r--runtime/queries/dart/locals.scm (renamed from queries/dart/locals.scm)0
-rw-r--r--runtime/queries/desktop/folds.scm (renamed from queries/desktop/folds.scm)0
-rw-r--r--runtime/queries/desktop/highlights.scm (renamed from queries/desktop/highlights.scm)0
-rw-r--r--runtime/queries/desktop/injections.scm (renamed from queries/desktop/injections.scm)0
-rw-r--r--runtime/queries/devicetree/folds.scm (renamed from queries/devicetree/folds.scm)0
-rw-r--r--runtime/queries/devicetree/highlights.scm (renamed from queries/devicetree/highlights.scm)0
-rw-r--r--runtime/queries/devicetree/indents.scm (renamed from queries/devicetree/indents.scm)0
-rw-r--r--runtime/queries/devicetree/injections.scm (renamed from queries/cpon/injections.scm)0
-rw-r--r--runtime/queries/devicetree/locals.scm (renamed from queries/devicetree/locals.scm)0
-rw-r--r--runtime/queries/dhall/folds.scm (renamed from queries/dhall/folds.scm)0
-rw-r--r--runtime/queries/dhall/highlights.scm (renamed from queries/dhall/highlights.scm)0
-rw-r--r--runtime/queries/dhall/injections.scm (renamed from queries/dhall/injections.scm)0
-rw-r--r--runtime/queries/diff/folds.scm (renamed from queries/diff/folds.scm)0
-rw-r--r--runtime/queries/diff/highlights.scm (renamed from queries/diff/highlights.scm)0
-rw-r--r--runtime/queries/diff/injections.scm (renamed from queries/css/injections.scm)0
-rw-r--r--runtime/queries/disassembly/highlights.scm (renamed from queries/disassembly/highlights.scm)0
-rw-r--r--runtime/queries/disassembly/injections.scm (renamed from queries/disassembly/injections.scm)0
-rw-r--r--runtime/queries/djot/folds.scm (renamed from queries/djot/folds.scm)0
-rw-r--r--runtime/queries/djot/highlights.scm (renamed from queries/djot/highlights.scm)0
-rw-r--r--runtime/queries/djot/indents.scm (renamed from queries/djot/indents.scm)0
-rw-r--r--runtime/queries/djot/injections.scm (renamed from queries/djot/injections.scm)0
-rw-r--r--runtime/queries/djot/locals.scm (renamed from queries/djot/locals.scm)0
-rw-r--r--runtime/queries/dockerfile/highlights.scm (renamed from queries/dockerfile/highlights.scm)0
-rw-r--r--runtime/queries/dockerfile/injections.scm (renamed from queries/dockerfile/injections.scm)0
-rw-r--r--runtime/queries/dot/highlights.scm (renamed from queries/dot/highlights.scm)0
-rw-r--r--runtime/queries/dot/indents.scm (renamed from queries/dot/indents.scm)0
-rw-r--r--runtime/queries/dot/injections.scm (renamed from queries/dot/injections.scm)0
-rw-r--r--runtime/queries/doxygen/highlights.scm (renamed from queries/doxygen/highlights.scm)0
-rw-r--r--runtime/queries/doxygen/indents.scm (renamed from queries/doxygen/indents.scm)0
-rw-r--r--runtime/queries/doxygen/injections.scm (renamed from queries/doxygen/injections.scm)0
-rw-r--r--runtime/queries/dtd/folds.scm (renamed from queries/dtd/folds.scm)0
-rw-r--r--runtime/queries/dtd/highlights.scm (renamed from queries/dtd/highlights.scm)0
-rw-r--r--runtime/queries/dtd/injections.scm (renamed from queries/dtd/injections.scm)0
-rw-r--r--runtime/queries/dtd/locals.scm (renamed from queries/dtd/locals.scm)0
-rw-r--r--runtime/queries/earthfile/highlights.scm (renamed from queries/earthfile/highlights.scm)0
-rw-r--r--runtime/queries/earthfile/injections.scm (renamed from queries/earthfile/injections.scm)0
-rw-r--r--runtime/queries/ebnf/highlights.scm (renamed from queries/ebnf/highlights.scm)0
-rw-r--r--runtime/queries/ebnf/injections.scm (renamed from queries/cue/injections.scm)0
-rw-r--r--runtime/queries/ecma/folds.scm (renamed from queries/ecma/folds.scm)0
-rw-r--r--runtime/queries/ecma/highlights.scm (renamed from queries/ecma/highlights.scm)0
-rw-r--r--runtime/queries/ecma/indents.scm (renamed from queries/ecma/indents.scm)0
-rw-r--r--runtime/queries/ecma/injections.scm (renamed from queries/ecma/injections.scm)0
-rw-r--r--runtime/queries/ecma/locals.scm (renamed from queries/ecma/locals.scm)0
-rw-r--r--runtime/queries/editorconfig/folds.scm (renamed from queries/editorconfig/folds.scm)0
-rw-r--r--runtime/queries/editorconfig/highlights.scm (renamed from queries/editorconfig/highlights.scm)0
-rw-r--r--runtime/queries/editorconfig/injections.scm (renamed from queries/dart/injections.scm)0
-rw-r--r--runtime/queries/eds/folds.scm (renamed from queries/eds/folds.scm)0
-rw-r--r--runtime/queries/eds/highlights.scm (renamed from queries/eds/highlights.scm)0
-rw-r--r--runtime/queries/eex/highlights.scm (renamed from queries/eex/highlights.scm)0
-rw-r--r--runtime/queries/eex/injections.scm (renamed from queries/eex/injections.scm)0
-rw-r--r--runtime/queries/elixir/folds.scm (renamed from queries/elixir/folds.scm)0
-rw-r--r--runtime/queries/elixir/highlights.scm (renamed from queries/elixir/highlights.scm)0
-rw-r--r--runtime/queries/elixir/indents.scm (renamed from queries/elixir/indents.scm)0
-rw-r--r--runtime/queries/elixir/injections.scm (renamed from queries/elixir/injections.scm)0
-rw-r--r--runtime/queries/elixir/locals.scm (renamed from queries/elixir/locals.scm)0
-rw-r--r--runtime/queries/elm/folds.scm (renamed from queries/elm/folds.scm)0
-rw-r--r--runtime/queries/elm/highlights.scm (renamed from queries/elm/highlights.scm)0
-rw-r--r--runtime/queries/elm/injections.scm (renamed from queries/elm/injections.scm)0
-rw-r--r--runtime/queries/elsa/folds.scm (renamed from queries/elsa/folds.scm)0
-rw-r--r--runtime/queries/elsa/highlights.scm (renamed from queries/elsa/highlights.scm)0
-rw-r--r--runtime/queries/elsa/indents.scm (renamed from queries/elsa/indents.scm)0
-rw-r--r--runtime/queries/elsa/injections.scm (renamed from queries/devicetree/injections.scm)0
-rw-r--r--runtime/queries/elsa/locals.scm (renamed from queries/elsa/locals.scm)0
-rw-r--r--runtime/queries/elvish/highlights.scm (renamed from queries/elvish/highlights.scm)0
-rw-r--r--runtime/queries/elvish/injections.scm (renamed from queries/diff/injections.scm)0
-rw-r--r--runtime/queries/embedded_template/highlights.scm (renamed from queries/embedded_template/highlights.scm)0
-rw-r--r--runtime/queries/embedded_template/injections.scm (renamed from queries/embedded_template/injections.scm)0
-rw-r--r--runtime/queries/enforce/folds.scm (renamed from queries/enforce/folds.scm)0
-rw-r--r--runtime/queries/enforce/highlights.scm (renamed from queries/enforce/highlights.scm)0
-rw-r--r--runtime/queries/enforce/indents.scm (renamed from queries/enforce/indents.scm)0
-rw-r--r--runtime/queries/enforce/injections.scm (renamed from queries/enforce/injections.scm)0
-rw-r--r--runtime/queries/enforce/locals.scm (renamed from queries/enforce/locals.scm)0
-rw-r--r--runtime/queries/erlang/folds.scm (renamed from queries/erlang/folds.scm)0
-rw-r--r--runtime/queries/erlang/highlights.scm (renamed from queries/erlang/highlights.scm)0
-rw-r--r--runtime/queries/erlang/injections.scm (renamed from queries/ebnf/injections.scm)0
-rw-r--r--runtime/queries/facility/folds.scm (renamed from queries/facility/folds.scm)0
-rw-r--r--runtime/queries/facility/highlights.scm (renamed from queries/facility/highlights.scm)0
-rw-r--r--runtime/queries/facility/indents.scm (renamed from queries/facility/indents.scm)0
-rw-r--r--runtime/queries/facility/injections.scm (renamed from queries/facility/injections.scm)0
-rw-r--r--runtime/queries/faust/highlights.scm (renamed from queries/faust/highlights.scm)0
-rw-r--r--runtime/queries/faust/injections.scm (renamed from queries/editorconfig/injections.scm)0
-rw-r--r--runtime/queries/fennel/folds.scm (renamed from queries/fennel/folds.scm)0
-rw-r--r--runtime/queries/fennel/highlights.scm (renamed from queries/fennel/highlights.scm)0
-rw-r--r--runtime/queries/fennel/injections.scm (renamed from queries/fennel/injections.scm)0
-rw-r--r--runtime/queries/fennel/locals.scm (renamed from queries/fennel/locals.scm)0
-rw-r--r--runtime/queries/fidl/folds.scm (renamed from queries/fidl/folds.scm)0
-rw-r--r--runtime/queries/fidl/highlights.scm (renamed from queries/fidl/highlights.scm)0
-rw-r--r--runtime/queries/fidl/injections.scm (renamed from queries/elsa/injections.scm)0
-rw-r--r--runtime/queries/firrtl/folds.scm (renamed from queries/firrtl/folds.scm)0
-rw-r--r--runtime/queries/firrtl/highlights.scm (renamed from queries/firrtl/highlights.scm)0
-rw-r--r--runtime/queries/firrtl/indents.scm (renamed from queries/firrtl/indents.scm)0
-rw-r--r--runtime/queries/firrtl/injections.scm (renamed from queries/elvish/injections.scm)0
-rw-r--r--runtime/queries/firrtl/locals.scm (renamed from queries/firrtl/locals.scm)0
-rw-r--r--runtime/queries/fish/folds.scm (renamed from queries/fish/folds.scm)0
-rw-r--r--runtime/queries/fish/highlights.scm (renamed from queries/fish/highlights.scm)0
-rw-r--r--runtime/queries/fish/indents.scm (renamed from queries/fish/indents.scm)0
-rw-r--r--runtime/queries/fish/injections.scm (renamed from queries/erlang/injections.scm)0
-rw-r--r--runtime/queries/fish/locals.scm (renamed from queries/fish/locals.scm)0
-rw-r--r--runtime/queries/foam/folds.scm (renamed from queries/foam/folds.scm)0
-rw-r--r--runtime/queries/foam/highlights.scm (renamed from queries/foam/highlights.scm)0
-rw-r--r--runtime/queries/foam/indents.scm (renamed from queries/foam/indents.scm)0
-rw-r--r--runtime/queries/foam/injections.scm (renamed from queries/foam/injections.scm)0
-rw-r--r--runtime/queries/foam/locals.scm (renamed from queries/foam/locals.scm)0
-rw-r--r--runtime/queries/forth/folds.scm (renamed from queries/forth/folds.scm)0
-rw-r--r--runtime/queries/forth/highlights.scm (renamed from queries/forth/highlights.scm)0
-rw-r--r--runtime/queries/forth/indents.scm (renamed from queries/forth/indents.scm)0
-rw-r--r--runtime/queries/forth/injections.scm (renamed from queries/faust/injections.scm)0
-rw-r--r--runtime/queries/forth/locals.scm (renamed from queries/forth/locals.scm)0
-rw-r--r--runtime/queries/fortran/folds.scm (renamed from queries/fortran/folds.scm)0
-rw-r--r--runtime/queries/fortran/highlights.scm (renamed from queries/fortran/highlights.scm)0
-rw-r--r--runtime/queries/fortran/indents.scm (renamed from queries/fortran/indents.scm)0
-rw-r--r--runtime/queries/fortran/injections.scm (renamed from queries/fidl/injections.scm)0
-rw-r--r--runtime/queries/fsh/highlights.scm (renamed from queries/fsh/highlights.scm)0
-rw-r--r--runtime/queries/fsh/injections.scm (renamed from queries/fsh/injections.scm)0
-rw-r--r--runtime/queries/fsharp/highlights.scm (renamed from queries/fsharp/highlights.scm)0
-rw-r--r--runtime/queries/fsharp/injections.scm (renamed from queries/fsharp/injections.scm)0
-rw-r--r--runtime/queries/func/highlights.scm (renamed from queries/func/highlights.scm)0
-rw-r--r--runtime/queries/func/injections.scm (renamed from queries/firrtl/injections.scm)0
-rw-r--r--runtime/queries/fusion/folds.scm (renamed from queries/fusion/folds.scm)0
-rw-r--r--runtime/queries/fusion/highlights.scm (renamed from queries/fusion/highlights.scm)0
-rw-r--r--runtime/queries/fusion/indents.scm (renamed from queries/fusion/indents.scm)0
-rw-r--r--runtime/queries/fusion/injections.scm (renamed from queries/fusion/injections.scm)0
-rw-r--r--runtime/queries/fusion/locals.scm (renamed from queries/fusion/locals.scm)0
-rw-r--r--runtime/queries/gap/folds.scm (renamed from queries/gap/folds.scm)0
-rw-r--r--runtime/queries/gap/highlights.scm (renamed from queries/gap/highlights.scm)0
-rw-r--r--runtime/queries/gap/injections.scm (renamed from queries/fish/injections.scm)0
-rw-r--r--runtime/queries/gap/locals.scm (renamed from queries/gap/locals.scm)0
-rw-r--r--runtime/queries/gaptst/folds.scm (renamed from queries/gaptst/folds.scm)0
-rw-r--r--runtime/queries/gaptst/highlights.scm (renamed from queries/gaptst/highlights.scm)0
-rw-r--r--runtime/queries/gaptst/injections.scm (renamed from queries/gaptst/injections.scm)0
-rw-r--r--runtime/queries/gdscript/folds.scm (renamed from queries/gdscript/folds.scm)0
-rw-r--r--runtime/queries/gdscript/highlights.scm (renamed from queries/gdscript/highlights.scm)0
-rw-r--r--runtime/queries/gdscript/indents.scm (renamed from queries/gdscript/indents.scm)0
-rw-r--r--runtime/queries/gdscript/injections.scm (renamed from queries/forth/injections.scm)0
-rw-r--r--runtime/queries/gdscript/locals.scm (renamed from queries/gdscript/locals.scm)0
-rw-r--r--runtime/queries/gdshader/highlights.scm (renamed from queries/gdshader/highlights.scm)0
-rw-r--r--runtime/queries/gdshader/injections.scm (renamed from queries/fortran/injections.scm)0
-rw-r--r--runtime/queries/git_config/folds.scm (renamed from queries/git_config/folds.scm)0
-rw-r--r--runtime/queries/git_config/highlights.scm (renamed from queries/git_config/highlights.scm)0
-rw-r--r--runtime/queries/git_config/injections.scm (renamed from queries/git_config/injections.scm)0
-rw-r--r--runtime/queries/git_rebase/highlights.scm (renamed from queries/git_rebase/highlights.scm)0
-rw-r--r--runtime/queries/git_rebase/injections.scm (renamed from queries/git_rebase/injections.scm)0
-rw-r--r--runtime/queries/gitattributes/highlights.scm (renamed from queries/gitattributes/highlights.scm)0
-rw-r--r--runtime/queries/gitattributes/injections.scm (renamed from queries/func/injections.scm)0
-rw-r--r--runtime/queries/gitattributes/locals.scm (renamed from queries/gitattributes/locals.scm)0
-rw-r--r--runtime/queries/gitcommit/highlights.scm (renamed from queries/gitcommit/highlights.scm)0
-rw-r--r--runtime/queries/gitcommit/injections.scm (renamed from queries/gitcommit/injections.scm)0
-rw-r--r--runtime/queries/gitignore/highlights.scm (renamed from queries/gitignore/highlights.scm)0
-rw-r--r--runtime/queries/gitignore/injections.scm (renamed from queries/gap/injections.scm)0
-rw-r--r--runtime/queries/gleam/folds.scm (renamed from queries/gleam/folds.scm)0
-rw-r--r--runtime/queries/gleam/highlights.scm (renamed from queries/gleam/highlights.scm)0
-rw-r--r--runtime/queries/gleam/indents.scm (renamed from queries/gleam/indents.scm)0
-rw-r--r--runtime/queries/gleam/injections.scm (renamed from queries/gleam/injections.scm)0
-rw-r--r--runtime/queries/gleam/locals.scm (renamed from queries/gleam/locals.scm)0
-rw-r--r--runtime/queries/glimmer/folds.scm (renamed from queries/glimmer/folds.scm)0
-rw-r--r--runtime/queries/glimmer/highlights.scm (renamed from queries/glimmer/highlights.scm)0
-rw-r--r--runtime/queries/glimmer/indents.scm (renamed from queries/glimmer/indents.scm)0
-rw-r--r--runtime/queries/glimmer/injections.scm (renamed from queries/glimmer/injections.scm)0
-rw-r--r--runtime/queries/glimmer/locals.scm (renamed from queries/glimmer/locals.scm)0
-rw-r--r--runtime/queries/glimmer_javascript/highlights.scm (renamed from queries/glimmer_javascript/highlights.scm)0
-rw-r--r--runtime/queries/glimmer_javascript/indents.scm (renamed from queries/glimmer_javascript/indents.scm)0
-rw-r--r--runtime/queries/glimmer_javascript/injections.scm (renamed from queries/glimmer_javascript/injections.scm)0
-rw-r--r--runtime/queries/glimmer_javascript/locals.scm (renamed from queries/glimmer_javascript/locals.scm)0
-rw-r--r--runtime/queries/glimmer_typescript/highlights.scm (renamed from queries/glimmer_typescript/highlights.scm)0
-rw-r--r--runtime/queries/glimmer_typescript/indents.scm (renamed from queries/glimmer_typescript/indents.scm)0
-rw-r--r--runtime/queries/glimmer_typescript/injections.scm (renamed from queries/glimmer_typescript/injections.scm)0
-rw-r--r--runtime/queries/glsl/folds.scm (renamed from queries/glsl/folds.scm)0
-rw-r--r--runtime/queries/glsl/highlights.scm (renamed from queries/glsl/highlights.scm)0
-rw-r--r--runtime/queries/glsl/indents.scm (renamed from queries/glsl/indents.scm)0
-rw-r--r--runtime/queries/glsl/injections.scm (renamed from queries/glsl/injections.scm)0
-rw-r--r--runtime/queries/glsl/locals.scm (renamed from queries/glsl/locals.scm)0
-rw-r--r--runtime/queries/gn/folds.scm (renamed from queries/gn/folds.scm)0
-rw-r--r--runtime/queries/gn/highlights.scm (renamed from queries/gn/highlights.scm)0
-rw-r--r--runtime/queries/gn/indents.scm (renamed from queries/gn/indents.scm)0
-rw-r--r--runtime/queries/gn/injections.scm (renamed from queries/gdscript/injections.scm)0
-rw-r--r--runtime/queries/gn/locals.scm (renamed from queries/gn/locals.scm)0
-rw-r--r--runtime/queries/gnuplot/highlights.scm (renamed from queries/gnuplot/highlights.scm)0
-rw-r--r--runtime/queries/gnuplot/injections.scm (renamed from queries/gdshader/injections.scm)0
-rw-r--r--runtime/queries/go/folds.scm (renamed from queries/go/folds.scm)0
-rw-r--r--runtime/queries/go/highlights.scm (renamed from queries/go/highlights.scm)0
-rw-r--r--runtime/queries/go/indents.scm (renamed from queries/go/indents.scm)0
-rw-r--r--runtime/queries/go/injections.scm (renamed from queries/go/injections.scm)0
-rw-r--r--runtime/queries/go/locals.scm (renamed from queries/go/locals.scm)0
-rw-r--r--runtime/queries/goctl/folds.scm (renamed from queries/goctl/folds.scm)0
-rw-r--r--runtime/queries/goctl/highlights.scm (renamed from queries/goctl/highlights.scm)0
-rw-r--r--runtime/queries/goctl/indents.scm (renamed from queries/goctl/indents.scm)0
-rw-r--r--runtime/queries/goctl/injections.scm (renamed from queries/goctl/injections.scm)0
-rw-r--r--runtime/queries/godot_resource/folds.scm (renamed from queries/godot_resource/folds.scm)0
-rw-r--r--runtime/queries/godot_resource/highlights.scm (renamed from queries/godot_resource/highlights.scm)0
-rw-r--r--runtime/queries/godot_resource/injections.scm (renamed from queries/gitattributes/injections.scm)0
-rw-r--r--runtime/queries/godot_resource/locals.scm (renamed from queries/godot_resource/locals.scm)0
-rw-r--r--runtime/queries/gomod/highlights.scm (renamed from queries/gomod/highlights.scm)0
-rw-r--r--runtime/queries/gomod/injections.scm (renamed from queries/gitignore/injections.scm)0
-rw-r--r--runtime/queries/gosum/highlights.scm (renamed from queries/gosum/highlights.scm)0
-rw-r--r--runtime/queries/gotmpl/folds.scm (renamed from queries/gotmpl/folds.scm)0
-rw-r--r--runtime/queries/gotmpl/highlights.scm (renamed from queries/gotmpl/highlights.scm)0
-rw-r--r--runtime/queries/gotmpl/injections.scm (renamed from queries/gotmpl/injections.scm)0
-rw-r--r--runtime/queries/gotmpl/locals.scm (renamed from queries/gotmpl/locals.scm)0
-rw-r--r--runtime/queries/gowork/highlights.scm (renamed from queries/gowork/highlights.scm)0
-rw-r--r--runtime/queries/gowork/injections.scm (renamed from queries/gn/injections.scm)0
-rw-r--r--runtime/queries/gpg/highlights.scm (renamed from queries/gpg/highlights.scm)0
-rw-r--r--runtime/queries/gpg/injections.scm (renamed from queries/gnuplot/injections.scm)0
-rw-r--r--runtime/queries/graphql/highlights.scm (renamed from queries/graphql/highlights.scm)0
-rw-r--r--runtime/queries/graphql/indents.scm (renamed from queries/graphql/indents.scm)0
-rw-r--r--runtime/queries/graphql/injections.scm (renamed from queries/godot_resource/injections.scm)0
-rw-r--r--runtime/queries/gren/highlights.scm (renamed from queries/gren/highlights.scm)0
-rw-r--r--runtime/queries/gren/injections.scm (renamed from queries/gren/injections.scm)0
-rw-r--r--runtime/queries/groovy/folds.scm (renamed from queries/groovy/folds.scm)0
-rw-r--r--runtime/queries/groovy/highlights.scm (renamed from queries/groovy/highlights.scm)0
-rw-r--r--runtime/queries/groovy/indents.scm (renamed from queries/groovy/indents.scm)0
-rw-r--r--runtime/queries/groovy/injections.scm (renamed from queries/groovy/injections.scm)0
-rw-r--r--runtime/queries/groovy/locals.scm (renamed from queries/groovy/locals.scm)0
-rw-r--r--runtime/queries/gstlaunch/highlights.scm (renamed from queries/gstlaunch/highlights.scm)0
-rw-r--r--runtime/queries/hack/highlights.scm (renamed from queries/hack/highlights.scm)0
-rw-r--r--runtime/queries/hack/injections.scm (renamed from queries/hack/injections.scm)0
-rw-r--r--runtime/queries/hare/folds.scm (renamed from queries/hare/folds.scm)0
-rw-r--r--runtime/queries/hare/highlights.scm (renamed from queries/hare/highlights.scm)0
-rw-r--r--runtime/queries/hare/indents.scm (renamed from queries/hare/indents.scm)0
-rw-r--r--runtime/queries/hare/injections.scm (renamed from queries/hare/injections.scm)0
-rw-r--r--runtime/queries/hare/locals.scm (renamed from queries/hare/locals.scm)0
-rw-r--r--runtime/queries/haskell/folds.scm (renamed from queries/haskell/folds.scm)0
-rw-r--r--runtime/queries/haskell/highlights.scm (renamed from queries/haskell/highlights.scm)0
-rw-r--r--runtime/queries/haskell/injections.scm (renamed from queries/haskell/injections.scm)0
-rw-r--r--runtime/queries/haskell/locals.scm (renamed from queries/haskell/locals.scm)0
-rw-r--r--runtime/queries/haskell_persistent/folds.scm (renamed from queries/haskell_persistent/folds.scm)0
-rw-r--r--runtime/queries/haskell_persistent/highlights.scm (renamed from queries/haskell_persistent/highlights.scm)0
-rw-r--r--runtime/queries/hcl/folds.scm (renamed from queries/hcl/folds.scm)0
-rw-r--r--runtime/queries/hcl/highlights.scm (renamed from queries/hcl/highlights.scm)0
-rw-r--r--runtime/queries/hcl/indents.scm (renamed from queries/hcl/indents.scm)0
-rw-r--r--runtime/queries/hcl/injections.scm (renamed from queries/hcl/injections.scm)0
-rw-r--r--runtime/queries/heex/folds.scm (renamed from queries/heex/folds.scm)0
-rw-r--r--runtime/queries/heex/highlights.scm (renamed from queries/heex/highlights.scm)0
-rw-r--r--runtime/queries/heex/indents.scm (renamed from queries/heex/indents.scm)0
-rw-r--r--runtime/queries/heex/injections.scm (renamed from queries/heex/injections.scm)0
-rw-r--r--runtime/queries/heex/locals.scm (renamed from queries/heex/locals.scm)0
-rw-r--r--runtime/queries/helm/folds.scm (renamed from queries/helm/folds.scm)0
-rw-r--r--runtime/queries/helm/highlights.scm (renamed from queries/helm/highlights.scm)0
-rw-r--r--runtime/queries/helm/injections.scm (renamed from queries/helm/injections.scm)0
-rw-r--r--runtime/queries/helm/locals.scm (renamed from queries/helm/locals.scm)0
-rw-r--r--runtime/queries/hjson/folds.scm (renamed from queries/hjson/folds.scm)0
-rw-r--r--runtime/queries/hjson/highlights.scm (renamed from queries/hjson/highlights.scm)0
-rw-r--r--runtime/queries/hjson/indents.scm (renamed from queries/hjson/indents.scm)0
-rw-r--r--runtime/queries/hjson/injections.scm (renamed from queries/gomod/injections.scm)0
-rw-r--r--runtime/queries/hjson/locals.scm (renamed from queries/hjson/locals.scm)0
-rw-r--r--runtime/queries/hlsl/folds.scm (renamed from queries/hlsl/folds.scm)0
-rw-r--r--runtime/queries/hlsl/highlights.scm (renamed from queries/hlsl/highlights.scm)0
-rw-r--r--runtime/queries/hlsl/indents.scm (renamed from queries/hlsl/indents.scm)0
-rw-r--r--runtime/queries/hlsl/injections.scm (renamed from queries/hlsl/injections.scm)0
-rw-r--r--runtime/queries/hlsl/locals.scm (renamed from queries/hlsl/locals.scm)0
-rw-r--r--runtime/queries/hlsplaylist/highlights.scm (renamed from queries/hlsplaylist/highlights.scm)0
-rw-r--r--runtime/queries/hlsplaylist/injections.scm (renamed from queries/gowork/injections.scm)0
-rw-r--r--runtime/queries/hocon/folds.scm (renamed from queries/hocon/folds.scm)0
-rw-r--r--runtime/queries/hocon/highlights.scm (renamed from queries/hocon/highlights.scm)0
-rw-r--r--runtime/queries/hocon/injections.scm (renamed from queries/gpg/injections.scm)0
-rw-r--r--runtime/queries/hoon/folds.scm (renamed from queries/hoon/folds.scm)0
-rw-r--r--runtime/queries/hoon/highlights.scm (renamed from queries/hoon/highlights.scm)0
-rw-r--r--runtime/queries/hoon/injections.scm (renamed from queries/hoon/injections.scm)0
-rw-r--r--runtime/queries/hoon/locals.scm (renamed from queries/hoon/locals.scm)0
-rw-r--r--runtime/queries/html/folds.scm (renamed from queries/html/folds.scm)0
-rw-r--r--runtime/queries/html/highlights.scm (renamed from queries/html/highlights.scm)0
-rw-r--r--runtime/queries/html/indents.scm (renamed from queries/html/indents.scm)0
-rw-r--r--runtime/queries/html/injections.scm (renamed from queries/html/injections.scm)0
-rw-r--r--runtime/queries/html/locals.scm (renamed from queries/html/locals.scm)0
-rw-r--r--runtime/queries/html_tags/highlights.scm (renamed from queries/html_tags/highlights.scm)0
-rw-r--r--runtime/queries/html_tags/indents.scm (renamed from queries/html_tags/indents.scm)0
-rw-r--r--runtime/queries/html_tags/injections.scm (renamed from queries/html_tags/injections.scm)0
-rw-r--r--runtime/queries/htmldjango/folds.scm (renamed from queries/htmldjango/folds.scm)0
-rw-r--r--runtime/queries/htmldjango/highlights.scm (renamed from queries/htmldjango/highlights.scm)0
-rw-r--r--runtime/queries/htmldjango/indents.scm (renamed from queries/htmldjango/indents.scm)0
-rw-r--r--runtime/queries/htmldjango/injections.scm (renamed from queries/htmldjango/injections.scm)0
-rw-r--r--runtime/queries/http/folds.scm (renamed from queries/http/folds.scm)0
-rw-r--r--runtime/queries/http/highlights.scm (renamed from queries/http/highlights.scm)0
-rw-r--r--runtime/queries/http/injections.scm (renamed from queries/http/injections.scm)0
-rw-r--r--runtime/queries/hurl/folds.scm (renamed from queries/hurl/folds.scm)0
-rw-r--r--runtime/queries/hurl/highlights.scm (renamed from queries/hurl/highlights.scm)0
-rw-r--r--runtime/queries/hurl/indents.scm (renamed from queries/hurl/indents.scm)0
-rw-r--r--runtime/queries/hurl/injections.scm (renamed from queries/hurl/injections.scm)0
-rw-r--r--runtime/queries/hyprlang/folds.scm (renamed from queries/hyprlang/folds.scm)0
-rw-r--r--runtime/queries/hyprlang/highlights.scm (renamed from queries/hyprlang/highlights.scm)0
-rw-r--r--runtime/queries/hyprlang/indents.scm (renamed from queries/hyprlang/indents.scm)0
-rw-r--r--runtime/queries/hyprlang/injections.scm (renamed from queries/hyprlang/injections.scm)0
-rw-r--r--runtime/queries/idl/highlights.scm (renamed from queries/idl/highlights.scm)0
-rw-r--r--runtime/queries/idl/indents.scm (renamed from queries/idl/indents.scm)0
-rw-r--r--runtime/queries/idl/injections.scm (renamed from queries/idl/injections.scm)0
-rw-r--r--runtime/queries/idris/folds.scm (renamed from queries/idris/folds.scm)0
-rw-r--r--runtime/queries/idris/highlights.scm (renamed from queries/idris/highlights.scm)0
-rw-r--r--runtime/queries/idris/injections.scm (renamed from queries/graphql/injections.scm)0
-rw-r--r--runtime/queries/idris/locals.scm (renamed from queries/idris/locals.scm)0
-rw-r--r--runtime/queries/ini/folds.scm (renamed from queries/ini/folds.scm)0
-rw-r--r--runtime/queries/ini/highlights.scm (renamed from queries/ini/highlights.scm)0
-rw-r--r--runtime/queries/ini/injections.scm (renamed from queries/ini/injections.scm)0
-rw-r--r--runtime/queries/inko/folds.scm (renamed from queries/inko/folds.scm)0
-rw-r--r--runtime/queries/inko/highlights.scm (renamed from queries/inko/highlights.scm)0
-rw-r--r--runtime/queries/inko/indents.scm (renamed from queries/inko/indents.scm)0
-rw-r--r--runtime/queries/inko/injections.scm (renamed from queries/inko/injections.scm)0
-rw-r--r--runtime/queries/inko/locals.scm (renamed from queries/inko/locals.scm)0
-rw-r--r--runtime/queries/ipkg/folds.scm (renamed from queries/ipkg/folds.scm)0
-rw-r--r--runtime/queries/ipkg/highlights.scm (renamed from queries/ipkg/highlights.scm)0
-rw-r--r--runtime/queries/ipkg/indents.scm (renamed from queries/ipkg/indents.scm)0
-rw-r--r--runtime/queries/ipkg/injections.scm (renamed from queries/ipkg/injections.scm)0
-rw-r--r--runtime/queries/ipkg/locals.scm (renamed from queries/ipkg/locals.scm)0
-rw-r--r--runtime/queries/ispc/folds.scm (renamed from queries/ispc/folds.scm)0
-rw-r--r--runtime/queries/ispc/highlights.scm (renamed from queries/ispc/highlights.scm)0
-rw-r--r--runtime/queries/ispc/indents.scm (renamed from queries/ispc/indents.scm)0
-rw-r--r--runtime/queries/ispc/injections.scm (renamed from queries/ispc/injections.scm)0
-rw-r--r--runtime/queries/ispc/locals.scm (renamed from queries/ispc/locals.scm)0
-rw-r--r--runtime/queries/janet_simple/folds.scm (renamed from queries/janet_simple/folds.scm)0
-rw-r--r--runtime/queries/janet_simple/highlights.scm (renamed from queries/janet_simple/highlights.scm)0
-rw-r--r--runtime/queries/janet_simple/injections.scm (renamed from queries/hjson/injections.scm)0
-rw-r--r--runtime/queries/janet_simple/locals.scm (renamed from queries/janet_simple/locals.scm)0
-rw-r--r--runtime/queries/java/folds.scm (renamed from queries/java/folds.scm)0
-rw-r--r--runtime/queries/java/highlights.scm (renamed from queries/java/highlights.scm)0
-rw-r--r--runtime/queries/java/indents.scm (renamed from queries/java/indents.scm)0
-rw-r--r--runtime/queries/java/injections.scm (renamed from queries/java/injections.scm)0
-rw-r--r--runtime/queries/java/locals.scm (renamed from queries/java/locals.scm)0
-rw-r--r--runtime/queries/javadoc/highlights.scm (renamed from queries/javadoc/highlights.scm)0
-rw-r--r--runtime/queries/javadoc/indents.scm (renamed from queries/javadoc/indents.scm)0
-rw-r--r--runtime/queries/javadoc/injections.scm (renamed from queries/javadoc/injections.scm)0
-rw-r--r--runtime/queries/javascript/folds.scm (renamed from queries/javascript/folds.scm)0
-rw-r--r--runtime/queries/javascript/highlights.scm (renamed from queries/javascript/highlights.scm)0
-rw-r--r--runtime/queries/javascript/indents.scm (renamed from queries/javascript/indents.scm)0
-rw-r--r--runtime/queries/javascript/injections.scm (renamed from queries/javascript/injections.scm)0
-rw-r--r--runtime/queries/javascript/locals.scm (renamed from queries/javascript/locals.scm)0
-rw-r--r--runtime/queries/jinja/highlights.scm (renamed from queries/jinja/highlights.scm)0
-rw-r--r--runtime/queries/jinja/injections.scm (renamed from queries/jinja/injections.scm)0
-rw-r--r--runtime/queries/jinja_inline/highlights.scm (renamed from queries/jinja_inline/highlights.scm)0
-rw-r--r--runtime/queries/jinja_inline/injections.scm (renamed from queries/hlsplaylist/injections.scm)0
-rw-r--r--runtime/queries/jq/highlights.scm (renamed from queries/jq/highlights.scm)0
-rw-r--r--runtime/queries/jq/injections.scm (renamed from queries/jq/injections.scm)0
-rw-r--r--runtime/queries/jq/locals.scm (renamed from queries/jq/locals.scm)0
-rw-r--r--runtime/queries/jsdoc/highlights.scm (renamed from queries/jsdoc/highlights.scm)0
-rw-r--r--runtime/queries/json/folds.scm (renamed from queries/json/folds.scm)0
-rw-r--r--runtime/queries/json/highlights.scm (renamed from queries/json/highlights.scm)0
-rw-r--r--runtime/queries/json/indents.scm (renamed from queries/json/indents.scm)0
-rw-r--r--runtime/queries/json/locals.scm (renamed from queries/json/locals.scm)0
-rw-r--r--runtime/queries/json5/highlights.scm (renamed from queries/json5/highlights.scm)0
-rw-r--r--runtime/queries/json5/injections.scm (renamed from queries/hocon/injections.scm)0
-rw-r--r--runtime/queries/jsonc/folds.scm (renamed from queries/jsonc/folds.scm)0
-rw-r--r--runtime/queries/jsonc/highlights.scm (renamed from queries/jsonc/highlights.scm)0
-rw-r--r--runtime/queries/jsonc/indents.scm (renamed from queries/jsonc/indents.scm)0
-rw-r--r--runtime/queries/jsonc/injections.scm (renamed from queries/idris/injections.scm)0
-rw-r--r--runtime/queries/jsonc/locals.scm (renamed from queries/jsonc/locals.scm)0
-rw-r--r--runtime/queries/jsonnet/folds.scm (renamed from queries/jsonnet/folds.scm)0
-rw-r--r--runtime/queries/jsonnet/highlights.scm (renamed from queries/jsonnet/highlights.scm)0
-rw-r--r--runtime/queries/jsonnet/injections.scm (renamed from queries/janet_simple/injections.scm)0
-rw-r--r--runtime/queries/jsonnet/locals.scm (renamed from queries/jsonnet/locals.scm)0
-rw-r--r--runtime/queries/jsx/folds.scm (renamed from queries/jsx/folds.scm)0
-rw-r--r--runtime/queries/jsx/highlights.scm (renamed from queries/jsx/highlights.scm)0
-rw-r--r--runtime/queries/jsx/indents.scm (renamed from queries/jsx/indents.scm)0
-rw-r--r--runtime/queries/jsx/injections.scm (renamed from queries/jsx/injections.scm)0
-rw-r--r--runtime/queries/julia/folds.scm (renamed from queries/julia/folds.scm)0
-rw-r--r--runtime/queries/julia/highlights.scm (renamed from queries/julia/highlights.scm)0
-rw-r--r--runtime/queries/julia/indents.scm (renamed from queries/julia/indents.scm)0
-rw-r--r--runtime/queries/julia/injections.scm (renamed from queries/julia/injections.scm)0
-rw-r--r--runtime/queries/julia/locals.scm (renamed from queries/julia/locals.scm)0
-rw-r--r--runtime/queries/just/folds.scm (renamed from queries/just/folds.scm)0
-rw-r--r--runtime/queries/just/highlights.scm (renamed from queries/just/highlights.scm)0
-rw-r--r--runtime/queries/just/indents.scm (renamed from queries/just/indents.scm)0
-rw-r--r--runtime/queries/just/injections.scm (renamed from queries/just/injections.scm)0
-rw-r--r--runtime/queries/just/locals.scm (renamed from queries/just/locals.scm)0
-rw-r--r--runtime/queries/kcl/folds.scm (renamed from queries/kcl/folds.scm)0
-rw-r--r--runtime/queries/kcl/highlights.scm (renamed from queries/kcl/highlights.scm)0
-rw-r--r--runtime/queries/kcl/injections.scm (renamed from queries/kcl/injections.scm)0
-rw-r--r--runtime/queries/kconfig/folds.scm (renamed from queries/kconfig/folds.scm)0
-rw-r--r--runtime/queries/kconfig/highlights.scm (renamed from queries/kconfig/highlights.scm)0
-rw-r--r--runtime/queries/kconfig/indents.scm (renamed from queries/kconfig/indents.scm)0
-rw-r--r--runtime/queries/kconfig/injections.scm (renamed from queries/jinja_inline/injections.scm)0
-rw-r--r--runtime/queries/kconfig/locals.scm (renamed from queries/kconfig/locals.scm)0
-rw-r--r--runtime/queries/kdl/folds.scm (renamed from queries/kdl/folds.scm)0
-rw-r--r--runtime/queries/kdl/highlights.scm (renamed from queries/kdl/highlights.scm)0
-rw-r--r--runtime/queries/kdl/indents.scm (renamed from queries/kdl/indents.scm)0
-rw-r--r--runtime/queries/kdl/injections.scm (renamed from queries/kdl/injections.scm)0
-rw-r--r--runtime/queries/kdl/locals.scm (renamed from queries/kdl/locals.scm)0
-rw-r--r--runtime/queries/kotlin/folds.scm (renamed from queries/kotlin/folds.scm)0
-rw-r--r--runtime/queries/kotlin/highlights.scm (renamed from queries/kotlin/highlights.scm)0
-rw-r--r--runtime/queries/kotlin/injections.scm (renamed from queries/kotlin/injections.scm)0
-rw-r--r--runtime/queries/kotlin/locals.scm (renamed from queries/kotlin/locals.scm)0
-rw-r--r--runtime/queries/koto/folds.scm (renamed from queries/koto/folds.scm)0
-rw-r--r--runtime/queries/koto/highlights.scm (renamed from queries/koto/highlights.scm)0
-rw-r--r--runtime/queries/koto/injections.scm (renamed from queries/json5/injections.scm)0
-rw-r--r--runtime/queries/koto/locals.scm (renamed from queries/koto/locals.scm)0
-rw-r--r--runtime/queries/kusto/highlights.scm (renamed from queries/kusto/highlights.scm)0
-rw-r--r--runtime/queries/kusto/injections.scm (renamed from queries/jsonc/injections.scm)0
-rw-r--r--runtime/queries/lalrpop/folds.scm (renamed from queries/lalrpop/folds.scm)0
-rw-r--r--runtime/queries/lalrpop/highlights.scm (renamed from queries/lalrpop/highlights.scm)0
-rw-r--r--runtime/queries/lalrpop/injections.scm (renamed from queries/lalrpop/injections.scm)0
-rw-r--r--runtime/queries/lalrpop/locals.scm (renamed from queries/lalrpop/locals.scm)0
-rw-r--r--runtime/queries/latex/folds.scm (renamed from queries/latex/folds.scm)0
-rw-r--r--runtime/queries/latex/highlights.scm (renamed from queries/latex/highlights.scm)0
-rw-r--r--runtime/queries/latex/injections.scm (renamed from queries/latex/injections.scm)0
-rw-r--r--runtime/queries/ledger/folds.scm (renamed from queries/ledger/folds.scm)0
-rw-r--r--runtime/queries/ledger/highlights.scm (renamed from queries/ledger/highlights.scm)0
-rw-r--r--runtime/queries/ledger/indents.scm (renamed from queries/ledger/indents.scm)0
-rw-r--r--runtime/queries/ledger/injections.scm (renamed from queries/ledger/injections.scm)0
-rw-r--r--runtime/queries/leo/highlights.scm (renamed from queries/leo/highlights.scm)0
-rw-r--r--runtime/queries/leo/indents.scm (renamed from queries/leo/indents.scm)0
-rw-r--r--runtime/queries/leo/injections.scm (renamed from queries/jsonnet/injections.scm)0
-rw-r--r--runtime/queries/linkerscript/folds.scm (renamed from queries/linkerscript/folds.scm)0
-rw-r--r--runtime/queries/linkerscript/highlights.scm (renamed from queries/linkerscript/highlights.scm)0
-rw-r--r--runtime/queries/linkerscript/indents.scm (renamed from queries/linkerscript/indents.scm)0
-rw-r--r--runtime/queries/linkerscript/injections.scm (renamed from queries/linkerscript/injections.scm)0
-rw-r--r--runtime/queries/linkerscript/locals.scm (renamed from queries/linkerscript/locals.scm)0
-rw-r--r--runtime/queries/liquid/highlights.scm (renamed from queries/liquid/highlights.scm)0
-rw-r--r--runtime/queries/liquid/injections.scm (renamed from queries/liquid/injections.scm)0
-rw-r--r--runtime/queries/liquidsoap/folds.scm (renamed from queries/liquidsoap/folds.scm)0
-rw-r--r--runtime/queries/liquidsoap/highlights.scm (renamed from queries/liquidsoap/highlights.scm)0
-rw-r--r--runtime/queries/liquidsoap/indents.scm (renamed from queries/liquidsoap/indents.scm)0
-rw-r--r--runtime/queries/liquidsoap/injections.scm (renamed from queries/kconfig/injections.scm)0
-rw-r--r--runtime/queries/liquidsoap/locals.scm (renamed from queries/liquidsoap/locals.scm)0
-rw-r--r--runtime/queries/llvm/highlights.scm (renamed from queries/llvm/highlights.scm)0
-rw-r--r--runtime/queries/llvm/injections.scm (renamed from queries/koto/injections.scm)0
-rw-r--r--runtime/queries/lua/folds.scm (renamed from queries/lua/folds.scm)0
-rw-r--r--runtime/queries/lua/highlights.scm (renamed from queries/lua/highlights.scm)0
-rw-r--r--runtime/queries/lua/indents.scm (renamed from queries/lua/indents.scm)0
-rw-r--r--runtime/queries/lua/injections.scm (renamed from queries/lua/injections.scm)0
-rw-r--r--runtime/queries/lua/locals.scm (renamed from queries/lua/locals.scm)0
-rw-r--r--runtime/queries/luadoc/highlights.scm (renamed from queries/luadoc/highlights.scm)0
-rw-r--r--runtime/queries/luap/highlights.scm (renamed from queries/luap/highlights.scm)0
-rw-r--r--runtime/queries/luau/folds.scm (renamed from queries/luau/folds.scm)0
-rw-r--r--runtime/queries/luau/highlights.scm (renamed from queries/luau/highlights.scm)0
-rw-r--r--runtime/queries/luau/indents.scm (renamed from queries/luau/indents.scm)0
-rw-r--r--runtime/queries/luau/injections.scm (renamed from queries/luau/injections.scm)0
-rw-r--r--runtime/queries/luau/locals.scm (renamed from queries/luau/locals.scm)0
-rw-r--r--runtime/queries/m68k/folds.scm (renamed from queries/m68k/folds.scm)0
-rw-r--r--runtime/queries/m68k/highlights.scm (renamed from queries/m68k/highlights.scm)0
-rw-r--r--runtime/queries/m68k/injections.scm (renamed from queries/kusto/injections.scm)0
-rw-r--r--runtime/queries/m68k/locals.scm (renamed from queries/m68k/locals.scm)0
-rw-r--r--runtime/queries/make/folds.scm (renamed from queries/make/folds.scm)0
-rw-r--r--runtime/queries/make/highlights.scm (renamed from queries/make/highlights.scm)0
-rw-r--r--runtime/queries/make/injections.scm (renamed from queries/make/injections.scm)0
-rw-r--r--runtime/queries/markdown/folds.scm (renamed from queries/markdown/folds.scm)0
-rw-r--r--runtime/queries/markdown/highlights.scm (renamed from queries/markdown/highlights.scm)0
-rw-r--r--runtime/queries/markdown/indents.scm (renamed from queries/markdown/indents.scm)0
-rw-r--r--runtime/queries/markdown/injections.scm (renamed from queries/markdown/injections.scm)0
-rw-r--r--runtime/queries/markdown_inline/highlights.scm (renamed from queries/markdown_inline/highlights.scm)0
-rw-r--r--runtime/queries/markdown_inline/injections.scm (renamed from queries/markdown_inline/injections.scm)0
-rw-r--r--runtime/queries/matlab/folds.scm (renamed from queries/matlab/folds.scm)0
-rw-r--r--runtime/queries/matlab/highlights.scm (renamed from queries/matlab/highlights.scm)0
-rw-r--r--runtime/queries/matlab/indents.scm (renamed from queries/matlab/indents.scm)0
-rw-r--r--runtime/queries/matlab/injections.scm (renamed from queries/leo/injections.scm)0
-rw-r--r--runtime/queries/matlab/locals.scm (renamed from queries/matlab/locals.scm)0
-rw-r--r--runtime/queries/menhir/highlights.scm (renamed from queries/menhir/highlights.scm)0
-rw-r--r--runtime/queries/menhir/injections.scm (renamed from queries/menhir/injections.scm)0
-rw-r--r--runtime/queries/mermaid/folds.scm (renamed from queries/mermaid/folds.scm)0
-rw-r--r--runtime/queries/mermaid/highlights.scm (renamed from queries/mermaid/highlights.scm)0
-rw-r--r--runtime/queries/mermaid/indents.scm (renamed from queries/mermaid/indents.scm)0
-rw-r--r--runtime/queries/mermaid/injections.scm (renamed from queries/liquidsoap/injections.scm)0
-rw-r--r--runtime/queries/meson/folds.scm (renamed from queries/meson/folds.scm)0
-rw-r--r--runtime/queries/meson/highlights.scm (renamed from queries/meson/highlights.scm)0
-rw-r--r--runtime/queries/meson/indents.scm (renamed from queries/meson/indents.scm)0
-rw-r--r--runtime/queries/meson/injections.scm (renamed from queries/llvm/injections.scm)0
-rw-r--r--runtime/queries/mlir/highlights.scm (renamed from queries/mlir/highlights.scm)0
-rw-r--r--runtime/queries/mlir/injections.scm (renamed from queries/m68k/injections.scm)0
-rw-r--r--runtime/queries/mlir/locals.scm (renamed from queries/mlir/locals.scm)0
-rw-r--r--runtime/queries/muttrc/highlights.scm (renamed from queries/muttrc/highlights.scm)0
-rw-r--r--runtime/queries/muttrc/injections.scm (renamed from queries/muttrc/injections.scm)0
-rw-r--r--runtime/queries/nasm/highlights.scm (renamed from queries/nasm/highlights.scm)0
-rw-r--r--runtime/queries/nasm/injections.scm (renamed from queries/matlab/injections.scm)0
-rw-r--r--runtime/queries/nginx/folds.scm (renamed from queries/nginx/folds.scm)0
-rw-r--r--runtime/queries/nginx/highlights.scm (renamed from queries/nginx/highlights.scm)0
-rw-r--r--runtime/queries/nginx/injections.scm (renamed from queries/mermaid/injections.scm)0
-rw-r--r--runtime/queries/nickel/highlights.scm (renamed from queries/nickel/highlights.scm)0
-rw-r--r--runtime/queries/nickel/indents.scm (renamed from queries/nickel/indents.scm)0
-rw-r--r--runtime/queries/nickel/injections.scm (renamed from queries/meson/injections.scm)0
-rw-r--r--runtime/queries/nim/folds.scm (renamed from queries/nim/folds.scm)0
-rw-r--r--runtime/queries/nim/highlights.scm (renamed from queries/nim/highlights.scm)0
-rw-r--r--runtime/queries/nim/injections.scm (renamed from queries/nim/injections.scm)0
-rw-r--r--runtime/queries/nim/locals.scm (renamed from queries/nim/locals.scm)0
-rw-r--r--runtime/queries/nim_format_string/highlights.scm (renamed from queries/nim_format_string/highlights.scm)0
-rw-r--r--runtime/queries/nim_format_string/injections.scm (renamed from queries/nim_format_string/injections.scm)0
-rw-r--r--runtime/queries/ninja/folds.scm (renamed from queries/ninja/folds.scm)0
-rw-r--r--runtime/queries/ninja/highlights.scm (renamed from queries/ninja/highlights.scm)0
-rw-r--r--runtime/queries/ninja/indents.scm (renamed from queries/ninja/indents.scm)0
-rw-r--r--runtime/queries/ninja/injections.scm (renamed from queries/mlir/injections.scm)0
-rw-r--r--runtime/queries/nix/folds.scm (renamed from queries/nix/folds.scm)0
-rw-r--r--runtime/queries/nix/highlights.scm (renamed from queries/nix/highlights.scm)0
-rw-r--r--runtime/queries/nix/indents.scm (renamed from queries/nix/indents.scm)0
-rw-r--r--runtime/queries/nix/injections.scm (renamed from queries/nix/injections.scm)0
-rw-r--r--runtime/queries/nix/locals.scm (renamed from queries/nix/locals.scm)0
-rw-r--r--runtime/queries/nqc/folds.scm (renamed from queries/nqc/folds.scm)0
-rw-r--r--runtime/queries/nqc/highlights.scm (renamed from queries/nqc/highlights.scm)0
-rw-r--r--runtime/queries/nqc/indents.scm (renamed from queries/nqc/indents.scm)0
-rw-r--r--runtime/queries/nqc/injections.scm (renamed from queries/nqc/injections.scm)0
-rw-r--r--runtime/queries/nqc/locals.scm (renamed from queries/nqc/locals.scm)0
-rw-r--r--runtime/queries/nu/folds.scm (renamed from queries/nu/folds.scm)0
-rw-r--r--runtime/queries/nu/highlights.scm (renamed from queries/nu/highlights.scm)0
-rw-r--r--runtime/queries/nu/indents.scm (renamed from queries/nu/indents.scm)0
-rw-r--r--runtime/queries/nu/injections.scm (renamed from queries/nu/injections.scm)0
-rw-r--r--runtime/queries/objc/folds.scm (renamed from queries/objc/folds.scm)0
-rw-r--r--runtime/queries/objc/highlights.scm (renamed from queries/objc/highlights.scm)0
-rw-r--r--runtime/queries/objc/indents.scm (renamed from queries/objc/indents.scm)0
-rw-r--r--runtime/queries/objc/injections.scm (renamed from queries/objc/injections.scm)0
-rw-r--r--runtime/queries/objc/locals.scm (renamed from queries/objc/locals.scm)0
-rw-r--r--runtime/queries/objdump/highlights.scm (renamed from queries/objdump/highlights.scm)0
-rw-r--r--runtime/queries/objdump/injections.scm (renamed from queries/objdump/injections.scm)0
-rw-r--r--runtime/queries/ocaml/folds.scm (renamed from queries/ocaml/folds.scm)0
-rw-r--r--runtime/queries/ocaml/highlights.scm (renamed from queries/ocaml/highlights.scm)0
-rw-r--r--runtime/queries/ocaml/indents.scm (renamed from queries/ocaml/indents.scm)0
-rw-r--r--runtime/queries/ocaml/injections.scm (renamed from queries/nasm/injections.scm)0
-rw-r--r--runtime/queries/ocaml/locals.scm (renamed from queries/ocaml/locals.scm)0
-rw-r--r--runtime/queries/ocaml_interface/folds.scm (renamed from queries/ocaml_interface/folds.scm)0
-rw-r--r--runtime/queries/ocaml_interface/highlights.scm (renamed from queries/ocaml_interface/highlights.scm)0
-rw-r--r--runtime/queries/ocaml_interface/indents.scm (renamed from queries/ocaml_interface/indents.scm)0
-rw-r--r--runtime/queries/ocaml_interface/injections.scm (renamed from queries/ocaml_interface/injections.scm)0
-rw-r--r--runtime/queries/ocaml_interface/locals.scm (renamed from queries/ocaml_interface/locals.scm)0
-rw-r--r--runtime/queries/ocamllex/highlights.scm (renamed from queries/ocamllex/highlights.scm)0
-rw-r--r--runtime/queries/ocamllex/injections.scm (renamed from queries/ocamllex/injections.scm)0
-rw-r--r--runtime/queries/odin/folds.scm (renamed from queries/odin/folds.scm)0
-rw-r--r--runtime/queries/odin/highlights.scm (renamed from queries/odin/highlights.scm)0
-rw-r--r--runtime/queries/odin/indents.scm (renamed from queries/odin/indents.scm)0
-rw-r--r--runtime/queries/odin/injections.scm (renamed from queries/nginx/injections.scm)0
-rw-r--r--runtime/queries/odin/locals.scm (renamed from queries/odin/locals.scm)0
-rw-r--r--runtime/queries/pascal/folds.scm (renamed from queries/pascal/folds.scm)0
-rw-r--r--runtime/queries/pascal/highlights.scm (renamed from queries/pascal/highlights.scm)0
-rw-r--r--runtime/queries/pascal/indents.scm (renamed from queries/pascal/indents.scm)0
-rw-r--r--runtime/queries/pascal/injections.scm (renamed from queries/pascal/injections.scm)0
-rw-r--r--runtime/queries/pascal/locals.scm (renamed from queries/pascal/locals.scm)0
-rw-r--r--runtime/queries/passwd/highlights.scm (renamed from queries/passwd/highlights.scm)0
-rw-r--r--runtime/queries/pem/folds.scm (renamed from queries/pem/folds.scm)0
-rw-r--r--runtime/queries/pem/highlights.scm (renamed from queries/pem/highlights.scm)0
-rw-r--r--runtime/queries/pem/injections.scm (renamed from queries/nickel/injections.scm)0
-rw-r--r--runtime/queries/perl/folds.scm (renamed from queries/perl/folds.scm)0
-rw-r--r--runtime/queries/perl/highlights.scm (renamed from queries/perl/highlights.scm)0
-rw-r--r--runtime/queries/perl/injections.scm (renamed from queries/perl/injections.scm)0
-rw-r--r--runtime/queries/php/folds.scm (renamed from queries/php/folds.scm)0
-rw-r--r--runtime/queries/php/highlights.scm (renamed from queries/php/highlights.scm)0
-rw-r--r--runtime/queries/php/indents.scm (renamed from queries/php/indents.scm)0
-rw-r--r--runtime/queries/php/injections.scm (renamed from queries/php/injections.scm)0
-rw-r--r--runtime/queries/php/locals.scm (renamed from queries/php/locals.scm)0
-rw-r--r--runtime/queries/php_only/folds.scm (renamed from queries/php_only/folds.scm)0
-rw-r--r--runtime/queries/php_only/highlights.scm (renamed from queries/php_only/highlights.scm)0
-rw-r--r--runtime/queries/php_only/indents.scm (renamed from queries/php_only/indents.scm)0
-rw-r--r--runtime/queries/php_only/injections.scm (renamed from queries/php_only/injections.scm)0
-rw-r--r--runtime/queries/php_only/locals.scm (renamed from queries/php_only/locals.scm)0
-rw-r--r--runtime/queries/phpdoc/highlights.scm (renamed from queries/phpdoc/highlights.scm)0
-rw-r--r--runtime/queries/pioasm/highlights.scm (renamed from queries/pioasm/highlights.scm)0
-rw-r--r--runtime/queries/pioasm/injections.scm (renamed from queries/pioasm/injections.scm)0
-rw-r--r--runtime/queries/po/folds.scm (renamed from queries/po/folds.scm)0
-rw-r--r--runtime/queries/po/highlights.scm (renamed from queries/po/highlights.scm)0
-rw-r--r--runtime/queries/po/injections.scm (renamed from queries/ninja/injections.scm)0
-rw-r--r--runtime/queries/pod/highlights.scm (renamed from queries/pod/highlights.scm)0
-rw-r--r--runtime/queries/poe_filter/folds.scm (renamed from queries/poe_filter/folds.scm)0
-rw-r--r--runtime/queries/poe_filter/highlights.scm (renamed from queries/poe_filter/highlights.scm)0
-rw-r--r--runtime/queries/poe_filter/indents.scm (renamed from queries/poe_filter/indents.scm)0
-rw-r--r--runtime/queries/poe_filter/injections.scm (renamed from queries/ocaml/injections.scm)0
-rw-r--r--runtime/queries/pony/folds.scm (renamed from queries/pony/folds.scm)0
-rw-r--r--runtime/queries/pony/highlights.scm (renamed from queries/pony/highlights.scm)0
-rw-r--r--runtime/queries/pony/indents.scm (renamed from queries/pony/indents.scm)0
-rw-r--r--runtime/queries/pony/injections.scm (renamed from queries/pony/injections.scm)0
-rw-r--r--runtime/queries/pony/locals.scm (renamed from queries/pony/locals.scm)0
-rw-r--r--runtime/queries/powershell/folds.scm (renamed from queries/powershell/folds.scm)0
-rw-r--r--runtime/queries/powershell/highlights.scm (renamed from queries/powershell/highlights.scm)0
-rw-r--r--runtime/queries/powershell/indents.scm (renamed from queries/powershell/indents.scm)0
-rw-r--r--runtime/queries/powershell/injections.scm (renamed from queries/powershell/injections.scm)0
-rw-r--r--runtime/queries/powershell/locals.scm (renamed from queries/powershell/locals.scm)0
-rw-r--r--runtime/queries/printf/highlights.scm (renamed from queries/printf/highlights.scm)0
-rw-r--r--runtime/queries/prisma/folds.scm (renamed from queries/prisma/folds.scm)0
-rw-r--r--runtime/queries/prisma/highlights.scm (renamed from queries/prisma/highlights.scm)0
-rw-r--r--runtime/queries/prisma/injections.scm (renamed from queries/prisma/injections.scm)0
-rw-r--r--runtime/queries/problog/folds.scm (renamed from queries/problog/folds.scm)0
-rw-r--r--runtime/queries/problog/highlights.scm (renamed from queries/problog/highlights.scm)0
-rw-r--r--runtime/queries/problog/indents.scm (renamed from queries/problog/indents.scm)0
-rw-r--r--runtime/queries/problog/injections.scm (renamed from queries/problog/injections.scm)0
-rw-r--r--runtime/queries/prolog/folds.scm (renamed from queries/prolog/folds.scm)0
-rw-r--r--runtime/queries/prolog/highlights.scm (renamed from queries/prolog/highlights.scm)0
-rw-r--r--runtime/queries/prolog/indents.scm (renamed from queries/prolog/indents.scm)0
-rw-r--r--runtime/queries/prolog/injections.scm (renamed from queries/odin/injections.scm)0
-rw-r--r--runtime/queries/promql/highlights.scm (renamed from queries/promql/highlights.scm)0
-rw-r--r--runtime/queries/promql/injections.scm (renamed from queries/promql/injections.scm)0
-rw-r--r--runtime/queries/properties/highlights.scm (renamed from queries/properties/highlights.scm)0
-rw-r--r--runtime/queries/properties/injections.scm (renamed from queries/pem/injections.scm)0
-rw-r--r--runtime/queries/properties/locals.scm (renamed from queries/properties/locals.scm)0
-rw-r--r--runtime/queries/proto/folds.scm (renamed from queries/proto/folds.scm)0
-rw-r--r--runtime/queries/proto/highlights.scm (renamed from queries/proto/highlights.scm)0
-rw-r--r--runtime/queries/proto/indents.scm (renamed from queries/proto/indents.scm)0
-rw-r--r--runtime/queries/proto/injections.scm (renamed from queries/po/injections.scm)0
-rw-r--r--runtime/queries/prql/highlights.scm (renamed from queries/prql/highlights.scm)0
-rw-r--r--runtime/queries/prql/injections.scm (renamed from queries/prql/injections.scm)0
-rw-r--r--runtime/queries/psv/highlights.scm (renamed from queries/psv/highlights.scm)0
-rw-r--r--runtime/queries/pug/highlights.scm (renamed from queries/pug/highlights.scm)0
-rw-r--r--runtime/queries/pug/injections.scm (renamed from queries/pug/injections.scm)0
-rw-r--r--runtime/queries/puppet/folds.scm (renamed from queries/puppet/folds.scm)0
-rw-r--r--runtime/queries/puppet/highlights.scm (renamed from queries/puppet/highlights.scm)0
-rw-r--r--runtime/queries/puppet/indents.scm (renamed from queries/puppet/indents.scm)0
-rw-r--r--runtime/queries/puppet/injections.scm (renamed from queries/puppet/injections.scm)0
-rw-r--r--runtime/queries/puppet/locals.scm (renamed from queries/puppet/locals.scm)0
-rw-r--r--runtime/queries/purescript/highlights.scm (renamed from queries/purescript/highlights.scm)0
-rw-r--r--runtime/queries/purescript/injections.scm (renamed from queries/poe_filter/injections.scm)0
-rw-r--r--runtime/queries/purescript/locals.scm (renamed from queries/purescript/locals.scm)0
-rw-r--r--runtime/queries/pymanifest/highlights.scm (renamed from queries/pymanifest/highlights.scm)0
-rw-r--r--runtime/queries/pymanifest/injections.scm (renamed from queries/prolog/injections.scm)0
-rw-r--r--runtime/queries/python/folds.scm (renamed from queries/python/folds.scm)0
-rw-r--r--runtime/queries/python/highlights.scm (renamed from queries/python/highlights.scm)0
-rw-r--r--runtime/queries/python/indents.scm (renamed from queries/python/indents.scm)0
-rw-r--r--runtime/queries/python/injections.scm (renamed from queries/python/injections.scm)0
-rw-r--r--runtime/queries/python/locals.scm (renamed from queries/python/locals.scm)0
-rw-r--r--runtime/queries/ql/folds.scm (renamed from queries/ql/folds.scm)0
-rw-r--r--runtime/queries/ql/highlights.scm (renamed from queries/ql/highlights.scm)0
-rw-r--r--runtime/queries/ql/indents.scm (renamed from queries/ql/indents.scm)0
-rw-r--r--runtime/queries/ql/injections.scm (renamed from queries/ql/injections.scm)0
-rw-r--r--runtime/queries/ql/locals.scm (renamed from queries/ql/locals.scm)0
-rw-r--r--runtime/queries/qmldir/highlights.scm (renamed from queries/qmldir/highlights.scm)0
-rw-r--r--runtime/queries/qmldir/injections.scm (renamed from queries/properties/injections.scm)0
-rw-r--r--runtime/queries/qmljs/folds.scm (renamed from queries/qmljs/folds.scm)0
-rw-r--r--runtime/queries/qmljs/highlights.scm (renamed from queries/qmljs/highlights.scm)0
-rw-r--r--runtime/queries/qmljs/injections.scm (renamed from queries/qmljs/injections.scm)0
-rw-r--r--runtime/queries/query/folds.scm (renamed from queries/query/folds.scm)0
-rw-r--r--runtime/queries/query/highlights.scm (renamed from queries/query/highlights.scm)0
-rw-r--r--runtime/queries/query/indents.scm (renamed from queries/query/indents.scm)0
-rw-r--r--runtime/queries/query/injections.scm (renamed from queries/query/injections.scm)0
-rw-r--r--runtime/queries/query/locals.scm (renamed from queries/query/locals.scm)0
-rw-r--r--runtime/queries/r/highlights.scm (renamed from queries/r/highlights.scm)0
-rw-r--r--runtime/queries/r/indents.scm (renamed from queries/r/indents.scm)0
-rw-r--r--runtime/queries/r/injections.scm (renamed from queries/proto/injections.scm)0
-rw-r--r--runtime/queries/r/locals.scm (renamed from queries/r/locals.scm)0
-rw-r--r--runtime/queries/racket/folds.scm (renamed from queries/racket/folds.scm)0
-rw-r--r--runtime/queries/racket/highlights.scm (renamed from queries/racket/highlights.scm)0
-rw-r--r--runtime/queries/racket/injections.scm (renamed from queries/racket/injections.scm)0
-rw-r--r--runtime/queries/ralph/highlights.scm (renamed from queries/ralph/highlights.scm)0
-rw-r--r--runtime/queries/ralph/injections.scm (renamed from queries/ralph/injections.scm)0
-rw-r--r--runtime/queries/rasi/folds.scm (renamed from queries/rasi/folds.scm)0
-rw-r--r--runtime/queries/rasi/highlights.scm (renamed from queries/rasi/highlights.scm)0
-rw-r--r--runtime/queries/rasi/indents.scm (renamed from queries/rasi/indents.scm)0
-rw-r--r--runtime/queries/rasi/injections.scm (renamed from queries/purescript/injections.scm)0
-rw-r--r--runtime/queries/rasi/locals.scm (renamed from queries/rasi/locals.scm)0
-rw-r--r--runtime/queries/razor/folds.scm (renamed from queries/razor/folds.scm)0
-rw-r--r--runtime/queries/razor/highlights.scm (renamed from queries/razor/highlights.scm)0
-rw-r--r--runtime/queries/razor/injections.scm (renamed from queries/razor/injections.scm)0
-rw-r--r--runtime/queries/rbs/folds.scm (renamed from queries/rbs/folds.scm)0
-rw-r--r--runtime/queries/rbs/highlights.scm (renamed from queries/rbs/highlights.scm)0
-rw-r--r--runtime/queries/rbs/indents.scm (renamed from queries/rbs/indents.scm)0
-rw-r--r--runtime/queries/rbs/injections.scm (renamed from queries/pymanifest/injections.scm)0
-rw-r--r--runtime/queries/re2c/folds.scm (renamed from queries/re2c/folds.scm)0
-rw-r--r--runtime/queries/re2c/highlights.scm (renamed from queries/re2c/highlights.scm)0
-rw-r--r--runtime/queries/re2c/indents.scm (renamed from queries/re2c/indents.scm)0
-rw-r--r--runtime/queries/re2c/injections.scm (renamed from queries/re2c/injections.scm)0
-rw-r--r--runtime/queries/re2c/locals.scm (renamed from queries/re2c/locals.scm)0
-rw-r--r--runtime/queries/readline/folds.scm (renamed from queries/readline/folds.scm)0
-rw-r--r--runtime/queries/readline/highlights.scm (renamed from queries/readline/highlights.scm)0
-rw-r--r--runtime/queries/readline/indents.scm (renamed from queries/readline/indents.scm)0
-rw-r--r--runtime/queries/readline/injections.scm (renamed from queries/qmldir/injections.scm)0
-rw-r--r--runtime/queries/regex/highlights.scm (renamed from queries/regex/highlights.scm)0
-rw-r--r--runtime/queries/rego/highlights.scm (renamed from queries/rego/highlights.scm)0
-rw-r--r--runtime/queries/rego/injections.scm (renamed from queries/r/injections.scm)0
-rw-r--r--runtime/queries/requirements/highlights.scm (renamed from queries/requirements/highlights.scm)0
-rw-r--r--runtime/queries/requirements/injections.scm (renamed from queries/rasi/injections.scm)0
-rw-r--r--runtime/queries/rescript/folds.scm (renamed from queries/rescript/folds.scm)0
-rw-r--r--runtime/queries/rescript/highlights.scm (renamed from queries/rescript/highlights.scm)0
-rw-r--r--runtime/queries/rescript/indents.scm (renamed from queries/rescript/indents.scm)0
-rw-r--r--runtime/queries/rescript/injections.scm (renamed from queries/rescript/injections.scm)0
-rw-r--r--runtime/queries/rescript/locals.scm (renamed from queries/rescript/locals.scm)0
-rw-r--r--runtime/queries/rnoweb/folds.scm (renamed from queries/rnoweb/folds.scm)0
-rw-r--r--runtime/queries/rnoweb/highlights.scm (renamed from queries/rnoweb/highlights.scm)0
-rw-r--r--runtime/queries/rnoweb/injections.scm (renamed from queries/rnoweb/injections.scm)0
-rw-r--r--runtime/queries/robot/folds.scm (renamed from queries/robot/folds.scm)0
-rw-r--r--runtime/queries/robot/highlights.scm (renamed from queries/robot/highlights.scm)0
-rw-r--r--runtime/queries/robot/indents.scm (renamed from queries/robot/indents.scm)0
-rw-r--r--runtime/queries/robot/injections.scm (renamed from queries/robot/injections.scm)0
-rw-r--r--runtime/queries/robots/highlights.scm (renamed from queries/robots/highlights.scm)0
-rw-r--r--runtime/queries/robots/injections.scm (renamed from queries/rbs/injections.scm)0
-rw-r--r--runtime/queries/roc/highlights.scm (renamed from queries/roc/highlights.scm)0
-rw-r--r--runtime/queries/roc/indents.scm (renamed from queries/roc/indents.scm)0
-rw-r--r--runtime/queries/roc/injections.scm (renamed from queries/roc/injections.scm)0
-rw-r--r--runtime/queries/roc/locals.scm (renamed from queries/roc/locals.scm)0
-rw-r--r--runtime/queries/ron/folds.scm (renamed from queries/ron/folds.scm)0
-rw-r--r--runtime/queries/ron/highlights.scm (renamed from queries/ron/highlights.scm)0
-rw-r--r--runtime/queries/ron/indents.scm (renamed from queries/ron/indents.scm)0
-rw-r--r--runtime/queries/ron/injections.scm (renamed from queries/ron/injections.scm)0
-rw-r--r--runtime/queries/ron/locals.scm (renamed from queries/ron/locals.scm)0
-rw-r--r--runtime/queries/rst/highlights.scm (renamed from queries/rst/highlights.scm)0
-rw-r--r--runtime/queries/rst/injections.scm (renamed from queries/rst/injections.scm)0
-rw-r--r--runtime/queries/rst/locals.scm (renamed from queries/rst/locals.scm)0
-rw-r--r--runtime/queries/ruby/folds.scm (renamed from queries/ruby/folds.scm)0
-rw-r--r--runtime/queries/ruby/highlights.scm (renamed from queries/ruby/highlights.scm)3
-rw-r--r--runtime/queries/ruby/indents.scm (renamed from queries/ruby/indents.scm)0
-rw-r--r--runtime/queries/ruby/injections.scm (renamed from queries/ruby/injections.scm)0
-rw-r--r--runtime/queries/ruby/locals.scm (renamed from queries/ruby/locals.scm)0
-rw-r--r--runtime/queries/runescript/highlights.scm (renamed from queries/runescript/highlights.scm)0
-rw-r--r--runtime/queries/runescript/injections.scm (renamed from queries/readline/injections.scm)0
-rw-r--r--runtime/queries/rust/folds.scm (renamed from queries/rust/folds.scm)0
-rw-r--r--runtime/queries/rust/highlights.scm (renamed from queries/rust/highlights.scm)0
-rw-r--r--runtime/queries/rust/indents.scm (renamed from queries/rust/indents.scm)0
-rw-r--r--runtime/queries/rust/injections.scm (renamed from queries/rust/injections.scm)0
-rw-r--r--runtime/queries/rust/locals.scm (renamed from queries/rust/locals.scm)0
-rw-r--r--runtime/queries/scala/folds.scm (renamed from queries/scala/folds.scm)0
-rw-r--r--runtime/queries/scala/highlights.scm (renamed from queries/scala/highlights.scm)0
-rw-r--r--runtime/queries/scala/injections.scm (renamed from queries/rego/injections.scm)0
-rw-r--r--runtime/queries/scala/locals.scm (renamed from queries/scala/locals.scm)0
-rw-r--r--runtime/queries/scfg/highlights.scm (renamed from queries/scfg/highlights.scm)0
-rw-r--r--runtime/queries/scfg/injections.scm (renamed from queries/requirements/injections.scm)0
-rw-r--r--runtime/queries/scheme/folds.scm (renamed from queries/scheme/folds.scm)0
-rw-r--r--runtime/queries/scheme/highlights.scm (renamed from queries/scheme/highlights.scm)0
-rw-r--r--runtime/queries/scheme/injections.scm (renamed from queries/robots/injections.scm)0
-rw-r--r--runtime/queries/scss/folds.scm (renamed from queries/scss/folds.scm)0
-rw-r--r--runtime/queries/scss/highlights.scm (renamed from queries/scss/highlights.scm)0
-rw-r--r--runtime/queries/scss/indents.scm (renamed from queries/scss/indents.scm)0
-rw-r--r--runtime/queries/scss/injections.scm (renamed from queries/scss/injections.scm)0
-rw-r--r--runtime/queries/sflog/highlights.scm (renamed from queries/sflog/highlights.scm)0
-rw-r--r--runtime/queries/slang/folds.scm (renamed from queries/slang/folds.scm)0
-rw-r--r--runtime/queries/slang/highlights.scm (renamed from queries/slang/highlights.scm)0
-rw-r--r--runtime/queries/slang/indents.scm (renamed from queries/slang/indents.scm)0
-rw-r--r--runtime/queries/slang/injections.scm (renamed from queries/slang/injections.scm)0
-rw-r--r--runtime/queries/slang/locals.scm (renamed from queries/slang/locals.scm)0
-rw-r--r--runtime/queries/slim/folds.scm (renamed from queries/slim/folds.scm)0
-rw-r--r--runtime/queries/slim/highlights.scm (renamed from queries/slim/highlights.scm)0
-rw-r--r--runtime/queries/slim/indents.scm (renamed from queries/slim/indents.scm)0
-rw-r--r--runtime/queries/slim/injections.scm (renamed from queries/slim/injections.scm)0
-rw-r--r--runtime/queries/slim/locals.scm (renamed from queries/slim/locals.scm)0
-rw-r--r--runtime/queries/slint/folds.scm (renamed from queries/slint/folds.scm)0
-rw-r--r--runtime/queries/slint/highlights.scm (renamed from queries/slint/highlights.scm)0
-rw-r--r--runtime/queries/slint/indents.scm (renamed from queries/slint/indents.scm)0
-rw-r--r--runtime/queries/slint/injections.scm (renamed from queries/runescript/injections.scm)0
-rw-r--r--runtime/queries/slint/locals.scm (renamed from queries/slint/locals.scm)0
-rw-r--r--runtime/queries/smali/folds.scm (renamed from queries/smali/folds.scm)0
-rw-r--r--runtime/queries/smali/highlights.scm (renamed from queries/smali/highlights.scm)0
-rw-r--r--runtime/queries/smali/indents.scm (renamed from queries/smali/indents.scm)0
-rw-r--r--runtime/queries/smali/injections.scm (renamed from queries/scfg/injections.scm)0
-rw-r--r--runtime/queries/smali/locals.scm (renamed from queries/smali/locals.scm)0
-rw-r--r--runtime/queries/smithy/highlights.scm (renamed from queries/smithy/highlights.scm)0
-rw-r--r--runtime/queries/smithy/injections.scm (renamed from queries/smithy/injections.scm)0
-rw-r--r--runtime/queries/snakemake/folds.scm (renamed from queries/snakemake/folds.scm)0
-rw-r--r--runtime/queries/snakemake/highlights.scm (renamed from queries/snakemake/highlights.scm)0
-rw-r--r--runtime/queries/snakemake/indents.scm (renamed from queries/snakemake/indents.scm)0
-rw-r--r--runtime/queries/snakemake/injections.scm (renamed from queries/snakemake/injections.scm)0
-rw-r--r--runtime/queries/snakemake/locals.scm (renamed from queries/snakemake/locals.scm)0
-rw-r--r--runtime/queries/solidity/folds.scm (renamed from queries/solidity/folds.scm)0
-rw-r--r--runtime/queries/solidity/highlights.scm (renamed from queries/solidity/highlights.scm)0
-rw-r--r--runtime/queries/solidity/injections.scm (renamed from queries/scheme/injections.scm)0
-rw-r--r--runtime/queries/soql/highlights.scm (renamed from queries/soql/highlights.scm)0
-rw-r--r--runtime/queries/sosl/highlights.scm (renamed from queries/sosl/highlights.scm)0
-rw-r--r--runtime/queries/sourcepawn/highlights.scm (renamed from queries/sourcepawn/highlights.scm)0
-rw-r--r--runtime/queries/sourcepawn/injections.scm (renamed from queries/sourcepawn/injections.scm)0
-rw-r--r--runtime/queries/sourcepawn/locals.scm (renamed from queries/sourcepawn/locals.scm)0
-rw-r--r--runtime/queries/sparql/folds.scm (renamed from queries/sparql/folds.scm)0
-rw-r--r--runtime/queries/sparql/highlights.scm (renamed from queries/sparql/highlights.scm)0
-rw-r--r--runtime/queries/sparql/indents.scm (renamed from queries/sparql/indents.scm)0
-rw-r--r--runtime/queries/sparql/injections.scm (renamed from queries/sparql/injections.scm)0
-rw-r--r--runtime/queries/sparql/locals.scm (renamed from queries/sparql/locals.scm)0
-rw-r--r--runtime/queries/sql/folds.scm (renamed from queries/sql/folds.scm)0
-rw-r--r--runtime/queries/sql/highlights.scm (renamed from queries/sql/highlights.scm)0
-rw-r--r--runtime/queries/sql/indents.scm (renamed from queries/sql/indents.scm)0
-rw-r--r--runtime/queries/sql/injections.scm (renamed from queries/sql/injections.scm)0
-rw-r--r--runtime/queries/squirrel/folds.scm (renamed from queries/squirrel/folds.scm)0
-rw-r--r--runtime/queries/squirrel/highlights.scm (renamed from queries/squirrel/highlights.scm)0
-rw-r--r--runtime/queries/squirrel/indents.scm (renamed from queries/squirrel/indents.scm)0
-rw-r--r--runtime/queries/squirrel/injections.scm (renamed from queries/squirrel/injections.scm)0
-rw-r--r--runtime/queries/squirrel/locals.scm (renamed from queries/squirrel/locals.scm)0
-rw-r--r--runtime/queries/ssh_config/folds.scm (renamed from queries/ssh_config/folds.scm)0
-rw-r--r--runtime/queries/ssh_config/highlights.scm (renamed from queries/ssh_config/highlights.scm)0
-rw-r--r--runtime/queries/ssh_config/indents.scm (renamed from queries/ssh_config/indents.scm)0
-rw-r--r--runtime/queries/ssh_config/injections.scm (renamed from queries/ssh_config/injections.scm)0
-rw-r--r--runtime/queries/ssh_config/locals.scm (renamed from queries/ssh_config/locals.scm)0
-rw-r--r--runtime/queries/starlark/folds.scm (renamed from queries/starlark/folds.scm)0
-rw-r--r--runtime/queries/starlark/highlights.scm (renamed from queries/starlark/highlights.scm)0
-rw-r--r--runtime/queries/starlark/indents.scm (renamed from queries/starlark/indents.scm)0
-rw-r--r--runtime/queries/starlark/injections.scm (renamed from queries/starlark/injections.scm)0
-rw-r--r--runtime/queries/starlark/locals.scm (renamed from queries/starlark/locals.scm)0
-rw-r--r--runtime/queries/strace/highlights.scm (renamed from queries/strace/highlights.scm)0
-rw-r--r--runtime/queries/strace/injections.scm (renamed from queries/slint/injections.scm)0
-rw-r--r--runtime/queries/styled/folds.scm (renamed from queries/styled/folds.scm)0
-rw-r--r--runtime/queries/styled/highlights.scm (renamed from queries/styled/highlights.scm)0
-rw-r--r--runtime/queries/styled/indents.scm (renamed from queries/styled/indents.scm)0
-rw-r--r--runtime/queries/styled/injections.scm (renamed from queries/styled/injections.scm)0
-rw-r--r--runtime/queries/supercollider/folds.scm (renamed from queries/supercollider/folds.scm)0
-rw-r--r--runtime/queries/supercollider/highlights.scm (renamed from queries/supercollider/highlights.scm)0
-rw-r--r--runtime/queries/supercollider/indents.scm (renamed from queries/supercollider/indents.scm)0
-rw-r--r--runtime/queries/supercollider/injections.scm (renamed from queries/supercollider/injections.scm)0
-rw-r--r--runtime/queries/supercollider/locals.scm (renamed from queries/supercollider/locals.scm)0
-rw-r--r--runtime/queries/superhtml/highlights.scm (renamed from queries/superhtml/highlights.scm)0
-rw-r--r--runtime/queries/superhtml/injections.scm (renamed from queries/superhtml/injections.scm)0
-rw-r--r--runtime/queries/surface/folds.scm (renamed from queries/surface/folds.scm)0
-rw-r--r--runtime/queries/surface/highlights.scm (renamed from queries/surface/highlights.scm)0
-rw-r--r--runtime/queries/surface/indents.scm (renamed from queries/surface/indents.scm)0
-rw-r--r--runtime/queries/surface/injections.scm (renamed from queries/surface/injections.scm)0
-rw-r--r--runtime/queries/svelte/folds.scm (renamed from queries/svelte/folds.scm)0
-rw-r--r--runtime/queries/svelte/highlights.scm (renamed from queries/svelte/highlights.scm)0
-rw-r--r--runtime/queries/svelte/indents.scm (renamed from queries/svelte/indents.scm)0
-rw-r--r--runtime/queries/svelte/injections.scm (renamed from queries/svelte/injections.scm)0
-rw-r--r--runtime/queries/svelte/locals.scm (renamed from queries/svelte/locals.scm)0
-rw-r--r--runtime/queries/sway/folds.scm (renamed from queries/sway/folds.scm)0
-rw-r--r--runtime/queries/sway/highlights.scm (renamed from queries/sway/highlights.scm)0
-rw-r--r--runtime/queries/sway/indents.scm (renamed from queries/sway/indents.scm)0
-rw-r--r--runtime/queries/sway/injections.scm (renamed from queries/sway/injections.scm)0
-rw-r--r--runtime/queries/sway/locals.scm (renamed from queries/sway/locals.scm)0
-rw-r--r--runtime/queries/swift/folds.scm (renamed from queries/swift/folds.scm)0
-rw-r--r--runtime/queries/swift/highlights.scm (renamed from queries/swift/highlights.scm)0
-rw-r--r--runtime/queries/swift/indents.scm (renamed from queries/swift/indents.scm)0
-rw-r--r--runtime/queries/swift/injections.scm (renamed from queries/swift/injections.scm)0
-rw-r--r--runtime/queries/swift/locals.scm (renamed from queries/swift/locals.scm)0
-rw-r--r--runtime/queries/sxhkdrc/folds.scm (renamed from queries/sxhkdrc/folds.scm)0
-rw-r--r--runtime/queries/sxhkdrc/highlights.scm (renamed from queries/sxhkdrc/highlights.scm)0
-rw-r--r--runtime/queries/sxhkdrc/injections.scm (renamed from queries/sxhkdrc/injections.scm)0
-rw-r--r--runtime/queries/systemtap/folds.scm (renamed from queries/systemtap/folds.scm)0
-rw-r--r--runtime/queries/systemtap/highlights.scm (renamed from queries/systemtap/highlights.scm)0
-rw-r--r--runtime/queries/systemtap/injections.scm (renamed from queries/systemtap/injections.scm)0
-rw-r--r--runtime/queries/systemtap/locals.scm (renamed from queries/systemtap/locals.scm)0
-rw-r--r--runtime/queries/t32/folds.scm (renamed from queries/t32/folds.scm)0
-rw-r--r--runtime/queries/t32/highlights.scm (renamed from queries/t32/highlights.scm)0
-rw-r--r--runtime/queries/t32/indents.scm (renamed from queries/t32/indents.scm)0
-rw-r--r--runtime/queries/t32/injections.scm (renamed from queries/smali/injections.scm)0
-rw-r--r--runtime/queries/t32/locals.scm (renamed from queries/t32/locals.scm)0
-rw-r--r--runtime/queries/tablegen/folds.scm (renamed from queries/tablegen/folds.scm)0
-rw-r--r--runtime/queries/tablegen/highlights.scm (renamed from queries/tablegen/highlights.scm)0
-rw-r--r--runtime/queries/tablegen/indents.scm (renamed from queries/tablegen/indents.scm)0
-rw-r--r--runtime/queries/tablegen/injections.scm (renamed from queries/tablegen/injections.scm)0
-rw-r--r--runtime/queries/tablegen/locals.scm (renamed from queries/tablegen/locals.scm)0
-rw-r--r--runtime/queries/tact/folds.scm (renamed from queries/tact/folds.scm)0
-rw-r--r--runtime/queries/tact/highlights.scm (renamed from queries/tact/highlights.scm)0
-rw-r--r--runtime/queries/tact/indents.scm (renamed from queries/tact/indents.scm)0
-rw-r--r--runtime/queries/tact/injections.scm (renamed from queries/strace/injections.scm)0
-rw-r--r--runtime/queries/tact/locals.scm (renamed from queries/tact/locals.scm)0
-rw-r--r--runtime/queries/tcl/folds.scm (renamed from queries/tcl/folds.scm)0
-rw-r--r--runtime/queries/tcl/highlights.scm (renamed from queries/tcl/highlights.scm)0
-rw-r--r--runtime/queries/tcl/indents.scm (renamed from queries/tcl/indents.scm)0
-rw-r--r--runtime/queries/tcl/injections.scm (renamed from queries/t32/injections.scm)0
-rw-r--r--runtime/queries/teal/folds.scm (renamed from queries/teal/folds.scm)0
-rw-r--r--runtime/queries/teal/highlights.scm (renamed from queries/teal/highlights.scm)0
-rw-r--r--runtime/queries/teal/indents.scm (renamed from queries/teal/indents.scm)0
-rw-r--r--runtime/queries/teal/injections.scm (renamed from queries/teal/injections.scm)0
-rw-r--r--runtime/queries/teal/locals.scm (renamed from queries/teal/locals.scm)0
-rw-r--r--runtime/queries/templ/folds.scm (renamed from queries/templ/folds.scm)0
-rw-r--r--runtime/queries/templ/highlights.scm (renamed from queries/templ/highlights.scm)0
-rw-r--r--runtime/queries/templ/injections.scm (renamed from queries/templ/injections.scm)0
-rw-r--r--runtime/queries/tera/highlights.scm (renamed from queries/tera/highlights.scm)0
-rw-r--r--runtime/queries/tera/injections.scm (renamed from queries/tera/injections.scm)0
-rw-r--r--runtime/queries/terraform/folds.scm (renamed from queries/terraform/folds.scm)0
-rw-r--r--runtime/queries/terraform/highlights.scm (renamed from queries/terraform/highlights.scm)0
-rw-r--r--runtime/queries/terraform/indents.scm (renamed from queries/terraform/indents.scm)0
-rw-r--r--runtime/queries/terraform/injections.scm (renamed from queries/terraform/injections.scm)0
-rw-r--r--runtime/queries/textproto/folds.scm (renamed from queries/textproto/folds.scm)0
-rw-r--r--runtime/queries/textproto/highlights.scm (renamed from queries/textproto/highlights.scm)0
-rw-r--r--runtime/queries/textproto/indents.scm (renamed from queries/textproto/indents.scm)0
-rw-r--r--runtime/queries/textproto/injections.scm (renamed from queries/tact/injections.scm)0
-rw-r--r--runtime/queries/thrift/folds.scm (renamed from queries/thrift/folds.scm)0
-rw-r--r--runtime/queries/thrift/highlights.scm (renamed from queries/thrift/highlights.scm)0
-rw-r--r--runtime/queries/thrift/indents.scm (renamed from queries/thrift/indents.scm)0
-rw-r--r--runtime/queries/thrift/injections.scm (renamed from queries/tcl/injections.scm)0
-rw-r--r--runtime/queries/thrift/locals.scm (renamed from queries/thrift/locals.scm)0
-rw-r--r--runtime/queries/tiger/folds.scm (renamed from queries/tiger/folds.scm)0
-rw-r--r--runtime/queries/tiger/highlights.scm (renamed from queries/tiger/highlights.scm)0
-rw-r--r--runtime/queries/tiger/indents.scm (renamed from queries/tiger/indents.scm)0
-rw-r--r--runtime/queries/tiger/injections.scm (renamed from queries/tiger/injections.scm)0
-rw-r--r--runtime/queries/tiger/locals.scm (renamed from queries/tiger/locals.scm)0
-rw-r--r--runtime/queries/tlaplus/folds.scm (renamed from queries/tlaplus/folds.scm)0
-rw-r--r--runtime/queries/tlaplus/highlights.scm (renamed from queries/tlaplus/highlights.scm)0
-rw-r--r--runtime/queries/tlaplus/injections.scm (renamed from queries/tlaplus/injections.scm)0
-rw-r--r--runtime/queries/tlaplus/locals.scm (renamed from queries/tlaplus/locals.scm)0
-rw-r--r--runtime/queries/tmux/highlights.scm (renamed from queries/tmux/highlights.scm)0
-rw-r--r--runtime/queries/tmux/injections.scm (renamed from queries/tmux/injections.scm)0
-rw-r--r--runtime/queries/todotxt/highlights.scm (renamed from queries/todotxt/highlights.scm)0
-rw-r--r--runtime/queries/toml/folds.scm (renamed from queries/toml/folds.scm)0
-rw-r--r--runtime/queries/toml/highlights.scm (renamed from queries/toml/highlights.scm)0
-rw-r--r--runtime/queries/toml/indents.scm (renamed from queries/toml/indents.scm)0
-rw-r--r--runtime/queries/toml/injections.scm (renamed from queries/textproto/injections.scm)0
-rw-r--r--runtime/queries/toml/locals.scm (renamed from queries/toml/locals.scm)0
-rw-r--r--runtime/queries/tsv/highlights.scm (renamed from queries/tsv/highlights.scm)0
-rw-r--r--runtime/queries/tsx/folds.scm (renamed from queries/tsx/folds.scm)0
-rw-r--r--runtime/queries/tsx/highlights.scm (renamed from queries/tsx/highlights.scm)0
-rw-r--r--runtime/queries/tsx/indents.scm (renamed from queries/tsx/indents.scm)0
-rw-r--r--runtime/queries/tsx/injections.scm (renamed from queries/tsx/injections.scm)0
-rw-r--r--runtime/queries/tsx/locals.scm (renamed from queries/tsx/locals.scm)0
-rw-r--r--runtime/queries/turtle/folds.scm (renamed from queries/turtle/folds.scm)0
-rw-r--r--runtime/queries/turtle/highlights.scm (renamed from queries/turtle/highlights.scm)0
-rw-r--r--runtime/queries/turtle/indents.scm (renamed from queries/turtle/indents.scm)0
-rw-r--r--runtime/queries/turtle/injections.scm (renamed from queries/thrift/injections.scm)0
-rw-r--r--runtime/queries/turtle/locals.scm (renamed from queries/turtle/locals.scm)0
-rw-r--r--runtime/queries/twig/highlights.scm (renamed from queries/twig/highlights.scm)0
-rw-r--r--runtime/queries/twig/injections.scm (renamed from queries/twig/injections.scm)0
-rw-r--r--runtime/queries/typescript/folds.scm (renamed from queries/typescript/folds.scm)0
-rw-r--r--runtime/queries/typescript/highlights.scm (renamed from queries/typescript/highlights.scm)0
-rw-r--r--runtime/queries/typescript/indents.scm (renamed from queries/typescript/indents.scm)0
-rw-r--r--runtime/queries/typescript/injections.scm (renamed from queries/typescript/injections.scm)0
-rw-r--r--runtime/queries/typescript/locals.scm (renamed from queries/typescript/locals.scm)0
-rw-r--r--runtime/queries/typespec/highlights.scm (renamed from queries/typespec/highlights.scm)0
-rw-r--r--runtime/queries/typespec/indents.scm (renamed from queries/typespec/indents.scm)0
-rw-r--r--runtime/queries/typespec/injections.scm (renamed from queries/typespec/injections.scm)0
-rw-r--r--runtime/queries/typoscript/folds.scm (renamed from queries/typoscript/folds.scm)0
-rw-r--r--runtime/queries/typoscript/highlights.scm (renamed from queries/typoscript/highlights.scm)0
-rw-r--r--runtime/queries/typoscript/indents.scm (renamed from queries/typoscript/indents.scm)0
-rw-r--r--runtime/queries/typoscript/injections.scm (renamed from queries/toml/injections.scm)0
-rw-r--r--runtime/queries/typst/folds.scm (renamed from queries/typst/folds.scm)0
-rw-r--r--runtime/queries/typst/highlights.scm (renamed from queries/typst/highlights.scm)0
-rw-r--r--runtime/queries/typst/indents.scm (renamed from queries/typst/indents.scm)0
-rw-r--r--runtime/queries/typst/injections.scm (renamed from queries/turtle/injections.scm)0
-rw-r--r--runtime/queries/udev/highlights.scm (renamed from queries/udev/highlights.scm)0
-rw-r--r--runtime/queries/udev/injections.scm (renamed from queries/udev/injections.scm)0
-rw-r--r--runtime/queries/udev/locals.scm (renamed from queries/udev/locals.scm)0
-rw-r--r--runtime/queries/ungrammar/folds.scm (renamed from queries/ungrammar/folds.scm)0
-rw-r--r--runtime/queries/ungrammar/highlights.scm (renamed from queries/ungrammar/highlights.scm)0
-rw-r--r--runtime/queries/ungrammar/indents.scm (renamed from queries/ungrammar/indents.scm)0
-rw-r--r--runtime/queries/ungrammar/injections.scm (renamed from queries/typoscript/injections.scm)0
-rw-r--r--runtime/queries/ungrammar/locals.scm (renamed from queries/ungrammar/locals.scm)0
-rw-r--r--runtime/queries/unison/folds.scm (renamed from queries/unison/folds.scm)0
-rw-r--r--runtime/queries/unison/highlights.scm (renamed from queries/unison/highlights.scm)0
-rw-r--r--runtime/queries/unison/injections.scm (renamed from queries/ungrammar/injections.scm)0
-rw-r--r--runtime/queries/usd/folds.scm (renamed from queries/usd/folds.scm)0
-rw-r--r--runtime/queries/usd/highlights.scm (renamed from queries/usd/highlights.scm)0
-rw-r--r--runtime/queries/usd/indents.scm (renamed from queries/usd/indents.scm)0
-rw-r--r--runtime/queries/usd/injections.scm (renamed from queries/usd/injections.scm)0
-rw-r--r--runtime/queries/usd/locals.scm (renamed from queries/usd/locals.scm)0
-rw-r--r--runtime/queries/uxntal/folds.scm (renamed from queries/uxntal/folds.scm)0
-rw-r--r--runtime/queries/uxntal/highlights.scm (renamed from queries/uxntal/highlights.scm)0
-rw-r--r--runtime/queries/uxntal/indents.scm (renamed from queries/uxntal/indents.scm)0
-rw-r--r--runtime/queries/uxntal/injections.scm (renamed from queries/uxntal/injections.scm)0
-rw-r--r--runtime/queries/uxntal/locals.scm (renamed from queries/uxntal/locals.scm)0
-rw-r--r--runtime/queries/v/folds.scm (renamed from queries/v/folds.scm)0
-rw-r--r--runtime/queries/v/highlights.scm (renamed from queries/v/highlights.scm)0
-rw-r--r--runtime/queries/v/indents.scm (renamed from queries/v/indents.scm)0
-rw-r--r--runtime/queries/v/injections.scm (renamed from queries/v/injections.scm)0
-rw-r--r--runtime/queries/v/locals.scm (renamed from queries/v/locals.scm)0
-rw-r--r--runtime/queries/vala/folds.scm (renamed from queries/vala/folds.scm)0
-rw-r--r--runtime/queries/vala/highlights.scm (renamed from queries/vala/highlights.scm)0
-rw-r--r--runtime/queries/vala/injections.scm (renamed from queries/vala/injections.scm)0
-rw-r--r--runtime/queries/vento/highlights.scm (renamed from queries/vento/highlights.scm)0
-rw-r--r--runtime/queries/vento/injections.scm (renamed from queries/vento/injections.scm)0
-rw-r--r--runtime/queries/verilog/folds.scm (renamed from queries/verilog/folds.scm)0
-rw-r--r--runtime/queries/verilog/highlights.scm (renamed from queries/verilog/highlights.scm)0
-rw-r--r--runtime/queries/verilog/injections.scm (renamed from queries/vhs/injections.scm)0
-rw-r--r--runtime/queries/vhdl/folds.scm (renamed from queries/vhdl/folds.scm)0
-rw-r--r--runtime/queries/vhdl/highlights.scm (renamed from queries/vhdl/highlights.scm)0
-rw-r--r--runtime/queries/vhdl/injections.scm (renamed from queries/vhdl/injections.scm)0
-rw-r--r--runtime/queries/vhs/highlights.scm (renamed from queries/vhs/highlights.scm)0
-rw-r--r--runtime/queries/vhs/injections.scm (renamed from queries/wit/injections.scm)0
-rw-r--r--runtime/queries/vim/folds.scm (renamed from queries/vim/folds.scm)0
-rw-r--r--runtime/queries/vim/highlights.scm (renamed from queries/vim/highlights.scm)0
-rw-r--r--runtime/queries/vim/injections.scm (renamed from queries/vim/injections.scm)0
-rw-r--r--runtime/queries/vim/locals.scm (renamed from queries/vim/locals.scm)0
-rw-r--r--runtime/queries/vimdoc/highlights.scm (renamed from queries/vimdoc/highlights.scm)0
-rw-r--r--runtime/queries/vimdoc/injections.scm (renamed from queries/vimdoc/injections.scm)0
-rw-r--r--runtime/queries/vrl/folds.scm (renamed from queries/vrl/folds.scm)0
-rw-r--r--runtime/queries/vrl/highlights.scm (renamed from queries/vrl/highlights.scm)0
-rw-r--r--runtime/queries/vrl/indents.scm (renamed from queries/vrl/indents.scm)0
-rw-r--r--runtime/queries/vrl/injections.scm (renamed from queries/vrl/injections.scm)0
-rw-r--r--runtime/queries/vrl/locals.scm (renamed from queries/vrl/locals.scm)0
-rw-r--r--runtime/queries/vue/folds.scm (renamed from queries/vue/folds.scm)0
-rw-r--r--runtime/queries/vue/highlights.scm (renamed from queries/vue/highlights.scm)0
-rw-r--r--runtime/queries/vue/indents.scm (renamed from queries/vue/indents.scm)0
-rw-r--r--runtime/queries/vue/injections.scm (renamed from queries/vue/injections.scm)0
-rw-r--r--runtime/queries/wgsl/folds.scm (renamed from queries/wgsl/folds.scm)0
-rw-r--r--runtime/queries/wgsl/highlights.scm (renamed from queries/wgsl/highlights.scm)0
-rw-r--r--runtime/queries/wgsl/indents.scm (renamed from queries/wgsl/indents.scm)0
-rw-r--r--runtime/queries/wgsl/injections.scm (renamed from queries/wgsl/injections.scm)0
-rw-r--r--runtime/queries/wgsl_bevy/folds.scm (renamed from queries/wgsl_bevy/folds.scm)0
-rw-r--r--runtime/queries/wgsl_bevy/highlights.scm (renamed from queries/wgsl_bevy/highlights.scm)0
-rw-r--r--runtime/queries/wgsl_bevy/indents.scm (renamed from queries/wgsl_bevy/indents.scm)0
-rw-r--r--runtime/queries/wing/folds.scm (renamed from queries/wing/folds.scm)0
-rw-r--r--runtime/queries/wing/highlights.scm (renamed from queries/wing/highlights.scm)0
-rw-r--r--runtime/queries/wing/injections.scm (renamed from queries/wing/injections.scm)0
-rw-r--r--runtime/queries/wing/locals.scm (renamed from queries/wing/locals.scm)0
-rw-r--r--runtime/queries/wit/folds.scm (renamed from queries/wit/folds.scm)0
-rw-r--r--runtime/queries/wit/highlights.scm (renamed from queries/wit/highlights.scm)0
-rw-r--r--runtime/queries/wit/injections.scm (renamed from queries/xcompose/injections.scm)0
-rw-r--r--runtime/queries/xcompose/highlights.scm (renamed from queries/xcompose/highlights.scm)0
-rw-r--r--runtime/queries/xcompose/injections.scm (renamed from queries/typst/injections.scm)4
-rw-r--r--runtime/queries/xcompose/locals.scm (renamed from queries/xcompose/locals.scm)0
-rw-r--r--runtime/queries/xml/folds.scm (renamed from queries/xml/folds.scm)0
-rw-r--r--runtime/queries/xml/highlights.scm (renamed from queries/xml/highlights.scm)0
-rw-r--r--runtime/queries/xml/indents.scm (renamed from queries/xml/indents.scm)0
-rw-r--r--runtime/queries/xml/injections.scm (renamed from queries/xml/injections.scm)0
-rw-r--r--runtime/queries/xml/locals.scm (renamed from queries/xml/locals.scm)0
-rw-r--r--runtime/queries/xresources/folds.scm (renamed from queries/xresources/folds.scm)0
-rw-r--r--runtime/queries/xresources/highlights.scm (renamed from queries/xresources/highlights.scm)0
-rw-r--r--runtime/queries/xresources/injections.scm (renamed from queries/xresources/injections.scm)0
-rw-r--r--runtime/queries/xresources/locals.scm (renamed from queries/xresources/locals.scm)0
-rw-r--r--runtime/queries/yaml/folds.scm (renamed from queries/yaml/folds.scm)0
-rw-r--r--runtime/queries/yaml/highlights.scm (renamed from queries/yaml/highlights.scm)0
-rw-r--r--runtime/queries/yaml/indents.scm (renamed from queries/yaml/indents.scm)0
-rw-r--r--runtime/queries/yaml/injections.scm (renamed from queries/yaml/injections.scm)0
-rw-r--r--runtime/queries/yaml/locals.scm (renamed from queries/yaml/locals.scm)0
-rw-r--r--runtime/queries/yang/folds.scm (renamed from queries/yang/folds.scm)0
-rw-r--r--runtime/queries/yang/highlights.scm (renamed from queries/yang/highlights.scm)0
-rw-r--r--runtime/queries/yang/indents.scm (renamed from queries/yang/indents.scm)0
-rw-r--r--runtime/queries/yang/injections.scm (renamed from queries/yang/injections.scm)0
-rw-r--r--runtime/queries/yuck/folds.scm (renamed from queries/yuck/folds.scm)0
-rw-r--r--runtime/queries/yuck/highlights.scm (renamed from queries/yuck/highlights.scm)0
-rw-r--r--runtime/queries/yuck/indents.scm (renamed from queries/yuck/indents.scm)0
-rw-r--r--runtime/queries/yuck/injections.scm (renamed from queries/yuck/injections.scm)0
-rw-r--r--runtime/queries/yuck/locals.scm (renamed from queries/yuck/locals.scm)0
-rw-r--r--runtime/queries/zathurarc/highlights.scm (renamed from queries/zathurarc/highlights.scm)0
-rw-r--r--runtime/queries/zathurarc/injections.scm (renamed from queries/zathurarc/injections.scm)0
-rw-r--r--runtime/queries/zig/folds.scm (renamed from queries/zig/folds.scm)0
-rw-r--r--runtime/queries/zig/highlights.scm (renamed from queries/zig/highlights.scm)0
-rw-r--r--runtime/queries/zig/indents.scm (renamed from queries/zig/indents.scm)0
-rw-r--r--runtime/queries/zig/injections.scm (renamed from queries/zig/injections.scm)0
-rw-r--r--runtime/queries/zig/locals.scm (renamed from queries/zig/locals.scm)0
-rw-r--r--runtime/queries/ziggy/highlights.scm (renamed from queries/ziggy/highlights.scm)0
-rw-r--r--runtime/queries/ziggy/indents.scm (renamed from queries/ziggy/indents.scm)0
-rw-r--r--runtime/queries/ziggy_schema/highlights.scm (renamed from queries/ziggy_schema/highlights.scm)0
-rw-r--r--runtime/queries/ziggy_schema/indents.scm (renamed from queries/ziggy_schema/indents.scm)0
-rwxr-xr-xscripts/check-queries.lua80
-rwxr-xr-xscripts/ci-install.sh4
-rwxr-xr-xscripts/format-queries.lua76
-rw-r--r--scripts/minimal_init.lua36
-rwxr-xr-xscripts/update-lockfile.sh16
-rwxr-xr-xscripts/update-readme.lua90
-rwxr-xr-xscripts/write-lockfile.lua56
-rw-r--r--tests/indent/algorithm_spec.lua32
-rw-r--r--tests/indent/angular_spec.lua38
-rw-r--r--tests/indent/c_spec.lua97
-rw-r--r--tests/indent/capnp_spec.lua28
-rw-r--r--tests/indent/common.lua79
-rw-r--r--tests/indent/cpp_spec.lua69
-rw-r--r--tests/indent/css_spec.lua18
-rw-r--r--tests/indent/dart_spec.lua59
-rw-r--r--tests/indent/dot_spec.lua24
-rw-r--r--tests/indent/gdscript_spec.lua14
-rw-r--r--tests/indent/gleam_spec.lua210
-rw-r--r--tests/indent/go_spec.lua20
-rw-r--r--tests/indent/graphql_spec.lua12
-rw-r--r--tests/indent/html_spec.lua38
-rw-r--r--tests/indent/java_spec.lua52
-rw-r--r--tests/indent/javascript_spec.lua126
-rw-r--r--tests/indent/jsx_spec.lua38
-rw-r--r--tests/indent/julia_spec.lua10
-rw-r--r--tests/indent/lua_spec.lua70
-rw-r--r--tests/indent/meson_spec.lua30
-rw-r--r--tests/indent/nickel_spec.lua28
-rw-r--r--tests/indent/nix_spec.lua24
-rw-r--r--tests/indent/nu_spec.lua10
-rw-r--r--tests/indent/php_spec.lua121
-rw-r--r--tests/indent/python_spec.lua160
-rw-r--r--tests/indent/ql_spec.lua18
-rw-r--r--tests/indent/query_spec.lua36
-rw-r--r--tests/indent/r_spec.lua48
-rw-r--r--tests/indent/rescript_spec.lua40
-rw-r--r--tests/indent/ruby_spec.lua24
-rw-r--r--tests/indent/rust_spec.lua110
-rw-r--r--tests/indent/smali_spec.lua29
-rw-r--r--tests/indent/sql_spec.lua12
-rw-r--r--tests/indent/sway_spec.lua20
-rw-r--r--tests/indent/swift_spec.lua39
-rw-r--r--tests/indent/t32_spec.lua144
-rw-r--r--tests/indent/terraform_spec.lua65
-rw-r--r--tests/indent/tiger_spec.lua272
-rw-r--r--tests/indent/usd_spec.lua16
-rw-r--r--tests/indent/vue_spec.lua23
-rw-r--r--tests/indent/wgsl_spec.lua36
-rw-r--r--tests/indent/yaml_spec.lua16
-rw-r--r--tests/indent/yang_spec.lua20
-rw-r--r--tests/indent/yuck_spec.lua16
-rw-r--r--tests/indent/zig_spec.lua16
-rw-r--r--tests/query/highlights/lua/test.lua4
-rw-r--r--tests/query/highlights_spec.lua47
-rw-r--r--tests/query/injection_spec.lua38
-rw-r--r--tests/unit/ts_utils_spec.lua114
1247 files changed, 5522 insertions, 8500 deletions
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index cd0e51982..e51833814 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -3,7 +3,7 @@ name: Linting and style checking
on:
pull_request:
branches:
- - "master"
+ - "main"
jobs:
luacheck:
@@ -37,7 +37,7 @@ jobs:
name: Lint queries
runs-on: ubuntu-latest
env:
- NVIM_TAG: stable
+ NVIM_TAG: nightly
steps:
- uses: actions/checkout@v4
- name: Prepare
diff --git a/.github/workflows/test-queries.yml b/.github/workflows/test-queries.yml
index 8fe1f082a..5e9be1e38 100644
--- a/.github/workflows/test-queries.yml
+++ b/.github/workflows/test-queries.yml
@@ -85,4 +85,4 @@ jobs:
run: cp -r ~/AppData/Local/nvim/pack/nvim-treesitter/start/nvim-treesitter/parser/* parser
- name: Check query files
- run: $NVIM -l scripts/check-queries.lua
+ run: $NVIM -l ./scripts/check-queries.lua
diff --git a/.stylua.toml b/.stylua.toml
index ecb6dca5a..a2b344750 100644
--- a/.stylua.toml
+++ b/.stylua.toml
@@ -1,6 +1,6 @@
-column_width = 120
+column_width = 100
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
-quote_style = "AutoPreferDouble"
-call_parentheses = "None"
+quote_style = "AutoPreferSingle"
+call_parentheses = "Always"
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 23321f0f7..473a26cb5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -5,10 +5,7 @@ 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
[Matrix channel], so we can help you with any question you might have!
-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
+The main goal of `nvim-treesitter` is to provide a framework to easily install parsers and queries.
Depending on which part of the plugin you want to contribute to, please read the appropriate section.
@@ -25,25 +22,9 @@ 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
-on the "Neovim tree-sitter" [Matrix channel].
-
## Parser configurations
-Contributing to parser configurations is basically modifying one of the `queries/*/*.scm`.
+Contributing to parser configurations is basically modifying one of the `runtime/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).
@@ -60,13 +41,11 @@ For these types there is a _norm_ you will have to follow so that features work
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://github.com/nvim-treesitter/nvim-treesitter#supported-languages),
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/)
+- Examples of queries can be found in [runtime/queries/](runtime/queries/)
- Matches in the bottom will override queries that are above of them.
#### Inheriting languages
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 338c75463..000000000
--- a/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-# https://github.com/luarocks/luarocks/wiki/Creating-a-Makefile-that-plays-nice-with-LuaRocks
-build:
- echo "Do nothing"
-
-install:
- mkdir -p $(INST_LUADIR)
- cp -r lua/* $(INST_LUADIR)
diff --git a/README.md b/README.md
index 2cb5f033b..715ec50ed 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
+<h1 align="center">
+ <img src="https://github.com/nvim-treesitter/nvim-treesitter/assets/2361214/0513b223-c902-4f12-92ee-8ac4d8d6f41f" alt="nvim-treesitter">
+</h1>
<div align="center">
- <h1>nvim-treesitter</h1>
<p>
<a href="https://matrix.to/#/#nvim-treesitter:matrix.org">
<img alt="Matrix Chat" src="https://img.shields.io/matrix/nvim-treesitter:matrix.org" />
@@ -13,608 +15,111 @@
</p>
</div>
-<div align="center">
- <p>
- <img src="assets/logo.png" align="center" alt="Logo" />
- </p>
- <p>
- <a href="https://github.com/tree-sitter/tree-sitter">Treesitter</a>
- configurations and abstraction layer for
- <a href="https://github.com/neovim/neovim/">Neovim</a>.
- </p>
- <p>
- <i>
- Logo by <a href="https://github.com/steelsojka">@steelsojka</a>
- </i>
- </p>
-</div>
-
-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:
-
-![example-cpp](https://user-images.githubusercontent.com/2361214/202753610-e923bf4e-e88f-494b-bb1e-d22a7688446f.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/issues/4767).
-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
+# WARNING
-- [Quickstart](#quickstart)
-- [Supported languages](#supported-languages)
-- [Available modules](#available-modules)
-- [Advanced setup](#advanced-setup)
-- [Extra features](#extra-features)
-- [Troubleshooting](#troubleshooting)
+**This branch is a [full, incompatible, rewrite of `nvim-treesitter`](https://github.com/nvim-treesitter/nvim-treesitter/issues/4767) and [work in progress](TODO.md). This branch REQUIRES (the latest commit on) Neovim `master`.**
----
+The `nvim-treesitter` plugin provides
+1. functions for installing, updating, and removing [**tree-sitter parsers**](SUPPORTED_LANGUAGES.md);
+2. a collection of **queries** for enabling tree-sitter features built into Neovim for these languages.
# Quickstart
## Requirements
-- **Neovim 0.10** or later ([nightly](https://github.com/neovim/neovim#install-from-source) recommended)
+- Neovim 0.10.0 or later (nightly)
- `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)).
+- a C compiler in your path and libstdc++ installed ([Windows users please read this!](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Windows-support))
+- optional: `tree-sitter` CLI and `node`
## 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:
+It is strongly recommended to automate this; e.g., using [lazy.nvim](https://github.com/folke/lazy.nvim)
-```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 <language_to_install>
+```lua
+require('lazy').setup(
+ { 'nvim-treesitter/nvim-treesitter', build = ':TSUpdate', lazy = false }
+)
```
-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`.
+**NOTE: This plugin does not support lazy-loading.**
-## Modules
+## Setup
-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 `:h lua-heredoc`.
-All modules are disabled by default and need to be activated explicitly in your `init.lua`, e.g., via
+`nvim-treesitter` can be configured by calling `setup`. The following snippet lists the available options and their default values. **You do not need to call `setup` for `nvim-treesitter` to work using default values.**
```lua
-require'nvim-treesitter.configs'.setup {
- -- A list of parser names, or "all" (the listed parsers MUST always be installed)
- ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "markdown", "markdown_inline" },
+require'nvim-treesitter'.setup {
+ -- A list of parser names or tiers ('core', 'stable', 'community', 'unstable')
+ ensure_install = { },
+
+ -- List of parsers to ignore installing
+ ignore_install = { },
- -- Install parsers synchronously (only applied to `ensure_installed`)
+ -- Install parsers synchronously (only applied to `ensure_install`)
sync_install = false,
-- Automatically install missing parsers when entering buffer
- -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
- auto_install = true,
-
- -- List of parsers to ignore installing (or "all")
- ignore_install = { "javascript" },
-
- ---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
- -- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!
+ auto_install = false,
- highlight = {
- 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" },
- -- Or use a function for more flexibility, e.g. to disable slow treesitter highlight for large files
- disable = function(lang, buf)
- local max_filesize = 100 * 1024 -- 100 KB
- local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
- if ok and stats and stats.size > max_filesize then
- return true
- end
- end,
-
- -- 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,
- },
+ -- Directory to install parsers and queries to
+ install_dir = vim.fn.stdpath('data') .. '/site'
}
```
-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.
+A list of the currently supported languages can be found [on this page](SUPPORTED_LANGUAGES.md).
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.
-<!--This section of the README is automatically updated by a CI job-->
-<!--parserinfo-->
-- [x] [ada](https://github.com/briot/tree-sitter-ada) (maintained by @briot)
-- [x] [agda](https://github.com/tree-sitter/tree-sitter-agda) (maintained by @Decodetalkers)
-- [x] [angular](https://github.com/dlvandenberg/tree-sitter-angular) (experimental, maintained by @dlvandenberg)
-- [x] [apex](https://github.com/aheber/tree-sitter-sfapex) (maintained by @aheber, @xixiaofinland)
-- [x] [arduino](https://github.com/ObserverOfTime/tree-sitter-arduino) (maintained by @ObserverOfTime)
-- [x] [asm](https://github.com/RubixDev/tree-sitter-asm) (maintained by @RubixDev)
-- [x] [astro](https://github.com/virchau13/tree-sitter-astro) (maintained by @virchau13)
-- [x] [authzed](https://github.com/mleonidas/tree-sitter-authzed) (maintained by @mattpolzin)
-- [ ] [awk](https://github.com/Beaglefoot/tree-sitter-awk)
-- [x] [bash](https://github.com/tree-sitter/tree-sitter-bash) (maintained by @TravonteD)
-- [x] [bass](https://github.com/vito/tree-sitter-bass) (maintained by @amaanq)
-- [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] [bicep](https://github.com/amaanq/tree-sitter-bicep) (maintained by @amaanq)
-- [x] [bitbake](https://github.com/amaanq/tree-sitter-bitbake) (maintained by @amaanq)
-- [x] [blade](https://github.com/EmranMR/tree-sitter-blade) (maintained by @calebdw)
-- [x] [blueprint](https://gitlab.com/gabmus/tree-sitter-blueprint.git) (experimental, maintained by @gabmus)
-- [x] [bp](https://github.com/ambroisie/tree-sitter-bp) (maintained by @ambroisie)
-- [x] [brightscript](https://github.com/ajdelcimmuto/tree-sitter-brightscript) (maintained by @ajdelcimmuto)
-- [x] [c](https://github.com/tree-sitter/tree-sitter-c) (maintained by @amaanq)
-- [x] [c_sharp](https://github.com/tree-sitter/tree-sitter-c-sharp) (maintained by @amaanq)
-- [x] [caddy](https://github.com/opa-oz/tree-sitter-caddy) (maintained by @opa-oz)
-- [x] [cairo](https://github.com/amaanq/tree-sitter-cairo) (maintained by @amaanq)
-- [x] [capnp](https://github.com/amaanq/tree-sitter-capnp) (maintained by @amaanq)
-- [x] [chatito](https://github.com/ObserverOfTime/tree-sitter-chatito) (maintained by @ObserverOfTime)
-- [x] [circom](https://github.com/Decurity/tree-sitter-circom) (maintained by @alexandr-martirosyan)
-- [x] [clojure](https://github.com/sogaiu/tree-sitter-clojure) (maintained by @NoahTheDuke)
-- [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] [corn](https://github.com/jakestanger/tree-sitter-corn) (maintained by @jakestanger)
-- [x] [cpon](https://github.com/amaanq/tree-sitter-cpon) (maintained by @amaanq)
-- [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] [csv](https://github.com/amaanq/tree-sitter-csv) (maintained by @amaanq)
-- [x] [cuda](https://github.com/theHamsta/tree-sitter-cuda) (maintained by @theHamsta)
-- [x] [cue](https://github.com/eonpatapon/tree-sitter-cue) (maintained by @amaanq)
-- [x] [cylc](https://github.com/elliotfontaine/tree-sitter-cylc) (maintained by @elliotfontaine)
-- [x] [d](https://github.com/gdamore/tree-sitter-d) (maintained by @amaanq)
-- [x] [dart](https://github.com/UserNobody14/tree-sitter-dart) (maintained by @akinsho)
-- [x] [desktop](https://github.com/ValdezFOmar/tree-sitter-desktop) (maintained by @ValdezFOmar)
-- [x] [devicetree](https://github.com/joelspadin/tree-sitter-devicetree) (maintained by @jedrzejboczar)
-- [x] [dhall](https://github.com/jbellerb/tree-sitter-dhall) (maintained by @amaanq)
-- [x] [diff](https://github.com/the-mikedavis/tree-sitter-diff) (maintained by @gbprod)
-- [x] [disassembly](https://github.com/ColinKennedy/tree-sitter-disassembly) (maintained by @ColinKennedy)
-- [x] [djot](https://github.com/treeman/tree-sitter-djot) (maintained by @NoahTheDuke)
-- [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] [doxygen](https://github.com/amaanq/tree-sitter-doxygen) (maintained by @amaanq)
-- [x] [dtd](https://github.com/tree-sitter-grammars/tree-sitter-xml) (maintained by @ObserverOfTime)
-- [x] [earthfile](https://github.com/glehmann/tree-sitter-earthfile) (maintained by @glehmann)
-- [x] [ebnf](https://github.com/RubixDev/ebnf) (experimental, maintained by @RubixDev)
-- [x] [editorconfig](https://github.com/ValdezFOmar/tree-sitter-editorconfig) (maintained by @ValdezFOmar)
-- [x] [eds](https://github.com/uyha/tree-sitter-eds) (maintained by @uyha)
-- [x] [eex](https://github.com/connorlay/tree-sitter-eex) (maintained by @connorlay)
-- [x] [elixir](https://github.com/elixir-lang/tree-sitter-elixir) (maintained by @connorlay)
-- [x] [elm](https://github.com/elm-tooling/tree-sitter-elm) (maintained by @zweimach)
-- [x] [elsa](https://github.com/glapa-grossklag/tree-sitter-elsa) (maintained by @glapa-grossklag, @amaanq)
-- [x] [elvish](https://github.com/elves/tree-sitter-elvish) (maintained by @elves)
-- [ ] [embedded_template](https://github.com/tree-sitter/tree-sitter-embedded-template)
-- [x] [enforce](https://github.com/simonvic/tree-sitter-enforce) (maintained by @simonvic)
-- [x] [erlang](https://github.com/WhatsApp/tree-sitter-erlang) (maintained by @filmor)
-- [x] [facility](https://github.com/FacilityApi/tree-sitter-facility) (maintained by @bryankenote)
-- [x] [faust](https://github.com/khiner/tree-sitter-faust) (maintained by @khiner)
-- [x] [fennel](https://github.com/alexmozaidze/tree-sitter-fennel) (maintained by @alexmozaidze)
-- [x] [fidl](https://github.com/google/tree-sitter-fidl) (maintained by @chaopeng)
-- [x] [firrtl](https://github.com/amaanq/tree-sitter-firrtl) (maintained by @amaanq)
-- [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)
-- [x] [forth](https://github.com/AlexanderBrevig/tree-sitter-forth) (maintained by @amaanq)
-- [x] [fortran](https://github.com/stadelmanma/tree-sitter-fortran) (maintained by @amaanq)
-- [x] [fsh](https://github.com/mgramigna/tree-sitter-fsh) (maintained by @mgramigna)
-- [x] [fsharp](https://github.com/ionide/tree-sitter-fsharp) (maintained by @nsidorenco)
-- [x] [func](https://github.com/amaanq/tree-sitter-func) (maintained by @amaanq)
-- [x] [fusion](https://gitlab.com/jirgn/tree-sitter-fusion.git) (maintained by @jirgn)
-- [x] [GAP system](https://github.com/gap-system/tree-sitter-gap) (maintained by @reiniscirpons)
-- [x] [GAP system test files](https://github.com/gap-system/tree-sitter-gaptst) (maintained by @reiniscirpons)
-- [x] [Godot (gdscript)](https://github.com/PrestonKnopp/tree-sitter-gdscript) (maintained by @PrestonKnopp)
-- [x] [gdshader](https://github.com/GodOfAvacyn/tree-sitter-gdshader) (maintained by @godofavacyn)
-- [x] [git_config](https://github.com/the-mikedavis/tree-sitter-git-config) (maintained by @amaanq)
-- [x] [git_rebase](https://github.com/the-mikedavis/tree-sitter-git-rebase) (maintained by @gbprod)
-- [x] [gitattributes](https://github.com/ObserverOfTime/tree-sitter-gitattributes) (maintained by @ObserverOfTime)
-- [x] [gitcommit](https://github.com/gbprod/tree-sitter-gitcommit) (maintained by @gbprod)
-- [x] [gitignore](https://github.com/shunsambongi/tree-sitter-gitignore) (maintained by @theHamsta)
-- [x] [gleam](https://github.com/gleam-lang/tree-sitter-gleam) (maintained by @amaanq)
-- [x] [Glimmer and Ember](https://github.com/ember-tooling/tree-sitter-glimmer) (maintained by @NullVoxPopuli)
-- [x] [glimmer_javascript](https://github.com/NullVoxPopuli/tree-sitter-glimmer-javascript) (maintained by @NullVoxPopuli)
-- [x] [glimmer_typescript](https://github.com/NullVoxPopuli/tree-sitter-glimmer-typescript) (maintained by @NullVoxPopuli)
-- [x] [glsl](https://github.com/theHamsta/tree-sitter-glsl) (maintained by @theHamsta)
-- [x] [GN (Generate Ninja)](https://github.com/amaanq/tree-sitter-gn) (maintained by @amaanq)
-- [x] [gnuplot](https://github.com/dpezto/tree-sitter-gnuplot) (maintained by @dpezto)
-- [x] [go](https://github.com/tree-sitter/tree-sitter-go) (maintained by @theHamsta, @WinWisely268)
-- [x] [goctl](https://github.com/chaozwn/tree-sitter-goctl) (maintained by @chaozwn)
-- [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] [gosum](https://github.com/amaanq/tree-sitter-go-sum) (maintained by @amaanq)
-- [x] [gotmpl](https://github.com/ngalaiko/tree-sitter-go-template) (maintained by @qvalentin)
-- [x] [gowork](https://github.com/omertuc/tree-sitter-go-work) (maintained by @omertuc)
-- [x] [gpg](https://github.com/ObserverOfTime/tree-sitter-gpg-config) (maintained by @ObserverOfTime)
-- [x] [graphql](https://github.com/bkegley/tree-sitter-graphql) (maintained by @bkegley)
-- [x] [gren](https://github.com/MaeBrooks/tree-sitter-gren) (maintained by @MaeBrooks)
-- [x] [groovy](https://github.com/murtaza64/tree-sitter-groovy) (maintained by @murtaza64)
-- [x] [gstlaunch](https://github.com/theHamsta/tree-sitter-gstlaunch) (maintained by @theHamsta)
-- [ ] [hack](https://github.com/slackhq/tree-sitter-hack)
-- [x] [hare](https://github.com/amaanq/tree-sitter-hare) (maintained by @amaanq)
-- [x] [haskell](https://github.com/tree-sitter/tree-sitter-haskell) (maintained by @mrcjkb)
-- [x] [haskell_persistent](https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent) (maintained by @lykahb)
-- [x] [hcl](https://github.com/MichaHoffmann/tree-sitter-hcl) (maintained by @MichaHoffmann)
-- [x] [heex](https://github.com/connorlay/tree-sitter-heex) (maintained by @connorlay)
-- [x] [helm](https://github.com/ngalaiko/tree-sitter-go-template) (maintained by @qvalentin)
-- [x] [hjson](https://github.com/winston0410/tree-sitter-hjson) (maintained by @winston0410)
-- [x] [hlsl](https://github.com/theHamsta/tree-sitter-hlsl) (maintained by @theHamsta)
-- [x] [hlsplaylist](https://github.com/Freed-Wu/tree-sitter-hlsplaylist) (maintained by @Freed-Wu)
-- [x] [hocon](https://github.com/antosha417/tree-sitter-hocon) (maintained by @antosha417)
-- [x] [hoon](https://github.com/urbit-pilled/tree-sitter-hoon) (experimental, maintained by @urbit-pilled)
-- [x] [html](https://github.com/tree-sitter/tree-sitter-html) (maintained by @TravonteD)
-- [x] [htmldjango](https://github.com/interdependence/tree-sitter-htmldjango) (experimental, maintained by @ObserverOfTime)
-- [x] [http](https://github.com/rest-nvim/tree-sitter-http) (maintained by @amaanq, @NTBBloodbath)
-- [x] [hurl](https://github.com/pfeiferj/tree-sitter-hurl) (maintained by @pfeiferj)
-- [x] [hyprlang](https://github.com/luckasRanarison/tree-sitter-hyprlang) (maintained by @luckasRanarison)
-- [x] [idl](https://github.com/cathaysia/tree-sitter-idl) (maintained by @cathaysia)
-- [x] [idris](https://github.com/kayhide/tree-sitter-idris) (maintained by @srghma)
-- [x] [ini](https://github.com/justinmk/tree-sitter-ini) (experimental, maintained by @theHamsta)
-- [x] [inko](https://github.com/inko-lang/tree-sitter-inko) (maintained by @yorickpeterse)
-- [x] [ipkg](https://github.com/srghma/tree-sitter-ipkg) (maintained by @srghma)
-- [x] [ispc](https://github.com/fab4100/tree-sitter-ispc) (maintained by @fab4100)
-- [x] [janet_simple](https://github.com/sogaiu/tree-sitter-janet-simple) (maintained by @sogaiu)
-- [x] [java](https://github.com/tree-sitter/tree-sitter-java) (maintained by @p00f)
-- [x] [javadoc](https://github.com/rmuir/tree-sitter-javadoc) (maintained by @rmuir)
-- [x] [javascript](https://github.com/tree-sitter/tree-sitter-javascript) (maintained by @steelsojka)
-- [x] [jinja](https://github.com/cathaysia/tree-sitter-jinja) (maintained by @cathaysia)
-- [x] [jinja_inline](https://github.com/cathaysia/tree-sitter-jinja) (maintained by @cathaysia)
-- [x] [jq](https://github.com/flurie/tree-sitter-jq) (maintained by @ObserverOfTime)
-- [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] [jsonnet](https://github.com/sourcegraph/tree-sitter-jsonnet) (maintained by @nawordar)
-- [x] [julia](https://github.com/tree-sitter/tree-sitter-julia) (maintained by @fredrikekre)
-- [x] [just](https://github.com/IndianBoy42/tree-sitter-just) (maintained by @Hubro)
-- [x] [kcl](https://github.com/kcl-lang/tree-sitter-kcl) (maintained by @bertbaron)
-- [x] [kconfig](https://github.com/amaanq/tree-sitter-kconfig) (maintained by @amaanq)
-- [x] [kdl](https://github.com/amaanq/tree-sitter-kdl) (maintained by @amaanq)
-- [x] [kotlin](https://github.com/fwcd/tree-sitter-kotlin) (maintained by @SalBakraa)
-- [x] [koto](https://github.com/koto-lang/tree-sitter-koto) (maintained by @irh)
-- [x] [kusto](https://github.com/Willem-J-an/tree-sitter-kusto) (maintained by @Willem-J-an)
-- [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] [leo](https://github.com/r001/tree-sitter-leo) (maintained by @r001)
-- [x] [linkerscript](https://github.com/amaanq/tree-sitter-linkerscript) (maintained by @amaanq)
-- [x] [liquid](https://github.com/hankthetank27/tree-sitter-liquid) (maintained by @hankthetank27)
-- [x] [liquidsoap](https://github.com/savonet/tree-sitter-liquidsoap) (maintained by @toots)
-- [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] [luadoc](https://github.com/amaanq/tree-sitter-luadoc) (maintained by @amaanq)
-- [x] [lua patterns](https://github.com/amaanq/tree-sitter-luap) (maintained by @amaanq)
-- [x] [luau](https://github.com/amaanq/tree-sitter-luau) (maintained by @amaanq)
-- [x] [m68k](https://github.com/grahambates/tree-sitter-m68k) (maintained by @grahambates)
-- [x] [make](https://github.com/alemuller/tree-sitter-make) (maintained by @lewis6991)
-- [x] [markdown (basic highlighting)](https://github.com/MDeiml/tree-sitter-markdown) (experimental, maintained by @MDeiml)
-- [x] [markdown_inline (needed for full highlighting)](https://github.com/MDeiml/tree-sitter-markdown) (experimental, maintained by @MDeiml)
-- [x] [matlab](https://github.com/acristoffers/tree-sitter-matlab) (maintained by @acristoffers)
-- [x] [menhir](https://github.com/Kerl13/tree-sitter-menhir) (maintained by @Kerl13)
-- [ ] [mermaid](https://github.com/monaqa/tree-sitter-mermaid) (experimental)
-- [x] [meson](https://github.com/Decodetalkers/tree-sitter-meson) (maintained by @Decodetalkers)
-- [x] [mlir](https://github.com/artagnon/tree-sitter-mlir) (experimental, maintained by @artagnon)
-- [x] [muttrc](https://github.com/neomutt/tree-sitter-muttrc) (maintained by @Freed-Wu)
-- [x] [nasm](https://github.com/naclsn/tree-sitter-nasm) (maintained by @ObserverOfTime)
-- [x] [nginx](https://github.com/opa-oz/tree-sitter-nginx) (maintained by @opa-oz)
-- [ ] [nickel](https://github.com/nickel-lang/tree-sitter-nickel)
-- [x] [nim](https://github.com/alaviss/tree-sitter-nim) (maintained by @aMOPel)
-- [x] [nim_format_string](https://github.com/aMOPel/tree-sitter-nim-format-string) (maintained by @aMOPel)
-- [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)
-- [x] [nqc](https://github.com/amaanq/tree-sitter-nqc) (maintained by @amaanq)
-- [x] [nu](https://github.com/nushell/tree-sitter-nu) (maintained by @abhisheksingh0x558)
-- [x] [objc](https://github.com/amaanq/tree-sitter-objc) (maintained by @amaanq)
-- [x] [objdump](https://github.com/ColinKennedy/tree-sitter-objdump) (maintained by @ColinKennedy)
-- [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] [odin](https://github.com/amaanq/tree-sitter-odin) (maintained by @amaanq)
-- [x] [pascal](https://github.com/Isopod/tree-sitter-pascal) (maintained by @Isopod)
-- [x] [passwd](https://github.com/ath3/tree-sitter-passwd) (maintained by @amaanq)
-- [x] [pem](https://github.com/ObserverOfTime/tree-sitter-pem) (maintained by @ObserverOfTime)
-- [x] [perl](https://github.com/tree-sitter-perl/tree-sitter-perl) (maintained by @RabbiVeesh, @LeoNerd)
-- [x] [php](https://github.com/tree-sitter/tree-sitter-php) (maintained by @tk-shirasaka, @calebdw)
-- [x] [php_only](https://github.com/tree-sitter/tree-sitter-php) (maintained by @tk-shirasaka, @calebdw)
-- [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] [po](https://github.com/erasin/tree-sitter-po) (maintained by @amaanq)
-- [x] [pod](https://github.com/tree-sitter-perl/tree-sitter-pod) (maintained by @RabbiVeesh, @LeoNerd)
-- [x] [Path of Exile item filter](https://github.com/ObserverOfTime/tree-sitter-poe-filter) (experimental, maintained by @ObserverOfTime)
-- [x] [pony](https://github.com/amaanq/tree-sitter-pony) (maintained by @amaanq, @mfelsche)
-- [x] [powershell](https://github.com/airbus-cert/tree-sitter-powershell) (maintained by @L2jLiga)
-- [x] [printf](https://github.com/ObserverOfTime/tree-sitter-printf) (maintained by @ObserverOfTime)
-- [x] [prisma](https://github.com/victorhqc/tree-sitter-prisma) (maintained by @elianiva)
-- [x] [problog](https://github.com/foxyseta/tree-sitter-prolog) (maintained by @foxyseta)
-- [x] [prolog](https://github.com/foxyseta/tree-sitter-prolog) (maintained by @foxyseta)
-- [x] [promql](https://github.com/MichaHoffmann/tree-sitter-promql) (maintained by @MichaHoffmann)
-- [x] [properties](https://github.com/tree-sitter-grammars/tree-sitter-properties) (maintained by @ObserverOfTime)
-- [x] [proto](https://github.com/treywood/tree-sitter-proto) (maintained by @treywood)
-- [x] [prql](https://github.com/PRQL/tree-sitter-prql) (maintained by @matthias-Q)
-- [x] [psv](https://github.com/amaanq/tree-sitter-csv) (maintained by @amaanq)
-- [x] [pug](https://github.com/zealot128/tree-sitter-pug) (experimental, maintained by @zealot128)
-- [x] [puppet](https://github.com/amaanq/tree-sitter-puppet) (maintained by @amaanq)
-- [x] [purescript](https://github.com/postsolar/tree-sitter-purescript) (maintained by @postsolar)
-- [x] [PyPA manifest](https://github.com/ObserverOfTime/tree-sitter-pymanifest) (maintained by @ObserverOfTime)
-- [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] [qmldir](https://github.com/Decodetalkers/tree-sitter-qmldir) (maintained by @amaanq)
-- [x] [qmljs](https://github.com/yuja/tree-sitter-qmljs) (maintained by @Decodetalkers)
-- [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 @ribru17)
-- [ ] [racket](https://github.com/6cdh/tree-sitter-racket)
-- [x] [ralph](https://github.com/alephium/tree-sitter-ralph) (maintained by @tdroxler)
-- [x] [rasi](https://github.com/Fymyte/tree-sitter-rasi) (maintained by @Fymyte)
-- [x] [razor](https://github.com/tris203/tree-sitter-razor) (maintained by @tris203)
-- [x] [rbs](https://github.com/joker1007/tree-sitter-rbs) (maintained by @joker1007)
-- [x] [re2c](https://github.com/amaanq/tree-sitter-re2c) (maintained by @amaanq)
-- [x] [readline](https://github.com/ribru17/tree-sitter-readline) (maintained by @ribru17)
-- [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] [pip requirements](https://github.com/ObserverOfTime/tree-sitter-requirements) (maintained by @ObserverOfTime)
-- [x] [rescript](https://github.com/rescript-lang/tree-sitter-rescript) (maintained by @ribru17)
-- [x] [rnoweb](https://github.com/bamonroe/tree-sitter-rnoweb) (maintained by @bamonroe)
-- [x] [robot](https://github.com/Hubro/tree-sitter-robot) (maintained by @Hubro)
-- [x] [robots](https://github.com/opa-oz/tree-sitter-robots-txt) (maintained by @opa-oz)
-- [x] [roc](https://github.com/faldor20/tree-sitter-roc) (maintained by @nat-418)
-- [x] [ron](https://github.com/amaanq/tree-sitter-ron) (maintained by @amaanq)
-- [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] [runescript](https://github.com/2004Scape/tree-sitter-runescript) (maintained by @2004Scape)
-- [x] [rust](https://github.com/tree-sitter/tree-sitter-rust) (maintained by @amaanq)
-- [x] [scala](https://github.com/tree-sitter/tree-sitter-scala) (maintained by @stevanmilic)
-- [x] [scfg](https://github.com/rockorager/tree-sitter-scfg) (maintained by @WhyNotHugo)
-- [ ] [scheme](https://github.com/6cdh/tree-sitter-scheme)
-- [x] [scss](https://github.com/serenadeai/tree-sitter-scss) (maintained by @elianiva)
-- [x] [sflog](https://github.com/aheber/tree-sitter-sfapex) (maintained by @aheber, @xixiaofinland)
-- [x] [slang](https://github.com/theHamsta/tree-sitter-slang) (experimental, maintained by @theHamsta)
-- [x] [slim](https://github.com/theoo/tree-sitter-slim) (maintained by @theoo)
-- [x] [slint](https://github.com/slint-ui/tree-sitter-slint) (maintained by @hunger)
-- [x] [smali](https://github.com/tree-sitter-grammars/tree-sitter-smali) (maintained by @amaanq)
-- [x] [smithy](https://github.com/indoorvivants/tree-sitter-smithy) (maintained by @amaanq, @keynmol)
-- [ ] [snakemake](https://github.com/osthomas/tree-sitter-snakemake) (experimental)
-- [x] [solidity](https://github.com/JoranHonig/tree-sitter-solidity) (maintained by @amaanq)
-- [x] [soql](https://github.com/aheber/tree-sitter-sfapex) (maintained by @aheber, @xixiaofinland)
-- [x] [sosl](https://github.com/aheber/tree-sitter-sfapex) (maintained by @aheber, @xixiaofinland)
-- [x] [sourcepawn](https://github.com/nilshelmig/tree-sitter-sourcepawn) (maintained by @Sarrus1)
-- [x] [sparql](https://github.com/GordianDziwis/tree-sitter-sparql) (maintained by @GordianDziwis)
-- [x] [sql](https://github.com/derekstride/tree-sitter-sql) (maintained by @derekstride)
-- [x] [squirrel](https://github.com/amaanq/tree-sitter-squirrel) (maintained by @amaanq)
-- [x] [ssh_config](https://github.com/ObserverOfTime/tree-sitter-ssh-config) (maintained by @ObserverOfTime)
-- [x] [starlark](https://github.com/amaanq/tree-sitter-starlark) (maintained by @amaanq)
-- [x] [strace](https://github.com/sigmaSd/tree-sitter-strace) (maintained by @amaanq)
-- [x] [styled](https://github.com/mskelton/tree-sitter-styled) (maintained by @mskelton)
-- [x] [supercollider](https://github.com/madskjeldgaard/tree-sitter-supercollider) (maintained by @madskjeldgaard)
-- [x] [superhtml](https://github.com/kristoff-it/superhtml) (maintained by @rockorager)
-- [x] [surface](https://github.com/connorlay/tree-sitter-surface) (maintained by @connorlay)
-- [x] [svelte](https://github.com/tree-sitter-grammars/tree-sitter-svelte) (maintained by @amaanq)
-- [x] [sway](https://github.com/FuelLabs/tree-sitter-sway.git) (maintained by @ribru17)
-- [x] [swift](https://github.com/alex-pinkus/tree-sitter-swift) (maintained by @alex-pinkus)
-- [x] [sxhkdrc](https://github.com/RaafatTurki/tree-sitter-sxhkdrc) (maintained by @RaafatTurki)
-- [x] [systemtap](https://github.com/ok-ryoko/tree-sitter-systemtap) (maintained by @ok-ryoko)
-- [x] [t32](https://gitlab.com/xasc/tree-sitter-t32.git) (maintained by @xasc)
-- [x] [tablegen](https://github.com/amaanq/tree-sitter-tablegen) (maintained by @amaanq)
-- [x] [tact](https://github.com/tact-lang/tree-sitter-tact) (maintained by @novusnota)
-- [x] [tcl](https://github.com/tree-sitter-grammars/tree-sitter-tcl) (maintained by @lewis6991)
-- [x] [teal](https://github.com/euclidianAce/tree-sitter-teal) (maintained by @euclidianAce)
-- [x] [templ](https://github.com/vrischmann/tree-sitter-templ) (maintained by @vrischmann)
-- [x] [tera](https://github.com/uncenter/tree-sitter-tera) (maintained by @uncenter)
-- [x] [terraform](https://github.com/MichaHoffmann/tree-sitter-hcl) (maintained by @MichaHoffmann)
-- [x] [textproto](https://github.com/PorterAtGoogle/tree-sitter-textproto) (maintained by @Porter)
-- [x] [thrift](https://github.com/duskmoon314/tree-sitter-thrift) (maintained by @amaanq, @duskmoon314)
-- [x] [tiger](https://github.com/ambroisie/tree-sitter-tiger) (maintained by @ambroisie)
-- [x] [tlaplus](https://github.com/tlaplus-community/tree-sitter-tlaplus) (maintained by @ahelwer, @susliko)
-- [x] [tmux](https://github.com/Freed-Wu/tree-sitter-tmux) (maintained by @Freed-Wu)
-- [x] [todotxt](https://github.com/arnarg/tree-sitter-todotxt) (experimental, maintained by @arnarg)
-- [x] [toml](https://github.com/tree-sitter-grammars/tree-sitter-toml) (maintained by @tk-shirasaka)
-- [x] [tsv](https://github.com/amaanq/tree-sitter-csv) (maintained by @amaanq)
-- [x] [tsx](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka)
-- [x] [turtle](https://github.com/GordianDziwis/tree-sitter-turtle) (maintained by @GordianDziwis)
-- [x] [twig](https://github.com/gbprod/tree-sitter-twig) (maintained by @gbprod)
-- [x] [typescript](https://github.com/tree-sitter/tree-sitter-typescript) (maintained by @steelsojka)
-- [x] [typespec](https://github.com/happenslol/tree-sitter-typespec) (maintained by @happenslol)
-- [x] [typoscript](https://github.com/Teddytrombone/tree-sitter-typoscript) (maintained by @Teddytrombone)
-- [x] [typst](https://github.com/uben0/tree-sitter-typst) (maintained by @uben0, @RaafatTurki)
-- [x] [udev](https://github.com/ObserverOfTime/tree-sitter-udev) (maintained by @ObserverOfTime)
-- [x] [ungrammar](https://github.com/Philipp-M/tree-sitter-ungrammar) (maintained by @Philipp-M, @amaanq)
-- [x] [unison](https://github.com/kylegoetz/tree-sitter-unison) (maintained by @tapegram)
-- [x] [usd](https://github.com/ColinKennedy/tree-sitter-usd) (maintained by @ColinKennedy)
-- [x] [uxn tal](https://github.com/amaanq/tree-sitter-uxntal) (maintained by @amaanq)
-- [x] [v](https://github.com/vlang/v-analyzer) (maintained by @kkharji, @amaanq)
-- [x] [vala](https://github.com/vala-lang/tree-sitter-vala) (maintained by @Prince781)
-- [x] [vento](https://github.com/ventojs/tree-sitter-vento) (maintained by @wrapperup, @oscarotero)
-- [x] [verilog](https://github.com/gmlarumbe/tree-sitter-systemverilog) (maintained by @zhangwwpeng)
-- [x] [vhdl](https://github.com/jpt13653903/tree-sitter-vhdl) (maintained by @jpt13653903)
-- [x] [vhs](https://github.com/charmbracelet/tree-sitter-vhs) (maintained by @caarlos0)
-- [x] [vim](https://github.com/neovim/tree-sitter-vim) (maintained by @clason)
-- [x] [vimdoc](https://github.com/neovim/tree-sitter-vimdoc) (maintained by @clason)
-- [x] [vrl](https://github.com/belltoy/tree-sitter-vrl) (maintained by @belltoy)
-- [x] [vue](https://github.com/tree-sitter-grammars/tree-sitter-vue) (maintained by @WhyNotHugo, @lucario387)
-- [x] [wgsl](https://github.com/szebniok/tree-sitter-wgsl) (maintained by @szebniok)
-- [x] [wgsl_bevy](https://github.com/theHamsta/tree-sitter-wgsl-bevy) (maintained by @theHamsta)
-- [x] [wing](https://github.com/winglang/tree-sitter-wing) (maintained by @gshpychka, @MarkMcCulloh)
-- [x] [wit](https://github.com/liamwh/tree-sitter-wit) (maintained by @liamwh)
-- [x] [xcompose](https://github.com/ObserverOfTime/tree-sitter-xcompose) (maintained by @ObserverOfTime)
-- [x] [xml](https://github.com/tree-sitter-grammars/tree-sitter-xml) (maintained by @ObserverOfTime)
-- [x] [xresources](https://github.com/ValdezFOmar/tree-sitter-xresources) (maintained by @ValdezFOmar)
-- [x] [yaml](https://github.com/tree-sitter-grammars/tree-sitter-yaml) (maintained by @amaanq)
-- [x] [yang](https://github.com/Hubro/tree-sitter-yang) (maintained by @Hubro)
-- [x] [yuck](https://github.com/Philipp-M/tree-sitter-yuck) (maintained by @Philipp-M, @amaanq)
-- [x] [zathurarc](https://github.com/Freed-Wu/tree-sitter-zathurarc) (maintained by @Freed-Wu)
-- [x] [zig](https://github.com/tree-sitter-grammars/tree-sitter-zig) (maintained by @amaanq)
-- [x] [ziggy](https://github.com/kristoff-it/ziggy) (maintained by @rockorager)
-- [x] [ziggy_schema](https://github.com/kristoff-it/ziggy) (maintained by @rockorager)
-<!--parserinfo-->
-
For related information on the supported languages, including related plugins, see [this wiki page](https://github.com/nvim-treesitter/nvim-treesitter/wiki/Supported-Languages-Information).
-# 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,
- },
-}
-```
-
-To customize the syntax highlighting of a capture, simply define or link a highlight group of the same name:
+# Supported features
-```lua
--- Highlight the @foo.bar capture group with the "Identifier" highlight group
-vim.api.nvim_set_hl(0, "@foo.bar", { link = "Identifier" })
-```
-
-For a language-specific highlight, append the name of the language:
-
-```lua
--- Highlight @foo.bar as "Identifier" only in Lua files
-vim.api.nvim_set_hl(0, "@foo.bar.lua", { link = "Identifier" })
-```
-
-See `:h treesitter-highlight-groups` for details.
-
-#### Incremental selection
-
-Incremental selection based on the named nodes from the grammar.
-
-```lua
-require'nvim-treesitter.configs'.setup {
- incremental_selection = {
- enable = true,
- keymaps = {
- init_selection = "gnn", -- set to `false` to disable one of the mappings
- node_incremental = "grn",
- scope_incremental = "grc",
- node_decremental = "grm",
- },
- },
-}
-```
+`nvim-treesitter` provides queries for the following features. **These are not automatically enabled.**
-#### Indentation
+## Highlighting
-Indentation based on treesitter for the `=` operator.
-**NOTE: This is an experimental feature**.
+Treesitter highlighting is provided by Neovim, see `:h treesitter-highlight`. To enable it for a filetype, put `vim.treesitter.start()` in a `ftplugin/<filetype>.lua` in your config directory, or place the following in your `init.lua`:
```lua
-require'nvim-treesitter.configs'.setup {
- indent = {
- enable = true
- }
-}
+vim.api.nvim_create_autocmd('FileType', {
+ pattern = { '<filetype>' },
+ callback = function() vim.treesitter.start() end,
+})
```
-#### Folding
+## Folds
-Tree-sitter based folding (implemented in Neovim itself, see `:h vim.treesitter.foldexpr()`). To enable it for the current window, set
+Treesitter-based folding is provided by Neovim. To enable it, put the following in your `ftplugin` or `FileType` autocommand:
```lua
-vim.wo.foldmethod = 'expr'
vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
```
-This will respect your `foldminlines` and `foldnestmax` settings.
-
-# Advanced setup
-
-## Changing the parser install directory
+## Indentation
-If you want to install the parsers to a custom directory you can specify this
-directory with `parser_install_dir` option in that is passed to `setup`.
-`nvim-treesitter` will then install the parser files into this directory.
-
-This directory must be writeable and must be explicitly prepended to the
-`runtimepath`. For example:
+Treesitter-based indentation is provided by this plugin but considered **experimental**. To enable it, put the following in your `ftplugin` or `FileType` autocommand:
```lua
- -- It MUST be at the beginning of runtimepath. Otherwise the parsers from Neovim itself
- -- is loaded that may not be compatible with the queries from the 'nvim-treesitter' plugin.
- vim.opt.runtimepath:prepend("/some/path/to/store/parsers")
-
- require'nvim-treesitter.configs'.setup {
- parser_install_dir = "/some/path/to/store/parsers",
-
- ...
-
- }
+vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
```
-If this option is not included in the setup options, or is explicitly set to
-`nil` then the default install directories will be used. If this value is set
-the default directories will be ignored.
+(Note the specific quotes used.)
-Bear in mind that any parser installed into a parser folder on the runtime path
-will still be considered installed. (For example if
-"~/.local/share/nvim/site/parser/c.so" exists then the "c" parser will be
-considered installed, even though it is not in `parser_install_dir`)
+## Injections
-The default paths are:
+Injections are used for multi-language documents, see `:h treesitter-language-injections`. No setup is needed.
-1. first the package folder. Where `nvim-treesitter` is installed.
-2. second the site directory. This is the "site" subdirectory of `stdpath("data")`.
+# Advanced setup
## Adding parsers
@@ -625,139 +130,56 @@ If you have a parser that is not on the list of supported languages (either as a
3. Add the following snippet to your `init.lua`:
```lua
-local parser_config = require "nvim-treesitter.parsers".get_parser_configs()
+local parser_config = require "nvim-treesitter.parsers".configs
parser_config.zimbu = {
install_info = {
url = "~/projects/tree-sitter-zimbu", -- local path or git repo
files = {"src/parser.c"}, -- note that some parsers also require src/scanner.c or src/scanner.cc
-- optional entries:
- branch = "main", -- default branch in case of git repo if different from master
+ branch = "develop", -- only needed if different from default branch
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 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.
-If you wish to set a specific parser for a filetype, you should use `vim.treesitter.language.register()`:
+4. If the parser name differs from the filetype(s) used by Neovim, you need to register the parser via
```lua
-vim.treesitter.language.register('python', 'someft') -- the someft filetype will use the python parser and queries.
+vim.treesitter.language.register('zimbu', { 'zu' })
```
-Note this requires Nvim v0.9.
+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()>) to add a custom detection rule.
-4. Start `nvim` and `:TSInstall zimbu`.
+5. 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()>) 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).
-
-The first query file on `runtimepath` will be used (see `:h treesitter-query`).
-If you want to make a query on the user config extend other queries instead of
-replacing them, see `:h treesitter-query-modeline-extends`.
-
-If you want to completely override a query, you can use `:h vim.treesitter.query.set()`.
-For example, to override the `injections` queries from `c` with your own:
-
-```lua
-vim.treesitter.query.set("c", "injections", "(comment) @comment")
-```
-
-Note: when using `query.set()`, 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:
+Queries can be placed anywhere in your `runtimepath` under `queries/<language>`, with earlier directories taking precedence unless the queries are marked with `; extends`; see `:h treesitter-query`.
+E.g., to add queries for `zimbu`, put `highlights.scm` etc. under
```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
- }
-}
+vim.fn.stdpath('data') .. 'site/queries/zimbu'
```
-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.
+#### Feature `{X}` does not work for `{language}`...
-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).
+1. Check the `nvim-treesitter` section of `:checkhealth` for any warning, and make sure that the query for `{X}` is listed for `{language}`.
-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.
+2. Ensure that the feature is enabled as explained above.
-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.
+3. 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.
#### I get `Error detected while processing .../plugin/nvim-treesitter.vim` every time I open Neovim
@@ -773,32 +195,10 @@ 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.
+ You can execute this command `:= vim.api.nvim_get_runtime_file('parser', 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:
@@ -828,24 +228,12 @@ require("nvim-treesitter.install").prefer_git = true
In your Lua config:
```lua
-for _, config in pairs(require("nvim-treesitter.parsers").get_parser_configs()) do
+for _, config in pairs(require("nvim-treesitter.parsers").configs) do
config.install_info.url = config.install_info.url:gsub("https://github.com/", "something else")
end
-require'nvim-treesitter.configs'.setup {
+require'nvim-treesitter'.setup {
--
--
}
```
-
-#### Using an existing parser for another filetype
-
-For example, to use the `bash` tree-sitter to highlight file with
-`filetype=apkbuild`, use:
-
-```lua
-vim.treesitter.language.register("bash", "apkbuild")
-```
-
-The `bash` tree-sitter must be installed following the usual procedure [as
-described above](#language-parsers).
diff --git a/SUPPORTED_LANGUAGES.md b/SUPPORTED_LANGUAGES.md
new file mode 100644
index 000000000..a388c9c9a
--- /dev/null
+++ b/SUPPORTED_LANGUAGES.md
@@ -0,0 +1,305 @@
+# Supported languages
+
+The following is a list of languages for which a parser can be installed through `:TSInstall`.
+
+Legend:
+- **Tier:** _core_, _stable_, _community_, or _unstable_
+- **CLI:** `:TSInstall` requires `tree-sitter` CLI installed
+- **NPM:** `:TSInstallFromGrammar` requires `node` installed
+- **Queries** available for **H**ighlights, **I**ndents, **F**olds, In**J**ections
+
+<!--This section of the README is automatically updated by a CI job-->
+<!--parserinfo-->
+Language | Tier | Queries | CLI | NPM | Maintainer
+-------- |:----:|:-------:|:---:|:---:| ----------
+[ada](https://github.com/briot/tree-sitter-ada) | | `HF  ` | | | @briot
+[agda](https://github.com/tree-sitter/tree-sitter-agda) | | `HF  ` | | | @Decodetalkers
+[angular](https://github.com/dlvandenberg/tree-sitter-angular) | unstable | `HFIJ` | | ✓ | @dlvandenberg
+[apex](https://github.com/aheber/tree-sitter-sfapex) | community | `HF  ` | | | @aheber
+[arduino](https://github.com/ObserverOfTime/tree-sitter-arduino) | | `HFIJ` | | | @ObserverOfTime
+[asm](https://github.com/RubixDev/tree-sitter-asm) | community | `H  J` | | | @RubixDev
+[astro](https://github.com/virchau13/tree-sitter-astro) | | `HFIJ` | | | @virchau13
+[authzed](https://github.com/mleonidas/tree-sitter-authzed) | community | `H  J` | | | @mattpolzin
+[awk](https://github.com/Beaglefoot/tree-sitter-awk) | | `H  J` | | |
+[bash](https://github.com/tree-sitter/tree-sitter-bash) | | `HF J` | | | @TravonteD
+[bass](https://github.com/vito/tree-sitter-bass) | | `HFIJ` | | | @amaanq
+[beancount](https://github.com/polarmutex/tree-sitter-beancount) | | `HF J` | | | @polarmutex
+[bibtex](https://github.com/latex-lsp/tree-sitter-bibtex) | community | `HFI ` | | | @theHamsta, @clason
+[bicep](https://github.com/amaanq/tree-sitter-bicep) | | `HFIJ` | | | @amaanq
+[bitbake](https://github.com/amaanq/tree-sitter-bitbake) | stable | `HFIJ` | | | @amaanq
+[blueprint](https://gitlab.com/gabmus/tree-sitter-blueprint.git) | unstable | `H   ` | | | @gabmus
+[c](https://github.com/tree-sitter/tree-sitter-c) | core | `HFIJ` | | | @amaanq
+[c_sharp](https://github.com/tree-sitter/tree-sitter-c-sharp) | | `HF J` | | | @Luxed
+[cairo](https://github.com/amaanq/tree-sitter-cairo) | stable | `HFIJ` | | | @amaanq
+[capnp](https://github.com/amaanq/tree-sitter-capnp) | | `HFIJ` | | | @amaanq
+[chatito](https://github.com/ObserverOfTime/tree-sitter-chatito) | | `HFIJ` | | | @ObserverOfTime
+[clojure](https://github.com/sogaiu/tree-sitter-clojure) | | `HF J` | | | @NoahTheDuke
+[cmake](https://github.com/uyha/tree-sitter-cmake) | | `HFI ` | | | @uyha
+[comment](https://github.com/stsewd/tree-sitter-comment) | stable | `H   ` | | | @stsewd
+[commonlisp](https://github.com/theHamsta/tree-sitter-commonlisp) | | `HF  ` | | ✓ | @theHamsta
+[cooklang](https://github.com/addcninblue/tree-sitter-cooklang) | community | `H   ` | | | @addcninblue
+[corn](https://github.com/jakestanger/tree-sitter-corn) | community | `HFI ` | | | @jakestanger
+[cpon](https://github.com/amaanq/tree-sitter-cpon) | | `HFIJ` | | | @amaanq
+[cpp](https://github.com/tree-sitter/tree-sitter-cpp) | | `HFIJ` | | ✓ | @theHamsta
+[css](https://github.com/tree-sitter/tree-sitter-css) | | `HFIJ` | | | @TravonteD
+[csv](https://github.com/amaanq/tree-sitter-csv) | stable | `H   ` | | | @amaanq
+[cuda](https://github.com/theHamsta/tree-sitter-cuda) | | `HFIJ` | | ✓ | @theHamsta
+[cue](https://github.com/eonpatapon/tree-sitter-cue) | | `HFIJ` | | | @amaanq
+[d](https://github.com/gdamore/tree-sitter-d) | stable | `HFIJ` | | | @amaanq
+[dart](https://github.com/UserNobody14/tree-sitter-dart) | | `HFIJ` | | | @akinsho
+[devicetree](https://github.com/joelspadin/tree-sitter-devicetree) | | `HFIJ` | | | @jedrzejboczar
+[dhall](https://github.com/jbellerb/tree-sitter-dhall) | | `HF J` | | | @amaanq
+[diff](https://github.com/the-mikedavis/tree-sitter-diff) | | `H   ` | | | @gbprod
+[disassembly](https://github.com/ColinKennedy/tree-sitter-disassembly) | community | `H  J` | | | @ColinKennedy
+[djot](https://github.com/treeman/tree-sitter-djot) | community | `HFIJ` | | | @NoahTheDuke
+[dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile) | | `H  J` | | | @camdencheek
+[dot](https://github.com/rydesun/tree-sitter-dot) | | `H IJ` | | | @rydesun
+[doxygen](https://github.com/amaanq/tree-sitter-doxygen) | stable | `H IJ` | | | @amaanq
+[dtd](https://github.com/tree-sitter-grammars/tree-sitter-xml) | stable | `HF J` | | | @ObserverOfTime
+[earthfile](https://github.com/glehmann/tree-sitter-earthfile) | community | `H  J` | | | @glehmann
+[ebnf](https://github.com/RubixDev/ebnf) | unstable | `H   ` | | | @RubixDev
+[eds](https://github.com/uyha/tree-sitter-eds) | community | `HF  ` | | | @uyha
+[eex](https://github.com/connorlay/tree-sitter-eex) | | `H  J` | | | @connorlay
+[elixir](https://github.com/elixir-lang/tree-sitter-elixir) | | `HFIJ` | | | @connorlay
+[elm](https://github.com/elm-tooling/tree-sitter-elm) | | `H  J` | | | @zweimach
+[elsa](https://github.com/glapa-grossklag/tree-sitter-elsa) | | `HFIJ` | | | @glapa-grossklag, @amaanq
+[elvish](https://github.com/elves/tree-sitter-elvish) | | `H  J` | | | @elves
+[embedded_template](https://github.com/tree-sitter/tree-sitter-embedded-template) | | `H  J` | | |
+[erlang](https://github.com/WhatsApp/tree-sitter-erlang) | | `HF  ` | | | @filmor
+[facility](https://github.com/FacilityApi/tree-sitter-facility) | community | `HFIJ` | | | @bryankenote
+[faust](https://github.com/khiner/tree-sitter-faust) | community | `H  J` | | | @khiner
+[fennel](https://github.com/alexmozaidze/tree-sitter-fennel) | | `HF J` | | ✓ | @alexmozaidze
+[fidl](https://github.com/google/tree-sitter-fidl) | community | `HF J` | | | @chaopeng
+[firrtl](https://github.com/amaanq/tree-sitter-firrtl) | | `HFIJ` | | | @amaanq
+[fish](https://github.com/ram02z/tree-sitter-fish) | | `HFIJ` | | | @ram02z
+[foam](https://github.com/FoamScience/tree-sitter-foam) | unstable | `HFIJ` | | | @FoamScience
+[forth](https://github.com/AlexanderBrevig/tree-sitter-forth) | stable | `HFIJ` | | | @amaanq
+[fortran](https://github.com/stadelmanma/tree-sitter-fortran) | | `HFI ` | | | @amaanq
+[fsh](https://github.com/mgramigna/tree-sitter-fsh) | | `H   ` | | | @mgramigna
+[func](https://github.com/amaanq/tree-sitter-func) | | `H   ` | | | @amaanq
+[fusion](https://gitlab.com/jirgn/tree-sitter-fusion.git) | | `HFI ` | | | @jirgn
+[gdscript](https://github.com/PrestonKnopp/tree-sitter-gdscript)[^gdscript] | | `HFIJ` | | | @PrestonKnopp
+[gdshader](https://github.com/GodOfAvacyn/tree-sitter-gdshader) | community | `H  J` | | | @godofavacyn
+[git_config](https://github.com/the-mikedavis/tree-sitter-git-config)[^git_config] | | `HF J` | | | @amaanq
+[git_rebase](https://github.com/the-mikedavis/tree-sitter-git-rebase) | | `H  J` | | | @gbprod
+[gitattributes](https://github.com/ObserverOfTime/tree-sitter-gitattributes) | | `H  J` | | | @ObserverOfTime
+[gitcommit](https://github.com/gbprod/tree-sitter-gitcommit) | | `H  J` | | | @gbprod
+[gitignore](https://github.com/shunsambongi/tree-sitter-gitignore) | | `H   ` | | | @theHamsta
+[gleam](https://github.com/gleam-lang/tree-sitter-gleam) | | `HFIJ` | | | @amaanq
+[glimmer](https://github.com/alexlafroscia/tree-sitter-glimmer)[^glimmer] | | `HFI ` | | | @NullVoxPopuli
+[glsl](https://github.com/theHamsta/tree-sitter-glsl) | | `HFIJ` | | ✓ | @theHamsta
+[gn](https://github.com/amaanq/tree-sitter-gn) | stable | `HFIJ` | | | @amaanq
+[gnuplot](https://github.com/dpezto/tree-sitter-gnuplot) | community | `H  J` | | | @dpezto
+[go](https://github.com/tree-sitter/tree-sitter-go) | | `HFIJ` | | | @theHamsta, @WinWisely268
+[godot_resource](https://github.com/PrestonKnopp/tree-sitter-godot-resource)[^godot_resource] | | `HF J` | | | @pierpo
+[gomod](https://github.com/camdencheek/tree-sitter-go-mod) | | `H  J` | | | @camdencheek
+[gosum](https://github.com/amaanq/tree-sitter-go-sum) | | `H   ` | | | @amaanq
+[gotmpl](https://github.com/ngalaiko/tree-sitter-go-template) | community | `H  J` | | | @qvalentin
+[gowork](https://github.com/omertuc/tree-sitter-go-work) | | `H  J` | | | @omertuc
+[gpg](https://github.com/ObserverOfTime/tree-sitter-gpg-config) | stable | `H  J` | | | @ObserverOfTime
+[graphql](https://github.com/bkegley/tree-sitter-graphql) | | `H IJ` | | | @bkegley
+[groovy](https://github.com/murtaza64/tree-sitter-groovy) | community | `HFIJ` | | | @murtaza64
+[gstlaunch](https://github.com/theHamsta/tree-sitter-gstlaunch) | stable | `H   ` | | | @theHamsta
+[hack](https://github.com/slackhq/tree-sitter-hack) | | `H   ` | | |
+[hare](https://github.com/amaanq/tree-sitter-hare) | | `HFIJ` | | | @amaanq
+[haskell](https://github.com/tree-sitter/tree-sitter-haskell) | | `HF J` | | | @mrcjkb
+[haskell_persistent](https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent) | | `HF  ` | | | @lykahb
+[hcl](https://github.com/MichaHoffmann/tree-sitter-hcl) | | `HFIJ` | | | @MichaHoffmann
+[heex](https://github.com/connorlay/tree-sitter-heex) | | `HFIJ` | | | @connorlay
+[helm](https://github.com/ngalaiko/tree-sitter-go-template) | community | `H  J` | | | @qvalentin
+[hjson](https://github.com/winston0410/tree-sitter-hjson) | | `HFIJ` | | ✓ | @winston0410
+[hlsl](https://github.com/theHamsta/tree-sitter-hlsl) | | `HFIJ` | | ✓ | @theHamsta
+[hlsplaylist](https://github.com/Freed-Wu/tree-sitter-hlsplaylist) | community | `H  J` | | | @Freed-Wu
+[hocon](https://github.com/antosha417/tree-sitter-hocon) | | `HF J` | | ✓ | @antosha417
+[hoon](https://github.com/urbit-pilled/tree-sitter-hoon) | unstable | `HF  ` | | | @urbit-pilled
+[html](https://github.com/tree-sitter/tree-sitter-html) | | `HFIJ` | | | @TravonteD
+[htmldjango](https://github.com/interdependence/tree-sitter-htmldjango) | unstable | `HFIJ` | | | @ObserverOfTime
+[http](https://github.com/rest-nvim/tree-sitter-http) | | `H  J` | | | @amaanq, @NTBBloodbath
+[hurl](https://github.com/pfeiferj/tree-sitter-hurl) | community | `HFIJ` | | | @pfeiferj
+[hyprlang](https://github.com/luckasRanarison/tree-sitter-hyprlang) | community | `HFIJ` | | | @luckasRanarison
+[idl](https://github.com/cathaysia/tree-sitter-idl) | community | `H  J` | | | @cathaysa
+[ini](https://github.com/justinmk/tree-sitter-ini) | unstable | `HF  ` | | | @theHamsta
+[inko](https://github.com/inko-lang/tree-sitter-inko) | community | `HFIJ` | | | @yorickpeterse
+[ispc](https://github.com/fab4100/tree-sitter-ispc) | | `HFIJ` | | ✓ | @fab4100
+[janet_simple](https://github.com/sogaiu/tree-sitter-janet-simple) | | `HF J` | | | @sogaiu
+[java](https://github.com/tree-sitter/tree-sitter-java) | | `HFIJ` | | | @p00f
+[javascript](https://github.com/tree-sitter/tree-sitter-javascript) | | `HFIJ` | | | @steelsojka
+[jq](https://github.com/flurie/tree-sitter-jq) | | `H  J` | | | @ObserverOfTime
+[jsdoc](https://github.com/tree-sitter/tree-sitter-jsdoc) | | `H   ` | | | @steelsojka
+[json](https://github.com/tree-sitter/tree-sitter-json) | | `HFI ` | | | @steelsojka
+[json5](https://github.com/Joakker/tree-sitter-json5) | | `H  J` | | | @Joakker
+[jsonc](https://gitlab.com/WhyNotHugo/tree-sitter-jsonc.git)[^jsonc] | | `HFIJ` | | ✓ | @WhyNotHugo
+[jsonnet](https://github.com/sourcegraph/tree-sitter-jsonnet) | | `HF  ` | | | @nawordar
+[julia](https://github.com/tree-sitter/tree-sitter-julia) | community | `HFIJ` | | | @theHamsta
+[just](https://github.com/IndianBoy42/tree-sitter-just) | community | `HFIJ` | | | @Hubro
+[kconfig](https://github.com/amaanq/tree-sitter-kconfig) | stable | `HFIJ` | | | @amaanq
+[kdl](https://github.com/amaanq/tree-sitter-kdl) | | `HFIJ` | | | @amaanq
+[kotlin](https://github.com/fwcd/tree-sitter-kotlin) | | `HF J` | | | @SalBakraa
+[koto](https://github.com/koto-lang/tree-sitter-koto) | community | `HF J` | | | @irh
+[kusto](https://github.com/Willem-J-an/tree-sitter-kusto) | community | `H  J` | | | @Willem-J-an
+[lalrpop](https://github.com/traxys/tree-sitter-lalrpop) | | `H  J` | | | @traxys
+[latex](https://github.com/latex-lsp/tree-sitter-latex) | community | `HF J` | ✓ | | @theHamsta, @clason
+[ledger](https://github.com/cbarrete/tree-sitter-ledger) | | `HFIJ` | | | @cbarrete
+[leo](https://github.com/r001/tree-sitter-leo) | community | `H IJ` | | | @r001
+[linkerscript](https://github.com/amaanq/tree-sitter-linkerscript) | stable | `HFIJ` | | | @amaanq
+[liquid](https://github.com/hankthetank27/tree-sitter-liquid) | community | `H  J` | | | @hankthetank27
+[liquidsoap](https://github.com/savonet/tree-sitter-liquidsoap) | community | `HFI ` | | | @toots
+[llvm](https://github.com/benwilliamgraham/tree-sitter-llvm) | | `H   ` | | | @benwilliamgraham
+[lua](https://github.com/MunifTanjim/tree-sitter-lua) | core | `HFIJ` | | | @muniftanjim
+[luadoc](https://github.com/amaanq/tree-sitter-luadoc) | | `H   ` | | | @amaanq
+[luap](https://github.com/amaanq/tree-sitter-luap)[^luap] | | `H   ` | | | @amaanq
+[luau](https://github.com/amaanq/tree-sitter-luau) | | `HFIJ` | | | @amaanq
+[m68k](https://github.com/grahambates/tree-sitter-m68k) | | `HF J` | | | @grahambates
+[make](https://github.com/alemuller/tree-sitter-make) | | `HF J` | | | @lewis6991
+[markdown](https://github.com/MDeiml/tree-sitter-markdown)[^markdown] | core | `HFIJ` | | | @MDeiml
+[markdown_inline](https://github.com/MDeiml/tree-sitter-markdown)[^markdown_inline] | core | `H  J` | | | @MDeiml
+[matlab](https://github.com/acristoffers/tree-sitter-matlab) | | `HFIJ` | | | @acristoffers
+[menhir](https://github.com/Kerl13/tree-sitter-menhir) | | `H  J` | | | @Kerl13
+[mermaid](https://github.com/monaqa/tree-sitter-mermaid) | unstable | `H   ` | | |
+[meson](https://github.com/Decodetalkers/tree-sitter-meson) | | `HFIJ` | | | @Decodetalkers
+[mlir](https://github.com/artagnon/tree-sitter-mlir) | unstable | `H   ` | ✓ | | @artagnon
+[muttrc](https://github.com/neomutt/tree-sitter-muttrc) | community | `H  J` | | | @Freed-Wu
+[nasm](https://github.com/naclsn/tree-sitter-nasm) | stable | `H  J` | | | @ObserverOfTime
+[nickel](https://github.com/nickel-lang/tree-sitter-nickel) | | `H I ` | | |
+[nim](https://github.com/alaviss/tree-sitter-nim) | community | `HF J` | | | @aMOPel
+[nim_format_string](https://github.com/aMOPel/tree-sitter-nim-format-string) | community | `H  J` | | | @aMOPel
+[ninja](https://github.com/alemuller/tree-sitter-ninja) | | `HFI ` | | | @alemuller
+[nix](https://github.com/cstrahan/tree-sitter-nix) | | `HF J` | | | @leo60228
+[norg](https://github.com/nvim-neorg/tree-sitter-norg) | unstable | `    ` | | | @JoeyGrajciar, @vhyrro
+[nqc](https://github.com/amaanq/tree-sitter-nqc) | stable | `HFIJ` | | | @amaanq
+[objc](https://github.com/amaanq/tree-sitter-objc) | | `HFIJ` | | | @amaanq
+[objdump](https://github.com/ColinKennedy/tree-sitter-objdump) | community | `H  J` | | | @ColinKennedy
+[ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) | | `HFIJ` | | | @undu
+[ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) | | `HFIJ` | | | @undu
+[ocamllex](https://github.com/atom-ocaml/tree-sitter-ocamllex) | | `H  J` | ✓ | | @undu
+[odin](https://github.com/amaanq/tree-sitter-odin) | | `HFIJ` | | | @amaanq
+[org](https://github.com/milisims/tree-sitter-org) | | `    ` | | |
+[pascal](https://github.com/Isopod/tree-sitter-pascal.git) | | `HFIJ` | | | @Isopod
+[passwd](https://github.com/ath3/tree-sitter-passwd) | | `H   ` | | | @amaanq
+[pem](https://github.com/ObserverOfTime/tree-sitter-pem) | stable | `HF J` | | | @ObserverOfTime
+[perl](https://github.com/tree-sitter-perl/tree-sitter-perl) | | `HF J` | | | @RabbiVeesh, @LeoNerd
+[php](https://github.com/tree-sitter/tree-sitter-php)[^php] | | `HFIJ` | | | @tk-shirasaka
+[php_only](https://github.com/tree-sitter/tree-sitter-php)[^php_only] | | `HFIJ` | | | @tk-shirasaka
+[phpdoc](https://github.com/claytonrcarter/tree-sitter-phpdoc) | unstable | `H   ` | | ✓ | @mikehaertl
+[pioasm](https://github.com/leo60228/tree-sitter-pioasm) | | `H  J` | | | @leo60228
+[po](https://github.com/erasin/tree-sitter-po) | | `HF J` | | | @amaanq
+[pod](https://github.com/tree-sitter-perl/tree-sitter-pod) | community | `H   ` | | | @RabbiVeesh, @LeoNerd
+[poe_filter](https://github.com/ObserverOfTime/tree-sitter-poe-filter)[^poe_filter] | unstable | `HFIJ` | | | @ObserverOfTime
+[pony](https://github.com/amaanq/tree-sitter-pony) | | `HFIJ` | | | @amaanq, @mfelsche
+[printf](https://github.com/ObserverOfTime/tree-sitter-printf) | stable | `H   ` | | | @ObserverOfTime
+[prisma](https://github.com/victorhqc/tree-sitter-prisma) | | `HF  ` | | | @elianiva
+[promql](https://github.com/MichaHoffmann/tree-sitter-promql) | unstable | `H  J` | | | @MichaHoffmann
+[properties](https://github.com/ObserverOfTime/tree-sitter-properties)[^properties] | stable | `H  J` | | | @ObserverOfTime
+[proto](https://github.com/treywood/tree-sitter-proto) | | `HF  ` | | | @treywood
+[prql](https://github.com/PRQL/tree-sitter-prql) | | `H  J` | | | @matthias-Q
+[psv](https://github.com/amaanq/tree-sitter-csv) | stable | `H   ` | | | @amaanq
+[pug](https://github.com/zealot128/tree-sitter-pug) | unstable | `H  J` | | | @zealot128
+[puppet](https://github.com/amaanq/tree-sitter-puppet) | | `HFIJ` | | | @amaanq
+[purescript](https://github.com/postsolar/tree-sitter-purescript) | community | `H  J` | | | @postsolar
+[pymanifest](https://github.com/ObserverOfTime/tree-sitter-pymanifest) | stable | `H  J` | | | @ObserverOfTime
+[python](https://github.com/tree-sitter/tree-sitter-python) | | `HFIJ` | | | @stsewd, @theHamsta
+[ql](https://github.com/tree-sitter/tree-sitter-ql) | | `HFIJ` | | | @pwntester
+[qmldir](https://github.com/Decodetalkers/tree-sitter-qmldir) | | `H  J` | | | @amaanq
+[qmljs](https://github.com/yuja/tree-sitter-qmljs) | | `HF J` | | | @Decodetalkers
+[query](https://github.com/nvim-treesitter/tree-sitter-query)[^query] | core | `HFIJ` | | | @steelsojka
+[r](https://github.com/r-lib/tree-sitter-r) | | `H IJ` | | | @echasnovski
+[racket](https://github.com/6cdh/tree-sitter-racket) | unstable | `HF J` | | |
+[rasi](https://github.com/Fymyte/tree-sitter-rasi) | | `HFIJ` | | | @Fymyte
+[rbs](https://github.com/joker1007/tree-sitter-rbs) | community | `HFIJ` | | | @joker1007
+[re2c](https://github.com/amaanq/tree-sitter-re2c) | stable | `HFIJ` | | | @amaanq
+[readline](https://github.com/ribru17/tree-sitter-readline) | community | `HFIJ` | | | @ribru17
+[regex](https://github.com/tree-sitter/tree-sitter-regex) | | `H   ` | | | @theHamsta
+[rego](https://github.com/FallenAngel97/tree-sitter-rego) | | `H  J` | | | @FallenAngel97
+[requirements](https://github.com/ObserverOfTime/tree-sitter-requirements) | stable | `H  J` | | | @ObserverOfTime
+[rnoweb](https://github.com/bamonroe/tree-sitter-rnoweb) | | `HF J` | | | @bamonroe
+[robot](https://github.com/Hubro/tree-sitter-robot) | community | `HFI ` | | | @Hubro
+[roc](https://github.com/nat-418/tree-sitter-roc) | community | `H  J` | | | @nat-418
+[ron](https://github.com/amaanq/tree-sitter-ron) | | `HFIJ` | | | @amaanq
+[rst](https://github.com/stsewd/tree-sitter-rst) | | `H  J` | | | @stsewd
+[ruby](https://github.com/tree-sitter/tree-sitter-ruby) | | `HFIJ` | | | @TravonteD
+[rust](https://github.com/tree-sitter/tree-sitter-rust) | | `HFIJ` | | | @amaanq
+[scala](https://github.com/tree-sitter/tree-sitter-scala) | | `HF J` | | | @stevanmilic
+[scfg](https://git.sr.ht/~rockorager/tree-sitter-scfg) | community | `H  J` | ✓ | | @WhyNotHugo
+[scheme](https://github.com/6cdh/tree-sitter-scheme) | unstable | `HF J` | | |
+[scss](https://github.com/serenadeai/tree-sitter-scss) | | `HFI ` | | | @elianiva
+[slang](https://github.com/theHamsta/tree-sitter-slang)[^slang] | unstable | `HFIJ` | | ✓ | @theHamsta
+[slint](https://github.com/slint-ui/tree-sitter-slint) | community | `HFIJ` | | | @hunger
+[smali](https://github.com/tree-sitter-grammars/tree-sitter-smali) | community | `HFIJ` | | | @amaanq
+[smithy](https://github.com/indoorvivants/tree-sitter-smithy) | | `H   ` | | | @amaanq, @keynmol
+[snakemake](https://github.com/osthomas/tree-sitter-snakemake) | unstable | `HFIJ` | | |
+[solidity](https://github.com/JoranHonig/tree-sitter-solidity) | | `HF  ` | | | @amaanq
+[soql](https://github.com/aheber/tree-sitter-sfapex) | community | `H   ` | | | @aheber
+[sosl](https://github.com/aheber/tree-sitter-sfapex) | | `H   ` | | | @aheber
+[sourcepawn](https://github.com/nilshelmig/tree-sitter-sourcepawn) | community | `H  J` | | | @Sarrus1
+[sparql](https://github.com/BonaBeavis/tree-sitter-sparql) | | `HFIJ` | | | @BonaBeavis
+[sql](https://github.com/derekstride/tree-sitter-sql) | | `H IJ` | | | @derekstride
+[squirrel](https://github.com/amaanq/tree-sitter-squirrel) | | `HFIJ` | | | @amaanq
+[ssh_config](https://github.com/ObserverOfTime/tree-sitter-ssh-config) | stable | `HFIJ` | | | @ObserverOfTime
+[starlark](https://github.com/amaanq/tree-sitter-starlark) | | `HFIJ` | | | @amaanq
+[strace](https://github.com/sigmaSd/tree-sitter-strace) | stable | `H  J` | | | @amaanq
+[styled](https://github.com/mskelton/tree-sitter-styled) | community | `HFIJ` | | | @mskelton
+[supercollider](https://github.com/madskjeldgaard/tree-sitter-supercollider) | | `HFIJ` | | | @madskjeldgaard
+[surface](https://github.com/connorlay/tree-sitter-surface) | | `HFIJ` | | | @connorlay
+[svelte](https://github.com/tree-sitter-grammars/tree-sitter-svelte) | stable | `HFIJ` | | | @amaanq
+[swift](https://github.com/alex-pinkus/tree-sitter-swift) | | `H I ` | ✓ | | @alex-pinkus
+[sxhkdrc](https://github.com/RaafatTurki/tree-sitter-sxhkdrc) | | `HF J` | | | @RaafatTurki
+[systemtap](https://github.com/ok-ryoko/tree-sitter-systemtap) | community | `HF J` | | | @ok-ryoko
+[t32](https://gitlab.com/xasc/tree-sitter-t32.git) | community | `HFIJ` | | | @xasc
+[tablegen](https://github.com/amaanq/tree-sitter-tablegen) | | `HFIJ` | | | @amaanq
+[tcl](https://github.com/tree-sitter-grammars/tree-sitter-tcl) | stable | `HFI ` | | | @lewis6991
+[teal](https://github.com/euclidianAce/tree-sitter-teal) | | `HFIJ` | ✓ | | @euclidianAce
+[templ](https://github.com/vrischmann/tree-sitter-templ) | community | `H  J` | | | @vrischmann
+[terraform](https://github.com/MichaHoffmann/tree-sitter-hcl) | | `HFIJ` | | | @MichaHoffmann
+[textproto](https://github.com/PorterAtGoogle/tree-sitter-textproto) | community | `HFI ` | | | @Porter
+[thrift](https://github.com/duskmoon314/tree-sitter-thrift) | | `HFIJ` | | | @amaanq, @duskmoon314
+[tiger](https://github.com/ambroisie/tree-sitter-tiger) | | `HFIJ` | | | @ambroisie
+[tlaplus](https://github.com/tlaplus-community/tree-sitter-tlaplus) | | `HF J` | | | @ahelwer, @susliko
+[tmux](https://github.com/Freed-Wu/tree-sitter-tmux) | community | `H  J` | | | @Freed-Wu
+[todotxt](https://github.com/arnarg/tree-sitter-todotxt.git) | unstable | `H   ` | | | @arnarg
+[toml](https://github.com/tree-sitter-grammars/tree-sitter-toml) | | `HFIJ` | | ✓ | @tk-shirasaka
+[tsv](https://github.com/amaanq/tree-sitter-csv) | stable | `H   ` | | | @amaanq
+[tsx](https://github.com/tree-sitter/tree-sitter-typescript) | | `HFIJ` | | ✓ | @steelsojka
+[turtle](https://github.com/BonaBeavis/tree-sitter-turtle) | | `HFIJ` | | | @BonaBeavis
+[twig](https://github.com/gbprod/tree-sitter-twig) | | `H  J` | | | @gbprod
+[typescript](https://github.com/tree-sitter/tree-sitter-typescript) | | `HFIJ` | | ✓ | @steelsojka
+[typoscript](https://github.com/Teddytrombone/tree-sitter-typoscript) | community | `HFIJ` | | | @Teddytrombone
+[typst](https://github.com/uben0/tree-sitter-typst) | community | `HFIJ` | | | @uben0, @RaafatTurki
+[udev](https://github.com/ObserverOfTime/tree-sitter-udev) | stable | `H  J` | | | @ObserverOfTime
+[ungrammar](https://github.com/Philipp-M/tree-sitter-ungrammar) | | `HFIJ` | | | @Philipp-M, @amaanq
+[unison](https://github.com/kylegoetz/tree-sitter-unison) | unstable | `H  J` | ✓ | | @tapegram
+[usd](https://github.com/ColinKennedy/tree-sitter-usd) | | `HFI ` | | | @ColinKennedy
+[uxntal](https://github.com/amaanq/tree-sitter-uxntal) | | `HFIJ` | | | @amaanq
+[v](https://github.com/vlang/v-analyzer) | | `HFIJ` | | | @kkharji, @amaanq
+[vala](https://github.com/vala-lang/tree-sitter-vala) | | `HF  ` | | | @Prince781
+[vento](https://github.com/ventojs/tree-sitter-vento) | community | `H  J` | | | @wrapperup, @oscarotero
+[verilog](https://github.com/tree-sitter/tree-sitter-verilog) | | `HF J` | | | @zegervdv
+[vhs](https://github.com/charmbracelet/tree-sitter-vhs) | | `H   ` | | | @caarlos0
+[vim](https://github.com/neovim/tree-sitter-vim) | core | `HF J` | | | @clason
+[vimdoc](https://github.com/neovim/tree-sitter-vimdoc) | core | `H  J` | | | @clason
+[vue](https://github.com/tree-sitter-grammars/tree-sitter-vue) | stable | `HFIJ` | | | @WhyNotHugo, @lucario387
+[wgsl](https://github.com/szebniok/tree-sitter-wgsl) | | `HFI ` | | | @szebniok
+[wgsl_bevy](https://github.com/theHamsta/tree-sitter-wgsl-bevy) | | `HFI ` | | ✓ | @theHamsta
+[wing](https://github.com/winglang/tree-sitter-wing) | community | `HF  ` | | | @gshpychka, @MarkMcCulloh
+[wit](https://github.com/liamwh/tree-sitter-wit) | community | `H  J` | | | @liamwh
+[xcompose](https://github.com/ObserverOfTime/tree-sitter-xcompose) | stable | `H  J` | | | @ObserverOfTime
+[xml](https://github.com/tree-sitter-grammars/tree-sitter-xml) | stable | `HFIJ` | | | @ObserverOfTime
+[yaml](https://github.com/tree-sitter-grammars/tree-sitter-yaml) | stable | `HFIJ` | | | @amaanq
+[yang](https://github.com/Hubro/tree-sitter-yang) | | `HFIJ` | | | @Hubro
+[yuck](https://github.com/Philipp-M/tree-sitter-yuck) | | `HFIJ` | | | @Philipp-M, @amaanq
+[zathurarc](https://github.com/Freed-Wu/tree-sitter-zathurarc) | community | `H  J` | | | @Freed-Wu
+[zig](https://github.com/maxxnino/tree-sitter-zig) | | `HFIJ` | | | @maxxnino
+[^gdscript]: Godot
+[^git_config]: git_config
+[^glimmer]: Glimmer and Ember
+[^godot_resource]: Godot Resources
+[^jsonc]: JSON with comments
+[^luap]: Lua patterns
+[^markdown]: basic highlighting
+[^markdown_inline]: needed for full highlighting
+[^php]: PHP with embedded HTML
+[^php_only]: PHP without embedded HTML
+[^poe_filter]: Path of Exile item filter
+[^properties]: Java properties files
+[^query]: Tree-sitter query language
+[^slang]: Shader Slang
+<!--parserinfo-->
diff --git a/TODO.md b/TODO.md
new file mode 100644
index 000000000..5b5dba199
--- /dev/null
+++ b/TODO.md
@@ -0,0 +1,34 @@
+# Roadmap
+
+This document lists the planned and finished changes in this rewrite towards [Nvim-treesitter 1.0](https://github.com/nvim-treesitter/nvim-treesitter/issues/4767).
+
+## TODO
+
+- [ ] **`query_predicates.lua`:** upstream/remove
+- [ ] **`parsers.lua`:** modularize?
+- [ ] **`parsers.lua`:** assign tiers
+- [ ] **`install.lua`:** fix messages, add sync support (@lewis6991)
+- [ ] **`install.lua`:** simplify compilation:
+ - hardcode one compiler + args per platform
+ - provide `install.compile_command` for overriding (function that takes files, ...?)
+ - allow using repo makefile (norg!)?
+ - ...or switch to makefile completely?
+- [ ] **`locals.lua`:** refactor, move to `nvim-treesitter-refactor`
+- [ ] **update-lockfile:** allow specifying version in addition to commit hash (for Tier 1)
+- [ ] **update-lockfile:** one commit per parser/tier?
+- [ ] **documentation:** consolidate, autogenerate?
+- [ ] **documentation:** migration guide
+- [ ] **textobjects:** include simple(!) function, queries? (check Helix)
+- [ ] **downstream:** adapt to breaking changes (`nvim-treesitter-textobjects`, `nvim-treesitter-refactor`)
+
+## DONE
+
+- [X] remove module framework
+- [X] remove extra utilities
+- [X] refactor `indent.lua` into standalone
+- [X] refactor commands, predicates, filetypes registration to plugin/
+- [X] support installing tiers of parsers
+- [X] install parsers to standard directory by default
+- [X] remove bundled queries from runtimepath; copy on parser install
+- [X] general refactor and cleanup
+- [X] remove locals from highlighting (cf. https://github.com/nvim-treesitter/nvim-treesitter/issues/3944#issuecomment-1458782497)
diff --git a/assets/logo.png b/assets/logo.png
deleted file mode 100644
index a60e536bc..000000000
--- a/assets/logo.png
+++ /dev/null
Binary files differ
diff --git a/autoload/nvim_treesitter.vim b/autoload/nvim_treesitter.vim
deleted file mode 100644
index 90953985e..000000000
--- a/autoload/nvim_treesitter.vim
+++ /dev/null
@@ -1,27 +0,0 @@
-function! nvim_treesitter#statusline(...) abort
- return luaeval("require'nvim-treesitter.statusline'.statusline(_A)", get(a:, 1, {}))
-endfunction
-
-function! nvim_treesitter#foldexpr() abort
- return luaeval(printf('require"nvim-treesitter.fold".get_fold_indic(%d)', v:lnum))
-endfunction
-
-function! nvim_treesitter#installable_parsers(arglead, cmdline, cursorpos) abort
- return join(luaeval("require'nvim-treesitter.parsers'.available_parsers()") + ['all'], "\n")
-endfunction
-
-function! nvim_treesitter#installed_parsers(arglead, cmdline, cursorpos) abort
- return join(luaeval("require'nvim-treesitter.info'.installed_parsers()") + ['all'], "\n")
-endfunction
-
-function! nvim_treesitter#available_modules(arglead, cmdline, cursorpos) abort
- return join(luaeval("require'nvim-treesitter.configs'.available_modules()"), "\n")
-endfunction
-
-function! nvim_treesitter#available_query_groups(arglead, cmdline, cursorpos) abort
- return join(luaeval("require'nvim-treesitter.query'.available_query_groups()"), "\n")
-endfunction
-
-function! nvim_treesitter#indent() abort
- return luaeval(printf('require"nvim-treesitter.indent".get_indent(%d)', v:lnum))
-endfunction
diff --git a/doc/nvim-treesitter.txt b/doc/nvim-treesitter.txt
index f7a91b849..7054121b5 100644
--- a/doc/nvim-treesitter.txt
+++ b/doc/nvim-treesitter.txt
@@ -1,6 +1,4 @@
-*nvim-treesitter* Treesitter configurations and abstraction layer for Neovim.
-
-Minimum version of neovim: nightly
+*nvim-treesitter.txt* Treesitter parser and query installer for Neovim
Authors:
Kiyan Yazdani <yazdani.kiyan@protonmail.com>
@@ -15,38 +13,37 @@ Authors:
==============================================================================
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.
+Nvim-treesitter provides functionalities for managing treesitter parsers and
+compatible queries for core features (highlighting, injections, fold, indent).
+
+WARNING: This is work in progress and requires the latest commit on Neovim
+`master`.
==============================================================================
QUICK START *nvim-treesitter-quickstart*
Install the parser for your language
->
+>vim
:TSInstall {language}
<
To get a list of supported languages
->
+>vim
:TSInstallInfo
<
-By default, everything is disabled.
-To enable supported features, put this in your `init.lua` file:
+To install supported parsers and queries, put this in your `init.lua` file:
->
+>lua
require'nvim-treesitter.configs'.setup {
-- A directory to install the parsers into.
- -- If this is excluded or nil parsers are installed
- -- to either the package dir, or the "site" dir.
- -- If a custom path is used (not nil) it must be added to the runtimepath.
- parser_install_dir = "/some/path/to/store/parsers",
+ -- Defaults to the `stdpath('data')/site` dir.
+ install_dir = "/some/path/to/store/parsers",
- -- A list of parser names, or "all"
- ensure_installed = { "c", "lua", "rust" },
+ -- A list of parser names, or "core", "stable", "community", "unstable"
+ ensure_install = { "core", "rust" },
-- Install parsers synchronously (only applied to `ensure_installed`)
sync_install = false,
@@ -54,174 +51,66 @@ To enable supported features, put this in your `init.lua` file:
-- Automatically install missing parsers when entering buffer
auto_install = false,
- -- List of parsers to ignore installing (for "all")
+ -- List of parsers to ignore installing (for "core" etc.)
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,
- },
- }
- vim.opt.runtimepath:append("/some/path/to/store/parsers")
<
-
-See |nvim-treesitter-modules| for a list of all available modules and its options.
+See |nvim-treesitter-commands| for a list of all available commands.
==============================================================================
-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 },
- }
-<
+COMMANDS *nvim-treesitter-commands*
-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.
+ *:TSInstall*
+:TSInstall {language} ... ~
->
- require'nvim-treesitter.configs'.setup {
- highlight = {
- enable = true,
- disable = { "cpp", "lua" },
- },
- }
-<
+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} ... ~
-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:
+Perform the |:TSInstall| operation synchronously.
->
- 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,
- },
- }
-<
+ *:TSInstallInfo*
+:TSInstallInfo ~
-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`, `<space>a`, `<leader>a`
-`<C-a>` (control + a), `<A-n>` (alt + n), `<CR>` (enter), etc.
+List information about currently installed parsers
-External plugins can provide their own modules with their own options,
-those can also be configured using the `nvim-treesitter.configs.setup`
-function.
+ *:TSUpdate*
+:TSUpdate {language} ... ~
-------------------------------------------------------------------------------
-HIGHLIGHT *nvim-treesitter-highlight-mod*
+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.
-Consistent syntax highlighting.
+ *:TSUpdateSync*
+:TSUpdateSync {language} ... ~
-Query files: `highlights.scm`.
-Supported options:
+Perform the |:TSUpdate| operation synchronously.
-- 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`.
+ *:TSUninstall*
+:TSUninstall {language} ... ~
->
- 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,
- },
- }
-<
+Deletes the parser for one or more {language}. You can use 'all' for language
+to uninstall all parsers.
-You can also set custom highlight captures
->
- lua <<EOF
- require"nvim-treesitter.highlight".set_custom_captures {
- -- Highlight the @foo.bar capture group with the "Identifier" highlight group.
- ["foo.bar"] = "Identifier",
- }
- EOF
-<
-Note: The api is not stable yet.
+==============================================================================
+INDENTATION *nvim-treesitter-indentation*
-------------------------------------------------------------------------------
-INCREMENTAL SELECTION *nvim-treesitter-incremental-selection-mod*
+Indentation based on treesitter for the |=| operator.
+NOTE: this is an experimental feature and will be upstreamed to Neovim when
+stable.
-Incremental selection based on the named nodes from the grammar.
+To enable it for a supported parser, add the following to a corresponding
+`FileType` autocommand or `ftplugin/<lang>.lua`: >lua
-Query files: `locals.scm`.
-Supported options:
-- enable: `true` or `false`.
-- disable: list of languages.
-- keymaps:
- - init_selection: in normal mode, start incremental selection.
- Defaults to `gnn`.
- - node_incremental: in visual mode, increment to the upper named parent.
- Defaults to `grn`.
- - scope_incremental: in visual mode, increment to the upper scope
- (as defined in `locals.scm`). Defaults to `grc`.
- - node_decremental: in visual mode, decrement to the previous named node.
- Defaults to `grm`.
+ vim.bo.indentexpr = 'v.lua:require'nvim-treesitter'.indentexpr()'
->
- 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.
+Indentation for a language is controlled by `indents.scm` queries. The
+following captures are supported:
-Query files: `indents.scm`.
-Supported options:
-- enable: `true` or `false`.
-- disable: list of languages.
->
- require'nvim-treesitter.configs'.setup {
- indent = {
- enable = true
- },
- }
`@indent` *nvim-treesitter-indentation-queries*
Queries can use the following captures: `@indent.begin` and `@indent.dedent`,
@@ -233,7 +122,7 @@ the indentation to 0.
The `@indent.begin` specifies that the next line should be indented. Multiple
indents on the same line get collapsed. Eg.
->
+>query
(
(if_statement)
(ERROR "else") @indent.begin
@@ -244,13 +133,13 @@ permits the next line to indent even when the block intended to be indented
has no content yet, improving interactive typing.
eg for python:
->
+>query
((if_statement) @indent.begin
(#set! indent.immediate 1))
<
Will allow:
->
+>python
if True:<CR>
# Auto indent to here
@@ -291,7 +180,7 @@ and finally
<
To specify the delimiters to use `indent.open_delimiter` and
`indent.close_delimiter` should be used. Eg.
->
+>query
((argument_list) @indent.align
(#set! indent.open_delimiter "(")
(#set! indent.close_delimiter ")"))
@@ -302,13 +191,13 @@ the same indent as the natural next line.
For example in python:
->
+>python
if (a > b and
c < d):
pass
Is not correct, whereas
->
+>python
if (a > b and
c < d):
pass
@@ -316,7 +205,7 @@ Is not correct, whereas
Would be correctly indented. This behavior may be chosen using
`indent.avoid_last_matching_next`. Eg.
->
+>query
(if_statement
condition: (parenthesized_expression) @indent.align
(#set! indent.open_delimiter "(")
@@ -328,263 +217,4 @@ Could be used to specify that the last line of an `@indent.align` capture
should be additionally indented to avoid clashing with the indent of the first
line of the block inside an if.
-==============================================================================
-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 files, 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.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?`: <table>
- - `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.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, _node) return line:gsub('%s*[%[%(%{]*%s*$', '') end,
- separator = ' -> ',
- allow_duplicates = false
- }
-<
-- `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 it removes opening brackets and spaces from end. Takes two arguments:
- the text of the line in question, and the corresponding treesitter node.
-- `separator` - Separator between nodes.
-- `allow_duplicates` - Whether or not to remove duplicate components.
-
- *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, hitting `zx` should fix folding.
- In any case, feel free to open an issue with the reproducing steps.
-
-==============================================================================
-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/lua/nvim-treesitter.lua b/lua/nvim-treesitter.lua
deleted file mode 100644
index 963fe7309..000000000
--- a/lua/nvim-treesitter.lua
+++ /dev/null
@@ -1,22 +0,0 @@
-local install = require "nvim-treesitter.install"
-local utils = require "nvim-treesitter.utils"
-local info = require "nvim-treesitter.info"
-local configs = require "nvim-treesitter.configs"
-local statusline = require "nvim-treesitter.statusline"
-
--- 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
-
-M.define_modules = configs.define_modules
-M.statusline = statusline.statusline
-
-return M
diff --git a/lua/nvim-treesitter/caching.lua b/lua/nvim-treesitter/caching.lua
deleted file mode 100644
index 7733202ed..000000000
--- a/lua/nvim-treesitter/caching.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-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 = {}
-
- ---@type table<integer, table<string, any>>
- local items = setmetatable({}, {
- __index = function(tbl, key)
- rawset(tbl, key, {})
- return rawget(tbl, key)
- end,
- })
-
- ---@type table<integer, boolean>
- local loaded_buffers = {}
-
- ---@param type_name string
- ---@param bufnr integer
- ---@param value any
- function cache.set(type_name, bufnr, value)
- if not loaded_buffers[bufnr] then
- loaded_buffers[bufnr] = true
- -- Clean up the cache if the buffer is detached
- -- to avoid memory leaks
- api.nvim_buf_attach(bufnr, false, {
- on_detach = function()
- cache.clear_buffer(bufnr)
- loaded_buffers[bufnr] = nil
- return true
- end,
- on_reload = function() end, -- this is needed to prevent on_detach being called on buffer reload
- })
- end
-
- items[bufnr][type_name] = value
- end
-
- ---@param type_name string
- ---@param bufnr integer
- ---@return any
- function cache.get(type_name, bufnr)
- return items[bufnr][type_name]
- end
-
- ---@param type_name string
- ---@param bufnr integer
- ---@return boolean
- function cache.has(type_name, bufnr)
- return cache.get(type_name, bufnr) ~= nil
- end
-
- ---@param type_name string
- ---@param bufnr integer
- function cache.remove(type_name, bufnr)
- items[bufnr][type_name] = nil
- end
-
- ---@param bufnr integer
- function cache.clear_buffer(bufnr)
- items[bufnr] = nil
- end
-
- return cache
-end
-
-return M
diff --git a/lua/nvim-treesitter/compat.lua b/lua/nvim-treesitter/compat.lua
deleted file mode 100644
index 0ad010030..000000000
--- a/lua/nvim-treesitter/compat.lua
+++ /dev/null
@@ -1,39 +0,0 @@
--- Shim module to address deprecations across nvim versions
-local ts = vim.treesitter
-local tsq = ts.query
-
-local M = {}
-
-function M.get_query_files(lang, query_group, is_included)
- return (tsq.get_files or tsq.get_query_files)(lang, query_group, is_included)
-end
-
-function M.get_query(lang, query_name)
- return (tsq.get or tsq.get_query)(lang, query_name)
-end
-
-function M.parse_query(lang, query)
- return (tsq.parse or tsq.parse_query)(lang, query)
-end
-
-function M.get_range(node, source, metadata)
- return (ts.get_range or tsq.get_range)(node, source, metadata)
-end
-
-function M.get_node_text(node, bufnr)
- return (ts.get_node_text or tsq.get_node_text)(node, bufnr)
-end
-
-function M.require_language(lang, opts)
- return (ts.language.add or ts.language.require_language)(lang, opts)
-end
-
-function M.flatten(t)
- if vim.fn.has "nvim-0.11" == 1 then
- return vim.iter(t):flatten():totable()
- else
- return vim.tbl_flatten(t)
- end
-end
-
-return M
diff --git a/lua/nvim-treesitter/config.lua b/lua/nvim-treesitter/config.lua
new file mode 100644
index 000000000..e43ad13c2
--- /dev/null
+++ b/lua/nvim-treesitter/config.lua
@@ -0,0 +1,144 @@
+local utils = require('nvim-treesitter.utils')
+
+local M = {}
+
+---@class TSConfig
+---@field sync_install boolean
+---@field auto_install boolean
+---@field ensure_install string[]
+---@field ignore_install string[]
+---@field install_dir string
+
+---@type TSConfig
+local config = {
+ sync_install = false,
+ auto_install = false,
+ ensure_install = {},
+ ignore_install = {},
+ install_dir = utils.join_path(vim.fn.stdpath('data'), 'site'),
+}
+
+---Setup call for users to override configuration configurations.
+---@param user_data TSConfig|nil user configuration table
+function M.setup(user_data)
+ if user_data then
+ if user_data.install_dir then
+ user_data.install_dir = vim.fs.normalize(user_data.install_dir)
+ --TODO(clason): insert after/before site, or leave to user?
+ vim.opt.runtimepath:append(user_data.install_dir)
+ end
+ config = vim.tbl_deep_extend('force', config, user_data)
+ end
+
+ if config.auto_install then
+ vim.api.nvim_create_autocmd('FileType', {
+ callback = function(args)
+ local ft = vim.bo[args.buf].filetype
+ local lang = vim.treesitter.language.get_lang(ft) or ft
+ if
+ require('nvim-treesitter.parsers').configs[lang]
+ and not vim.list_contains(M.installed_parsers(), lang)
+ and not vim.list_contains(config.ignore_install, lang)
+ then
+ require('nvim-treesitter.install').install(lang)
+ end
+ end,
+ })
+ end
+
+ if #config.ensure_install > 0 then
+ local to_install = M.norm_languages(config.ensure_install, { ignored = true, installed = true })
+
+ if #to_install > 0 then
+ require('nvim-treesitter.install').install(to_install, {
+ with_sync = config.sync_install,
+ })
+ end
+ end
+end
+
+-- Returns the install path for parsers, parser info, and queries.
+-- If the specified directory does not exist, it is created.
+---@param dir_name string
+---@return string
+function M.get_install_dir(dir_name)
+ local dir = utils.join_path(config.install_dir, dir_name)
+
+ if not vim.loop.fs_stat(dir) then
+ local ok, error = pcall(vim.fn.mkdir, dir, 'p', '0755')
+ if not ok then
+ vim.notify(error, vim.log.levels.ERROR)
+ end
+ end
+ return dir
+end
+
+---@return string[]
+function M.installed_parsers()
+ local install_dir = M.get_install_dir('parser')
+
+ local installed = {} --- @type string[]
+ for f in vim.fs.dir(install_dir) do
+ local lang = assert(f:match('(.*)%..*'))
+ installed[#installed + 1] = lang
+ end
+
+ return installed
+end
+
+---Normalize languages
+---@param languages? string[]|string
+---@param skip? table
+---@return string[]
+function M.norm_languages(languages, skip)
+ if not languages then
+ return {}
+ end
+ local parsers = require('nvim-treesitter.parsers')
+
+ -- Turn into table
+ if type(languages) == 'string' then
+ languages = { languages }
+ end
+
+ if vim.list_contains(languages, 'all') then
+ if skip and skip.missing then
+ return M.installed_parsers()
+ end
+ languages = parsers.get_available()
+ end
+
+ for i, tier in ipairs(parsers.tiers) do
+ if vim.list_contains(languages, tier) then
+ languages = vim.iter.filter(function(l)
+ return l ~= tier
+ end, languages)
+ vim.list_extend(languages, parsers.get_available(i))
+ end
+ end
+
+ if skip and skip.ignored then
+ local ignored = config.ignore_install
+ languages = vim.iter.filter(function(v)
+ return not vim.list_contains(ignored, v)
+ end, languages)
+ end
+
+ if skip and skip.installed then
+ local installed = M.installed_parsers()
+ languages = vim.iter.filter(function(v)
+ return not vim.list_contains(installed, v)
+ end, languages)
+ end
+
+ if skip and skip.missing then
+ local installed = M.installed_parsers()
+ languages = vim.iter.filter(function(v)
+ return vim.list_contains(installed, v)
+ end, languages)
+ end
+
+ return languages
+end
+
+return M
diff --git a/lua/nvim-treesitter/configs.lua b/lua/nvim-treesitter/configs.lua
deleted file mode 100644
index a3ec30fb2..000000000
--- a/lua/nvim-treesitter/configs.lua
+++ /dev/null
@@ -1,616 +0,0 @@
-local api = vim.api
-
-local queries = require "nvim-treesitter.query"
-local ts = require "nvim-treesitter.compat"
-local parsers = require "nvim-treesitter.parsers"
-local utils = require "nvim-treesitter.utils"
-local caching = require "nvim-treesitter.caching"
-
-local M = {}
-
----@class TSConfig
----@field modules {[string]:TSModule}
----@field sync_install boolean
----@field ensure_installed string[]|string
----@field ignore_install string[]
----@field auto_install boolean
----@field parser_install_dir string|nil
-
----@type TSConfig
-local config = {
- modules = {},
- sync_install = false,
- ensure_installed = {},
- auto_install = false,
- ignore_install = {},
- parser_install_dir = nil,
-}
-
--- List of modules that need to be setup on initialization.
----@type TSModule[][]
-local queued_modules_defs = {}
--- Whether we've initialized the plugin yet.
-local is_initialized = false
-
----@class TSModule
----@field module_path string
----@field enable boolean|string[]|function(string): boolean
----@field disable boolean|string[]|function(string): boolean
----@field keymaps table<string, string>
----@field is_supported function(string): boolean
----@field attach function(string)
----@field detach function(string)
----@field enabled_buffers table<integer, boolean>
----@field additional_vim_regex_highlighting boolean|string[]
-
----@type {[string]: TSModule}
-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", -- set to `false` to disable one of the mappings
- 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.
----@param mod_name string
----@return TSModule|nil
-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 string path to module
----@param bufnr integer|nil buffer number, defaults to current buffer
----@param lang string|nil 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 string 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
-
- api.nvim_create_autocmd("FileType", {
- group = api.nvim_create_augroup("NvimTreesitter-" .. mod, {}),
- callback = function(args)
- require("nvim-treesitter.configs").reattach_module(mod, args.buf)
- end,
- desc = "Reattach module",
- })
-
- 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 string 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 string path to module
----@param bufnr integer 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 string 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
- api.nvim_clear_autocmds { event = "FileType", group = "NvimTreesitter-" .. mod }
- 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 string 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 string path to module
----@param bufnr integer buffer number, defaults to current buffer
----@param lang string 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 {[string]: TSModule}|nil root configuration table to start at
----@param path string|nil 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
-
----@param query_group string
----@param lang string
-function M.edit_query_file(query_group, lang)
- lang = lang or parsers.get_buf_lang()
- local files = ts.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
-
----@param query_group string
----@param lang string
-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 string module
----@param lang string the language of the buffer
----@param bufnr integer the buffer
-function M.is_enabled(mod, lang, bufnr)
- if 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 TSConfig 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 {}
- config.parser_install_dir = user_data.parser_install_dir or nil
- if config.parser_install_dir then
- config.parser_install_dir = vim.fn.expand(config.parser_install_dir, ":p")
- end
-
- config.auto_install = user_data.auto_install or false
- if config.auto_install then
- require("nvim-treesitter.install").setup_auto_install()
- end
-
- 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
- config.ensure_installed = ensure_installed
-
- 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
---- }
----}
----@param mod_defs TSModule[]
-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 string the module name
----@param bufnr integer the buffer
----@param lang string 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 string the module name
----@param bufnr integer the buffer
-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 string the module name
----@param bufnr integer the buffer
----@param lang string 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 {[string]:TSModule}|nil table to find modules
----@return string[] modules list of module paths
-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 string path to the module
----@return TSModule|nil: 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 table|nil the module table
----@return boolean
-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
-
--- If parser_install_dir is not nil is used or created.
--- If parser_install_dir is nil 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.
----@param folder_name string|nil
----@return string|nil, string|nil
-function M.get_parser_install_dir(folder_name)
- folder_name = folder_name or "parser"
-
- local install_dir = config.parser_install_dir or utils.get_package_path()
- local parser_dir = utils.join_path(install_dir, folder_name)
-
- return utils.create_or_reuse_writable_dir(
- parser_dir,
- utils.join_space("Could not create parser dir '", parser_dir, "': "),
- utils.join_space(
- "Parser dir '",
- parser_dir,
- "' should be read/write (see README on how to configure an alternative install location)"
- )
- )
-end
-
-function M.get_parser_info_dir()
- return M.get_parser_install_dir "parser-info"
-end
-
-function M.get_ignored_parser_installs()
- return config.ignore_install or {}
-end
-
-function M.get_ensure_installed_parsers()
- if type(config.ensure_installed) == "string" then
- return { config.ensure_installed }
- end
- return config.ensure_installed or {}
-end
-
-return M
diff --git a/lua/nvim-treesitter/fold.lua b/lua/nvim-treesitter/fold.lua
deleted file mode 100644
index 759599876..000000000
--- a/lua/nvim-treesitter/fold.lua
+++ /dev/null
@@ -1,123 +0,0 @@
-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
-
- ---@type table<number, number>
- local start_counts = {}
- ---@type table<number, number>
- local stop_counts = {}
-
- local prev_start = -1
- local prev_stop = -1
-
- local min_fold_lines = api.nvim_win_get_option(0, "foldminlines")
-
- for _, match in ipairs(matches) do
- local start, stop, stop_col ---@type integer, integer, integer
- if match.metadata and match.metadata.range then
- start, _, stop, stop_col = unpack(match.metadata.range) ---@type integer, integer, integer, integer
- else
- start, _, stop, stop_col = match.node:range() ---@type integer, integer, integer, integer
- end
-
- 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
-
- ---@type string[]
- 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)
-
----@param lnum integer
----@return string
-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/lua/nvim-treesitter/health.lua b/lua/nvim-treesitter/health.lua
index 32741b136..e8c945f6c 100644
--- a/lua/nvim-treesitter/health.lua
+++ b/lua/nvim-treesitter/health.lua
@@ -1,116 +1,119 @@
-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 ts = require "nvim-treesitter.compat"
-
-local health = vim.health or require "health"
-
--- "report_" prefix has been deprecated, use the recommended replacements if they exist.
-local _start = health.start or health.report_start
-local _ok = health.ok or health.report_ok
-local _warn = health.warn or health.report_warn
-local _error = health.error or health.report_error
+local shell = require('nvim-treesitter.shell_cmds')
+local install = require('nvim-treesitter.install')
+local config = require('nvim-treesitter.config')
+local tsq = vim.treesitter.query
local M = {}
local NVIM_TREESITTER_MINIMUM_ABI = 13
+---@return string|nil
+local function ts_cli_version()
+ if vim.fn.executable('tree-sitter') == 1 then
+ local handle = io.popen('tree-sitter -V')
+ if not handle then
+ return
+ end
+ local result = handle:read('*a')
+ handle:close()
+ return vim.split(result, '\n')[1]:match('[^tree%psitter ].*')
+ end
+end
+
local function install_health()
- _start "Installation"
+ vim.health.start('Installation')
- if fn.has "nvim-0.10" ~= 1 then
- _error "Nvim-treesitter requires Nvim 0.10 or newer"
+ if vim.fn.has('nvim-0.10') ~= 1 then
+ vim.health.error('Nvim-treesitter requires Neovim Nightly')
end
- if fn.executable "tree-sitter" == 0 then
- _warn(
- "`tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar,"
- .. " not required for :TSInstall)"
+ if vim.fn.executable('tree-sitter') == 0 then
+ vim.health.warn(
+ '`tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar,'
+ .. ' not required for :TSInstall)'
)
else
- _ok(
- "`tree-sitter` found "
- .. (utils.ts_cli_version() or "(unknown version)")
- .. " (parser generator, only needed for :TSInstallFromGrammar)"
+ vim.health.ok(
+ '`tree-sitter` found '
+ .. (ts_cli_version() or '(unknown version)')
+ .. ' (parser generator, only needed for :TSInstallFromGrammar)'
)
end
- if fn.executable "node" == 0 then
- _warn("`node` executable not found (only needed for :TSInstallFromGrammar," .. " not required for :TSInstall)")
+ if vim.fn.executable('node') == 0 then
+ vim.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"
+ local handle = assert(io.popen('node --version'))
+ local result = handle:read('*a')
handle:close()
- local version = vim.split(result, "\n")[1]
- _ok("`node` found " .. version .. " (only needed for :TSInstallFromGrammar)")
+ local version = vim.split(result, '\n')[1]
+ vim.health.ok('`node` found ' .. version .. ' (only needed for :TSInstallFromGrammar)')
end
- if fn.executable "git" == 0 then
- _error("`git` executable not found.", {
- "Install it with your package manager.",
- "Check that your `$PATH` is set correctly.",
+ if vim.fn.executable('git') == 0 then
+ vim.health.error('`git` executable not found.', {
+ 'Install it with your package manager.',
+ 'Check that your `$PATH` is set correctly.',
})
else
- _ok "`git` executable found."
+ vim.health.ok('`git` executable found.')
end
local cc = shell.select_executable(install.compilers)
if not cc then
- _error("`cc` executable not found.", {
- "Check that any of "
+ vim.health.error('`cc` executable not found.', {
+ 'Check that any of '
.. vim.inspect(install.compilers)
- .. " is in your $PATH"
+ .. ' 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]
- _ok(
- "`"
+ local version = vim.fn.systemlist(cc .. (cc == 'cl' and '' or ' --version'))[1]
+ vim.health.ok(
+ '`'
.. cc
- .. "` executable found. Selected from "
+ .. '` executable found. Selected from '
.. vim.inspect(install.compilers)
- .. (version and ("\nVersion: " .. version) or "")
+ .. (version and ('\nVersion: ' .. version) or '')
)
end
if vim.treesitter.language_version then
if vim.treesitter.language_version >= NVIM_TREESITTER_MINIMUM_ABI then
- _ok(
- "Neovim was compiled with tree-sitter runtime ABI version "
+ vim.health.ok(
+ 'Neovim was compiled with tree-sitter runtime ABI version '
.. vim.treesitter.language_version
- .. " (required >="
+ .. ' (required >='
.. NVIM_TREESITTER_MINIMUM_ABI
- .. "). Parsers must be compatible with runtime ABI."
+ .. '). Parsers must be compatible with runtime ABI.'
)
else
- _error(
- "Neovim was compiled with tree-sitter runtime ABI version "
+ vim.health.error(
+ 'Neovim was compiled with tree-sitter runtime ABI version '
.. vim.treesitter.language_version
- .. ".\n"
- .. "nvim-treesitter expects at least ABI 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."
+ .. '\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
- _start("OS Info:\n" .. vim.inspect(vim.loop.os_uname()))
+ vim.health.start('OS Info:\n' .. vim.inspect(vim.loop.os_uname()))
end
local function query_status(lang, query_group)
- local ok, err = pcall(queries.get_query, lang, query_group)
+ local ok, err = pcall(tsq.get, lang, query_group)
if not ok then
- return "x", err
+ return 'x', err
elseif not err then
- return "."
+ return '.'
else
- return "✓"
+ return '✓'
end
end
@@ -118,59 +121,53 @@ function M.check()
local error_collection = {}
-- Installation dependency checks
install_health()
- queries.invalidate_query_cache()
-- Parser installation checks
- local parser_installation = { "Parser/Features" .. string.rep(" ", 9) .. "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(" ", 20 - (#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
+ local parser_installation = { 'Parser/Features' .. string.rep(' ', 9) .. 'H L F I J' }
+ for _, parser_name in pairs(config.installed_parsers()) do
+ local out = ' - ' .. parser_name .. string.rep(' ', 20 - #parser_name)
+ for _, query_group in pairs(M.bundled_queries) 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
- table.insert(parser_installation, vim.fn.trim(out, " ", 2))
end
+ table.insert(parser_installation, vim.fn.trim(out, ' ', 2))
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}]]
+ Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[J]ections
+ x) errors found in the query, try to run :TSUpdate {lang}]]
table.insert(parser_installation, legend)
-- Finally call the report function
- _start(table.concat(parser_installation, "\n"))
+ vim.health.start(table.concat(parser_installation, '\n'))
if #error_collection > 0 then
- _start "The following errors have been detected:"
+ vim.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 = ts.get_query_files(lang, type)
+ table.insert(lines, lang .. '(' .. type .. '): ' .. err)
+ local files = tsq.get_files(lang, type)
if #files > 0 then
- table.insert(lines, lang .. "(" .. type .. ") is concatenated from the following files:")
+ table.insert(lines, lang .. '(' .. type .. ') is concatenated from the following files:')
for _, file in ipairs(files) do
- local fd = io.open(file, "r")
+ local fd = io.open(file, 'r')
if fd then
- local ok, file_err = pcall(ts.parse_query, lang, fd:read "*a")
+ local ok, file_err = pcall(tsq.parse, lang, fd:read('*a'))
if ok then
- table.insert(lines, '| [OK]:"' .. file .. '"')
+ table.insert(lines, '| [OK]:"' .. file .. '"')
else
- table.insert(lines, '| [ERROR]:"' .. file .. '", failed to load: ' .. file_err)
+ table.insert(lines, '| [ERR]:"' .. file .. '", failed to load: ' .. file_err)
end
fd:close()
end
end
end
- _error(table.concat(lines, "\n"))
+ vim.health.error(table.concat(lines, '\n'))
end
end
end
+M.bundled_queries = { 'highlights', 'locals', 'folds', 'indents', 'injections' }
+
return M
diff --git a/lua/nvim-treesitter/highlight.lua b/lua/nvim-treesitter/highlight.lua
deleted file mode 100644
index 5a3cc2e86..000000000
--- a/lua/nvim-treesitter/highlight.lua
+++ /dev/null
@@ -1,49 +0,0 @@
-local configs = require "nvim-treesitter.configs"
-
-local M = {}
-
----@param config TSModule
----@param lang string
----@return boolean
-local function should_enable_vim_regex(config, lang)
- local additional_hl = config.additional_vim_regex_highlighting
- local is_table = type(additional_hl) == "table"
-
- ---@diagnostic disable-next-line: param-type-mismatch
- return additional_hl and (not is_table or vim.tbl_contains(additional_hl, lang))
-end
-
----@param bufnr integer
----@param lang string
-function M.attach(bufnr, lang)
- local config = configs.get_module "highlight"
- vim.treesitter.start(bufnr, lang)
- if config and should_enable_vim_regex(config, lang) then
- vim.bo[bufnr].syntax = "ON"
- end
-end
-
----@param bufnr integer
-function M.detach(bufnr)
- vim.treesitter.stop(bufnr)
-end
-
----@deprecated
-function M.start(...)
- vim.notify(
- "`nvim-treesitter.highlight.start` is deprecated: use `nvim-treesitter.highlight.attach` or `vim.treesitter.start`",
- vim.log.levels.WARN
- )
- M.attach(...)
-end
-
----@deprecated
-function M.stop(...)
- vim.notify(
- "`nvim-treesitter.highlight.stop` is deprecated: use `nvim-treesitter.highlight.detach` or `vim.treesitter.stop`",
- vim.log.levels.WARN
- )
- M.detach(...)
-end
-
-return M
diff --git a/lua/nvim-treesitter/incremental_selection.lua b/lua/nvim-treesitter/incremental_selection.lua
deleted file mode 100644
index 570f9eed9..000000000
--- a/lua/nvim-treesitter/incremental_selection.lua
+++ /dev/null
@@ -1,176 +0,0 @@
-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 utils = require "nvim-treesitter.utils"
-
-local M = {}
-
----@type table<integer, table<TSNode|nil>>
-local selections = {}
-
-function M.init_selection()
- local buf = api.nvim_get_current_buf()
- parsers.get_parser():parse { vim.fn.line "w0" - 1, vim.fn.line "w$" }
- 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 starts with 1 and the ending is inclusive.
----@return integer, integer, integer, integer
-local function visual_selection_range()
- local _, csrow, cscol, _ = unpack(vim.fn.getpos "v") ---@type integer, integer, integer, integer
- local _, cerow, cecol, _ = unpack(vim.fn.getpos ".") ---@type integer, integer, integer, integer
-
- local start_row, start_col, end_row, end_col ---@type integer, integer, integer, integer
-
- 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
-
----@param node TSNode
----@return boolean
-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
-
----@param get_parent fun(node: TSNode): TSNode|nil
----@return fun():nil
-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 parser = parsers.get_parser()
- parser:parse { vim.fn.line "w0" - 1, vim.fn.line "w$" }
- local node = parser:named_node_for_range(
- { csrow - 1, cscol - 1, cerow - 1, cecol },
- { ignore_injections = false }
- )
- 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] ---@type TSNode
- while true do
- local parent = get_parent(node)
- if not parent or parent == node then
- -- Keep searching in the parent tree
- local root_parser = parsers.get_parser()
- root_parser:parse { vim.fn.line "w0" - 1, vim.fn.line "w$" }
- local current_parser = root_parser:language_for_range { csrow - 1, cscol - 1, cerow - 1, cecol }
- if root_parser == current_parser then
- node = root_parser:named_node_for_range { csrow - 1, cscol - 1, cerow - 1, cecol }
- ts_utils.update_selection(buf, node)
- return
- end
- -- NOTE: parent() method is private
- local parent_parser = current_parser:parent()
- parent = parent_parser:named_node_for_range { csrow - 1, cscol - 1, cerow - 1, cecol }
- 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] ---@type TSNode
- ts_utils.update_selection(buf, node)
-end
-
-local FUNCTION_DESCRIPTIONS = {
- init_selection = "Start selecting nodes with nvim-treesitter",
- node_incremental = "Increment selection to named node",
- scope_incremental = "Increment selection to surrounding scope",
- node_decremental = "Shrink selection to previous named node",
-}
-
----@param bufnr integer
-function M.attach(bufnr)
- local config = configs.get_module "incremental_selection"
- for funcname, mapping in pairs(config.keymaps) do
- if mapping then
- local mode = funcname == "init_selection" and "n" or "x"
- local rhs = M[funcname] ---@type function
-
- if not rhs then
- utils.notify("Unknown keybinding: " .. funcname .. debug.traceback(), vim.log.levels.ERROR)
- else
- vim.keymap.set(mode, mapping, rhs, { buffer = bufnr, silent = true, desc = FUNCTION_DESCRIPTIONS[funcname] })
- end
- end
- end
-end
-
-function M.detach(bufnr)
- local config = configs.get_module "incremental_selection"
- for f, mapping in pairs(config.keymaps) do
- if mapping then
- local mode = f == "init_selection" and "n" or "x"
- local ok, err = pcall(vim.keymap.del, mode, mapping, { buffer = bufnr })
- if not ok then
- utils.notify(string.format('%s "%s" for mode %s', err, mapping, mode), vim.log.levels.ERROR)
- end
- end
- end
-end
-
-return M
diff --git a/lua/nvim-treesitter/indent.lua b/lua/nvim-treesitter/indent.lua
index 19e7ef1ee..6b674dc63 100644
--- a/lua/nvim-treesitter/indent.lua
+++ b/lua/nvim-treesitter/indent.lua
@@ -1,5 +1,4 @@
local ts = vim.treesitter
-local parsers = require "nvim-treesitter.parsers"
local M = {}
@@ -14,13 +13,13 @@ M.comment_parsers = {
}
local function getline(lnum)
- return vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, false)[1] or ""
+ return vim.api.nvim_buf_get_lines(0, lnum - 1, lnum, false)[1] or ''
end
---@param lnum integer
---@return integer
local function get_indentcols_at_line(lnum)
- local _, indentcols = getline(lnum):find "^%s*"
+ local _, indentcols = getline(lnum):find('^%s*')
return indentcols or 0
end
@@ -62,8 +61,8 @@ local function find_delimiter(bufnr, node, delimiter)
local line = vim.api.nvim_buf_get_lines(bufnr, linenr, linenr + 1, false)[1]
local end_char = { child:end_() }
local trimmed_after_delim
- local escaped_delimiter = delimiter:gsub("[%-%.%+%[%]%(%)%$%^%%%?%*]", "%%%1")
- trimmed_after_delim, _ = line:sub(end_char[2] + 1):gsub("[%s" .. escaped_delimiter .. "]*", "")
+ local escaped_delimiter = delimiter:gsub('[%-%.%+%[%]%(%)%$%^%%%?%*]', '%%%1')
+ trimmed_after_delim = line:sub(end_char[2] + 1):gsub('[%s' .. escaped_delimiter .. ']*', '')
return child, #trimmed_after_delim == 0
end
end
@@ -75,7 +74,7 @@ end
---@param hash_fn fun(...): any
---@return F
local function memoize(fn, hash_fn)
- local cache = setmetatable({}, { __mode = "kv" }) ---@type table<any,any>
+ local cache = setmetatable({}, { __mode = 'kv' }) ---@type table<any,any>
return function(...)
local key = hash_fn(...)
@@ -91,47 +90,47 @@ end
local get_indents = memoize(function(bufnr, root, lang)
local map = {
- ["indent.auto"] = {},
- ["indent.begin"] = {},
- ["indent.end"] = {},
- ["indent.dedent"] = {},
- ["indent.branch"] = {},
- ["indent.ignore"] = {},
- ["indent.align"] = {},
- ["indent.zero"] = {},
+ ['indent.auto'] = {},
+ ['indent.begin'] = {},
+ ['indent.end'] = {},
+ ['indent.dedent'] = {},
+ ['indent.branch'] = {},
+ ['indent.ignore'] = {},
+ ['indent.align'] = {},
+ ['indent.zero'] = {},
}
- --TODO(clason): remove when dropping Nvim 0.8 compat
- local query = (ts.query.get or ts.get_query)(lang, "indents")
+ local query = ts.query.get(lang, 'indents')
if not query then
return map
end
for id, node, metadata in query:iter_captures(root, bufnr) do
- if query.captures[id]:sub(1, 1) ~= "_" then
+ if query.captures[id]:sub(1, 1) ~= '_' then
map[query.captures[id]][node:id()] = metadata or {}
end
end
return map
end, function(bufnr, root, lang)
- return tostring(bufnr) .. root:id() .. "_" .. lang
+ return tostring(bufnr) .. root:id() .. '_' .. lang
end)
---@param lnum number (1-indexed)
+---@return integer
function M.get_indent(lnum)
local bufnr = vim.api.nvim_get_current_buf()
- local parser = parsers.get_parser(bufnr)
+ local parser = ts.get_parser(bufnr)
if not parser or not lnum then
return -1
end
- --TODO(clason): replace when dropping Nvim 0.8 compat
- local root_lang = parsers.get_buf_lang(bufnr)
+ local ft = vim.bo[bufnr].filetype
+ local root_lang = vim.treesitter.language.get_lang(ft) or ft
-- 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 { vim.fn.line "w0" - 1, vim.fn.line "w$" }
+ parser:parse({ vim.fn.line('w0') - 1, vim.fn.line('w$') })
end
-- Get language tree with smallest range around node that's not a comment parser
@@ -155,15 +154,14 @@ function M.get_indent(lnum)
end
local q = get_indents(vim.api.nvim_get_current_buf(), root, lang_tree:lang())
- local is_empty_line = string.match(getline(lnum), "^%s*$") ~= nil
local node ---@type TSNode
- if is_empty_line then
+ if getline(lnum):find('^%s*$') then
local prevlnum = vim.fn.prevnonblank(lnum)
local indentcols = get_indentcols_at_line(prevlnum)
local prevline = vim.trim(getline(prevlnum))
-- The final position can be trailing spaces, which should not affect indentation
node = get_last_node_at_line(root, prevlnum, indentcols + #prevline - 1)
- if node:type():match "comment" then
+ if node:type():match('comment') then
-- The final node we capture of the previous line can be a comment node, which should also be ignored
-- Unless the last line is an entire line of comment, ignore the comment range and find the last node again
local first_node = get_first_node_at_line(root, prevlnum, indentcols)
@@ -176,7 +174,7 @@ function M.get_indent(lnum)
node = get_last_node_at_line(root, prevlnum, col)
end
end
- if q["indent.end"][node:id()] then
+ if q['indent.end'][node:id()] then
node = get_first_node_at_line(root, lnum)
end
else
@@ -192,18 +190,18 @@ function M.get_indent(lnum)
end
-- tracks to ensure multiple indent levels are not applied for same line
- local is_processed_by_row = {}
+ local is_processed_by_row = {} --- @type table<integer,boolean>
- if q["indent.zero"][node:id()] then
+ if q['indent.zero'][node:id()] then
return 0
end
while node do
-- do 'autoindent' if not marked as @indent
if
- not q["indent.begin"][node:id()]
- and not q["indent.align"][node:id()]
- and q["indent.auto"][node:id()]
+ not q['indent.begin'][node:id()]
+ and not q['indent.align'][node:id()]
+ and q['indent.auto'][node:id()]
and node:start() < lnum - 1
and lnum - 1 <= node:end_()
then
@@ -214,8 +212,8 @@ function M.get_indent(lnum)
-- 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.begin"][node:id()]
- and q["indent.ignore"][node:id()]
+ not q['indent.begin'][node:id()]
+ and q['indent.ignore'][node:id()]
and node:start() < lnum - 1
and lnum - 1 <= node:end_()
then
@@ -228,7 +226,10 @@ function M.get_indent(lnum)
if
not is_processed_by_row[srow]
- and ((q["indent.branch"][node:id()] and srow == lnum - 1) or (q["indent.dedent"][node:id()] and srow ~= lnum - 1))
+ and (
+ (q['indent.branch'][node:id()] and srow == lnum - 1)
+ or (q['indent.dedent'][node:id()] and srow ~= lnum - 1)
+ )
then
indent = indent - indent_size
is_processed = true
@@ -244,16 +245,16 @@ function M.get_indent(lnum)
if
should_process
and (
- q["indent.begin"][node:id()]
- and (srow ~= erow or is_in_err or q["indent.begin"][node:id()]["indent.immediate"])
- and (srow ~= lnum - 1 or q["indent.begin"][node:id()]["indent.start_at_same_line"])
+ q['indent.begin'][node:id()]
+ and (srow ~= erow or is_in_err or q['indent.begin'][node:id()]['indent.immediate'])
+ and (srow ~= lnum - 1 or q['indent.begin'][node:id()]['indent.start_at_same_line'])
)
then
indent = indent + indent_size
is_processed = true
end
- if is_in_err and not q["indent.align"][node:id()] then
+ if is_in_err and not q['indent.align'][node:id()] then
-- only when the node is in error, promote the
-- first child's aligned indent to the error node
-- to work around ((ERROR "X" . (_)) @aligned_indent (#set! "delimiter" "AB"))
@@ -261,34 +262,41 @@ function M.get_indent(lnum)
-- (ERROR "X" @aligned_indent (#set! "delimiter" "AB") . (_))
-- and we will fish it out here.
for c in node:iter_children() do
- if q["indent.align"][c:id()] then
- q["indent.align"][node:id()] = q["indent.align"][c:id()]
+ if q['indent.align'][c:id()] then
+ q['indent.align'][node:id()] = q['indent.align'][c:id()]
break
end
end
end
-- do not indent for nodes that starts-and-ends on same line and starts on target line (lnum)
- if should_process and q["indent.align"][node:id()] and (srow ~= erow or is_in_err) and (srow ~= lnum - 1) then
- local metadata = q["indent.align"][node:id()]
+ if
+ should_process
+ and q['indent.align'][node:id()]
+ and (srow ~= erow or is_in_err)
+ and (srow ~= lnum - 1)
+ then
+ local metadata = q['indent.align'][node:id()]
local o_delim_node, o_is_last_in_line ---@type TSNode|nil, boolean|nil
local c_delim_node, c_is_last_in_line ---@type TSNode|nil, boolean|nil, boolean|nil
local indent_is_absolute = false
- if metadata["indent.open_delimiter"] then
- o_delim_node, o_is_last_in_line = find_delimiter(bufnr, node, metadata["indent.open_delimiter"])
+ if metadata['indent.open_delimiter'] then
+ o_delim_node, o_is_last_in_line =
+ find_delimiter(bufnr, node, metadata['indent.open_delimiter'])
else
o_delim_node = node
end
- if metadata["indent.close_delimiter"] then
- c_delim_node, c_is_last_in_line = find_delimiter(bufnr, node, metadata["indent.close_delimiter"])
+ if metadata['indent.close_delimiter'] then
+ c_delim_node, c_is_last_in_line =
+ find_delimiter(bufnr, node, metadata['indent.close_delimiter'])
else
c_delim_node = node
end
if o_delim_node then
local o_srow, o_scol = o_delim_node:start()
- local c_srow = nil
+ local c_srow = nil --- @type integer?
if c_delim_node then
- c_srow, _ = c_delim_node:start()
+ c_srow = c_delim_node:start()
end
if o_is_last_in_line then
-- hanging indent (previous line ended with starting delimiter)
@@ -310,7 +318,7 @@ function M.get_indent(lnum)
-- Then its indent level shouldn't be affected by `@aligned_indent` node
indent = math.max(indent - indent_size, 0)
else
- indent = o_scol + (metadata["indent.increment"] or 1)
+ indent = o_scol + (metadata['indent.increment'] or 1)
indent_is_absolute = true
end
end
@@ -321,7 +329,7 @@ function M.get_indent(lnum)
-- then this last line may need additional indent to avoid clashes
-- with the next. `indent.avoid_last_matching_next` controls this behavior,
-- for example this is needed for function parameters.
- avoid_last_matching_next = metadata["indent.avoid_last_matching_next"] or false
+ avoid_last_matching_next = metadata['indent.avoid_last_matching_next'] or false
end
if avoid_last_matching_next then
-- last line must be indented more in cases where
@@ -350,17 +358,4 @@ function M.get_indent(lnum)
return indent
end
----@type table<integer, string>
-local indent_funcs = {}
-
----@param bufnr integer
-function M.attach(bufnr)
- indent_funcs[bufnr] = vim.bo.indentexpr
- vim.bo.indentexpr = "nvim_treesitter#indent()"
-end
-
-function M.detach(bufnr)
- vim.bo.indentexpr = indent_funcs[bufnr]
-end
-
return M
diff --git a/lua/nvim-treesitter/info.lua b/lua/nvim-treesitter/info.lua
deleted file mode 100644
index 6e94b357d..000000000
--- a/lua/nvim-treesitter/info.lua
+++ /dev/null
@@ -1,190 +0,0 @@
-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 _, lang in pairs(parser_list) do
- local is_installed = #api.nvim_get_runtime_file("parser/" .. lang .. ".so", false) > 0
- api.nvim_out_write(lang .. string.rep(" ", max_len - #lang + 1))
- if is_installed then
- api.nvim_out_write "[✓] installed\n"
- elseif pcall(vim.treesitter.inspect_lang, lang) then
- api.nvim_out_write "[✗] not installed (but still loaded. Restart Neovim!)\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'}}
----@param modulelist string[]
----@return table
-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
-
----@param list string[]
----@return integer length
-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
-
----@param curbuf integer
----@param origbuf integer
----@param parserlist string[]
----@param namespace string
----@param modulelist string[]
-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
-
- ---@type string[]
- 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")
- vim.cmd [[
- syntax match TSModuleInfoGood /✓/
- syntax match TSModuleInfoBad /✗/
- syntax match TSModuleInfoHeader /^>>.*$/ contains=TSModuleInfoNamespace
- syntax match TSModuleInfoNamespace /^>> \w*/ contained
- syntax match TSModuleInfoParser /^[^> ]*\ze /
- ]]
-
- local highlights = {
- TSModuleInfoGood = { fg = "LightGreen", bold = true, default = true },
- TSModuleInfoBad = { fg = "Crimson", default = true },
- TSModuleInfoHeader = { link = "Type", default = true },
- TSModuleInfoNamespace = { link = "Statement", default = true },
- TSModuleInfoParser = { link = "Identifier", default = true },
- }
- for k, v in pairs(highlights) do
- api.nvim_set_hl(0, k, v)
- end
-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
-
----@return string[]
-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/lua/nvim-treesitter/init.lua b/lua/nvim-treesitter/init.lua
new file mode 100644
index 000000000..aac1c6ba6
--- /dev/null
+++ b/lua/nvim-treesitter/init.lua
@@ -0,0 +1,11 @@
+local M = {}
+
+function M.setup(...)
+ require('nvim-treesitter.config').setup(...)
+end
+
+function M.indentexpr()
+ return require('nvim-treesitter.indent').get_indent(vim.v.lnum)
+end
+
+return M
diff --git a/lua/nvim-treesitter/install.lua b/lua/nvim-treesitter/install.lua
index cd12dbb81..745c2dd1f 100644
--- a/lua/nvim-treesitter/install.lua
+++ b/lua/nvim-treesitter/install.lua
@@ -1,13 +1,10 @@
local api = vim.api
-local fn = vim.fn
-local luv = vim.loop
+local uv = 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 compat = require "nvim-treesitter.compat"
+local utils = require('nvim-treesitter.utils')
+local parsers = require('nvim-treesitter.parsers')
+local config = require('nvim-treesitter.config')
+local shell = require('nvim-treesitter.shell_cmds')
local M = {}
@@ -17,16 +14,20 @@ local M = {}
---@type table<string, LockfileInfo>
local lockfile = {}
-M.compilers = { vim.fn.getenv "CC", "cc", "gcc", "clang", "cl", "zig" }
-M.prefer_git = fn.has "win32" == 1
+M.compilers = { uv.os_getenv('CC'), 'cc', 'gcc', 'clang', 'cl', 'zig' }
+M.prefer_git = uv.os_uname().sysname == 'Windows_NT'
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 stdout_output = {}
+local stderr_output = {}
+
+---
+--- JOB API functions
+---
local function reset_progress_counter()
if started_commands ~= finished_commands then
@@ -35,199 +36,104 @@ local function reset_progress_counter()
started_commands = 0
finished_commands = 0
failed_commands = 0
- complete_std_output = {}
- complete_error_output = {}
+ stdout_output = {}
+ stderr_output = {}
end
local function get_job_status()
- return "[nvim-treesitter] ["
+ return '[nvim-treesitter] ['
.. finished_commands
- .. "/"
+ .. '/'
.. started_commands
- .. (failed_commands > 0 and ", failed: " .. failed_commands or "")
- .. "]"
+ .. (failed_commands > 0 and ', failed: ' .. failed_commands or '')
+ .. ']'
end
----@param lang string
----@return function
-local function reattach_if_possible_fn(lang, error_on_fail)
- return function()
- for _, buf in ipairs(vim.api.nvim_list_bufs()) do
- if parsers.get_buf_lang(buf) == lang then
- vim._ts_remove_language(lang)
- local ok, err
- if vim.treesitter.language.add then
- local ft = vim.bo[buf].filetype
- ok, err = pcall(vim.treesitter.language.add, lang, { filetype = ft })
- else
- ok, err = pcall(compat.require_language, lang)
- end
- if not ok and error_on_fail then
- vim.notify("Could not load parser for " .. lang .. ": " .. vim.inspect(err))
- end
- for _, mod in ipairs(require("nvim-treesitter.configs").available_modules()) do
- if ok then
- require("nvim-treesitter.configs").reattach_module(mod, buf, lang)
- else
- require("nvim-treesitter.configs").detach_module(mod, buf)
- end
- end
- end
+---@param cmd Command
+---@return string command
+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
-end
-
----@param lang string
----@param validate boolean|nil
----@return InstallInfo
-local function get_parser_install_info(lang, validate)
- local parser_config = parsers.get_parser_configs()[lang]
-
- if not parser_config then
- 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 is_ignored_parser(lang)
- return vim.tbl_contains(configs.get_ignored_parser_installs(), lang)
-end
-
----@param lang string
----@return string|nil
-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
-
- if lockfile[lang] then
- return lockfile[lang].revision
- end
-end
-
----@param lang string
----@return string|nil
-local function get_installed_revision(lang)
- local lang_file = utils.join_path(configs.get_parser_info_dir(), lang .. ".revision")
- if vim.fn.filereadable(lang_file) == 1 then
- return vim.fn.readfile(lang_file)[1]
- end
-end
--- Clean path for use in a prefix comparison
----@param input string
----@return string
-local function clean_path(input)
- local pth = vim.fn.fnamemodify(input, ":p")
- if fn.has "win32" == 1 then
- pth = pth:gsub("/", "\\")
+ local command = string.format('%s %s', cmd.cmd, options)
+ if cmd.opts and cmd.opts.cwd then
+ command = shell.make_directory_change_for_command(cmd.opts.cwd, command)
end
- return pth
+ return command
end
--- Checks if parser is installed with nvim-treesitter
----@param lang string
+---@param cmd_list Command[]
---@return boolean
-local function is_installed(lang)
- local matched_parsers = vim.api.nvim_get_runtime_file("parser/" .. lang .. ".so", true) or {}
- local install_dir = configs.get_parser_install_dir()
- if not install_dir then
- return false
- end
- install_dir = clean_path(install_dir)
- for _, path in ipairs(matched_parsers) do
- local abspath = clean_path(path)
- if vim.startswith(abspath, install_dir) then
- return true
+local function iter_cmd_sync(cmd_list)
+ for _, cmd in ipairs(cmd_list) do
+ if cmd.info then
+ vim.notify(cmd.info)
end
- end
- return false
-end
----@param lang string
----@return boolean
-local function needs_update(lang)
- local revision = get_revision(lang)
- return not revision or revision ~= get_installed_revision(lang)
-end
-
----@return string[]
-local function outdated_parsers()
- return vim.tbl_filter(function(lang) ---@param lang string
- return is_installed(lang) and needs_update(lang)
- end, info.installed_parsers())
-end
-
----@param handle userdata
----@param is_stderr boolean
-local function onread(handle, is_stderr)
- return function(_, 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
+ if type(cmd.cmd) == 'function' then
+ cmd.cmd()
+ else
+ local ret = vim.fn.system(get_command(cmd))
+ if vim.v.shell_error ~= 0 then
+ vim.notify(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
-function M.iter_cmd(cmd_list, i, lang, success_message)
+local function 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)
+ return vim.notify(get_job_status() .. ' ' .. success_message)
end
local attr = cmd_list[i]
if attr.info then
- print(get_job_status() .. " " .. attr.info)
+ vim.notify(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
+ 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)
+ 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)
+ (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)
+ local stdout = uv.new_pipe(false)
+ local stderr = uv.new_pipe(false)
attr.opts.stdio = { nil, stdout, stderr }
---@type userdata
- handle = luv.spawn(
+ handle = uv.spawn(
attr.cmd,
attr.opts,
vim.schedule_wrap(function(code)
@@ -241,87 +147,151 @@ function M.iter_cmd(cmd_list, i, lang, success_message)
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])
+ if stdout_output[handle] and stdout_output[handle] ~= '' then
+ vim.notify(stdout_output[handle])
end
- local err_msg = complete_error_output[handle] or ""
+ local err_msg = stderr_output[handle] or ''
api.nvim_err_writeln(
- "nvim-treesitter["
+ 'nvim-treesitter['
.. lang
- .. "]: "
- .. (attr.err or ("Failed to execute the following command:\n" .. vim.inspect(attr)))
- .. "\n"
+ .. ']: '
+ .. (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)
+ iter_cmd(cmd_list, i + 1, lang, success_message)
end)
)
- luv.read_start(stdout, onread(handle, false))
- luv.read_start(stderr, onread(handle, true))
+ uv.read_start(stdout, function(_, data)
+ if data then
+ stdout_output[handle] = (stdout_output[handle] or '') .. data
+ end
+ end)
+ uv.read_start(stderr, function(_, data)
+ if data then
+ stderr_output[handle] = (stderr_output[handle] or '') .. data
+ end
+ end)
end
end
----@param cmd Command
----@return string command
-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
+---
+--- PARSER INFO
+---
+
+---@param lang string
+---@param validate boolean|nil
+---@return InstallInfo
+local function get_parser_install_info(lang, validate)
+ local parser_config = parsers.configs[lang]
+
+ if not parser_config then
+ error('Parser not available for language "' .. lang .. '"')
end
- local command = string.format("%s %s", cmd.cmd, options)
- if cmd.opts and cmd.opts.cwd then
- command = shell.make_directory_change_for_command(cmd.opts.cwd, command)
+ local install_info = parser_config.install_info
+
+ if validate then
+ vim.validate({
+ url = { install_info.url, 'string' },
+ files = { install_info.files, 'table' },
+ })
end
- return command
+
+ return install_info
end
----@param cmd_list Command[]
+---@param lang string
+---@return string|nil
+local function get_revision(lang)
+ if #lockfile == 0 then
+ local filename = utils.get_package_path('lockfile.json')
+ local file = assert(io.open(filename, 'r'))
+ lockfile = vim.json.decode(file:read('*all'))
+ file:close()
+ end
+
+ local install_info = get_parser_install_info(lang)
+ if install_info.revision then
+ return install_info.revision
+ end
+
+ if lockfile[lang] then
+ return lockfile[lang].revision
+ end
+end
+
+---@param lang string
+---@return string|nil
+local function get_installed_revision(lang)
+ local lang_file = utils.join_path(config.get_install_dir('parser-info'), lang .. '.revision')
+ local file = assert(io.open(lang_file, 'r'))
+ local revision = file:read('*a')
+ file:close()
+ return revision
+end
+
+---@param lang string
---@return boolean
-local function iter_cmd_sync(cmd_list)
- for _, cmd in ipairs(cmd_list) do
- if cmd.info then
- print(cmd.info)
+local function needs_update(lang)
+ local revision = get_revision(lang)
+ return not revision or revision ~= get_installed_revision(lang)
+end
+
+function M.info()
+ local installed = config.installed_parsers()
+ local parser_list = parsers.get_available()
+
+ local max_len = 0
+ for _, lang in pairs(parser_list) do
+ if #lang > max_len then
+ max_len = #lang
end
+ end
- if type(cmd.cmd) == "function" then
- cmd.cmd()
+ for _, lang in pairs(parser_list) do
+ local parser = (lang .. string.rep(' ', max_len - #lang + 1))
+ local output
+ if vim.list_contains(installed, lang) then
+ output = { parser .. '[✓] installed', 'DiagnosticOk' }
+ elseif #api.nvim_get_runtime_file('parser/' .. lang .. '.*', true) > 0 then
+ output = { parser .. '[·] not installed (but available from runtimepath)', 'DiagnosticInfo' }
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
+ output = { parser .. '[✗] not installed' }
end
+ api.nvim_echo({ output }, false, {})
end
-
- return true
end
----@param cache_folder string
----@param install_folder string
+---
+--- PARSER MANAGEMENT FUNCTIONS
+---
+
---@param lang string
----@param repo InstallInfo
+---@param cache_dir string
+---@param install_dir string
+---@param force boolean
---@param with_sync boolean
---@param generate_from_grammar boolean
-local function run_install(cache_folder, install_folder, lang, repo, with_sync, generate_from_grammar)
- parsers.reset_cache()
+local function install_lang(lang, cache_dir, install_dir, force, with_sync, generate_from_grammar)
+ if vim.list_contains(config.installed_parsers(), lang) then
+ if not force then
+ local yesno =
+ vim.fn.input(lang .. ' parser already available: would you like to reinstall ? y/n: ')
+ print('\n ')
+ if yesno:sub(1, 1) ~= 'y' then
+ return
+ end
+ end
+ end
- local path_sep = utils.get_path_sep()
+ local repo = get_parser_install_info(lang)
- local project_name = "tree-sitter-" .. lang
- local maybe_local_path = vim.fn.expand(repo.url)
+ local project_name = 'tree-sitter-' .. lang
+ local maybe_local_path = vim.fs.normalize(repo.url)
local from_local_path = vim.fn.isdirectory(maybe_local_path) == 1
if from_local_path then
repo.url = maybe_local_path
@@ -337,48 +307,45 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
else
local repo_location = project_name
if repo.location then
- repo_location = repo_location .. "/" .. repo.location
+ repo_location = utils.join_path(repo_location, repo.location)
end
- repo_location = repo_location:gsub("/", path_sep)
- compile_location = utils.join_path(cache_folder, repo_location)
+ compile_location = utils.join_path(cache_dir, repo_location)
end
- local parser_lib_name = utils.join_path(install_folder, lang) .. ".so"
+ local parser_lib_name = utils.join_path(install_dir, 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 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 `"
+ 'tree-sitter CLI is needed because the parser for `'
.. lang
- .. "` is marked that it needs "
- .. "to be generated from the grammar definitions to be compatible with nvim!"
+ .. '` needs to be generated from grammar'
)
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", "--no-bindings", "--abi", vim.treesitter.language_version }
- else
- M.ts_generate_args = { "generate", "--no-bindings" }
- end
+ M.ts_generate_args = { 'generate', '--no-bindings', '--abi', vim.treesitter.language_version }
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!"
+ 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) ---@param c string
- return type(c) == "string"
- end, M.compilers),
- '", "'
- ) .. '" are not executable.')
+ api.nvim_err_writeln(
+ 'No C compiler found! "'
+ .. table.concat(
+ vim.tbl_filter(function(c) ---@param c string
+ return type(c) == 'string'
+ end, M.compilers),
+ '", "'
+ )
+ .. '" are not executable.'
+ )
return
end
@@ -400,25 +367,33 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
---@type Command[]
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, {
+ {
+ cmd = function()
+ vim.fn.delete(utils.join_path(cache_dir, project_name), 'rf')
+ end,
+ },
+ })
vim.list_extend(
command_list,
- shell.select_download_commands(repo, project_name, cache_folder, revision, M.prefer_git)
+ shell.select_download_commands(repo, project_name, cache_dir, 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")
+ 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)",
+ 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" },
+ args = { 'install' },
cwd = compile_location,
},
},
@@ -426,8 +401,8 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
end
vim.list_extend(command_list, {
{
- cmd = vim.fn.exepath "tree-sitter",
- info = "Generating source files from grammar.js...",
+ 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,
@@ -438,344 +413,153 @@ local function run_install(cache_folder, install_folder, lang, repo, with_sync,
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(configs.get_parser_info_dir() or "", lang .. ".revision"))
+ uv.fs_copyfile(utils.join_path(compile_location, 'parser.so'), parser_lib_name)
end,
},
- { -- auto-attach modules after installation
- cmd = reattach_if_possible_fn(lang, true),
+ {
+ cmd = function()
+ local file = assert(
+ io.open(
+ utils.join_path(config.get_install_dir('parser-info') or '', lang .. '.revision'),
+ 'w'
+ )
+ )
+ file:write(revision or '')
+ file:close()
+ end,
},
})
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, {
+ {
+ cmd = function()
+ vim.fn.delete(utils.join_path(cache_dir, project_name), 'rf')
+ end,
+ },
+ })
end
if with_sync then
if iter_cmd_sync(command_list) == true then
- print("Treesitter parser for " .. lang .. " has been installed")
+ vim.notify('Parser for ' .. lang .. ' has been installed')
end
else
- M.iter_cmd(command_list, 1, lang, "Treesitter parser for " .. lang .. " has been installed")
+ iter_cmd(command_list, 1, lang, 'Parser for ' .. lang .. ' has been installed')
end
end
----@param lang string
----@param ask_reinstall boolean|string
----@param cache_folder string
----@param install_folder string
----@param with_sync boolean
----@param generate_from_grammar boolean
-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 ok, install_info = pcall(get_parser_install_info, lang, true)
- if not ok then
- vim.notify("Installation not possible: " .. install_info, vim.log.levels.ERROR)
- if not parsers.get_parser_configs()[lang] then
- vim.notify(
- "See https://github.com/nvim-treesitter/nvim-treesitter/#adding-parsers on how to add a new parser!",
- vim.log.levels.INFO
- )
- end
- return
- end
-
- run_install(cache_folder, install_folder, lang, install_info, with_sync, generate_from_grammar)
-end
-
---@class InstallOptions
---@field with_sync boolean
----@field ask_reinstall boolean|string
+---@field force boolean
---@field generate_from_grammar boolean
----@field exclude_configured_parsers boolean
+---@field skip table
-- Install a parser
+---@param languages? string[]|string
---@param options? InstallOptions
----@return function
-local function install(options)
+function M.install(languages, options)
options = options or {}
local with_sync = options.with_sync
- local ask_reinstall = options.ask_reinstall
+ local force = options.force
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 skip = options.skip
- local cache_folder, err = utils.get_cache_dir()
- if err then
- return api.nvim_err_writeln(err)
- end
- assert(cache_folder)
+ reset_progress_counter()
- local install_folder
- install_folder, err = configs.get_parser_install_dir()
- if err then
- return api.nvim_err_writeln(err)
- end
- install_folder = install_folder and clean_path(install_folder)
- assert(install_folder)
+ if vim.fn.executable('git') == 0 then
+ api.nvim_err_writeln('Git is required on your system to run this command')
+ return
+ end
- local languages ---@type string[]
- local ask ---@type boolean|string
- if ... == "all" then
- languages = parsers.available_parsers()
- ask = false
- else
- languages = compat.flatten { ... }
- ask = ask_reinstall
- end
+ local cache_dir = vim.fn.stdpath('cache')
+ local install_dir = config.get_install_dir('parser')
- if exclude_configured_parsers then
- languages = utils.difference(languages, configs.get_ignored_parser_installs())
- end
+ if languages == 'all' then
+ force = true
+ end
- if #languages > 1 then
- reset_progress_counter()
- end
+ languages = config.norm_languages(languages, skip)
- for _, lang in ipairs(languages) do
- install_lang(lang, ask, cache_folder, install_folder, with_sync, generate_from_grammar)
- end
+ for _, lang in ipairs(languages) do
+ install_lang(lang, cache_dir, install_dir, force, with_sync, generate_from_grammar)
+ uv.fs_symlink(
+ utils.get_package_path('runtime', 'queries', lang),
+ utils.join_path(config.get_install_dir('queries'), lang),
+ { dir = true, junction = true } -- needed on Windows (non-junction links require admin)
+ )
end
end
-function M.setup_auto_install()
- local function try_install_curr_lang()
- local lang = parsers.get_buf_lang()
- if parsers.get_parser_configs()[lang] and not is_installed(lang) and not is_ignored_parser(lang) then
- install() { lang }
- end
- end
-
- try_install_curr_lang()
-
- vim.api.nvim_create_autocmd("FileType", {
- pattern = { "*" },
- group = vim.api.nvim_create_augroup("NvimTreesitter-auto_install", { clear = true }),
- callback = try_install_curr_lang,
- })
-end
+---@class UpdateOptions
+---@field with_sync boolean
-function M.update(options)
+---@param languages? string[]|string
+---@param options? UpdateOptions
+function M.update(languages, options)
options = options or {}
- return function(...)
- M.lockfile = {}
- reset_progress_counter()
- if ... and ... ~= "all" then
- ---@type string[]
- local languages = compat.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 = 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(...)
- if vim.tbl_contains({ "all" }, ...) then
- reset_progress_counter()
- local installed = info.installed_parsers()
- M.uninstall(installed)
- elseif ... then
- local ensure_installed_parsers = configs.get_ensure_installed_parsers()
- if ensure_installed_parsers == "all" then
- ensure_installed_parsers = parsers.available_parsers()
- end
- ensure_installed_parsers = utils.difference(ensure_installed_parsers, configs.get_ignored_parser_installs())
+ reset_progress_counter()
+ M.lockfile = {}
- ---@type string[]
- local languages = compat.flatten { ... }
- for _, lang in ipairs(languages) do
- local install_dir, err = configs.get_parser_install_dir()
- if err then
- return api.nvim_err_writeln(err)
- end
- install_dir = install_dir and clean_path(install_dir)
+ languages = config.norm_languages(languages or 'all', { ignored = true, missing = true })
+ languages = vim.iter.filter(needs_update, languages) --- @type string[]
- if vim.tbl_contains(ensure_installed_parsers, lang) then
- vim.notify(
- "Uninstalling "
- .. lang
- .. '. But the parser is still configured in "ensure_installed" setting of nvim-treesitter.'
- .. " Please consider updating your config!",
- vim.log.levels.ERROR
- )
- end
+ if #languages > 0 then
+ M.install(languages, {
+ force = true,
+ with_sync = options.with_sync,
+ })
+ else
+ vim.notify('All parsers are up-to-date')
+ end
+end
- local parser_lib = utils.join_path(install_dir, lang) .. ".so"
- local all_parsers = vim.api.nvim_get_runtime_file("parser/" .. lang .. ".so", true)
- if vim.fn.filereadable(parser_lib) == 1 then
- local command_list = {
- shell.select_rm_file_cmd(parser_lib, "Uninstalling parser for " .. lang),
- {
- cmd = function()
- local all_parsers_after_deletion = vim.api.nvim_get_runtime_file("parser/" .. lang .. ".so", true)
- if #all_parsers_after_deletion > 0 then
- vim.notify(
- "Tried to uninstall parser for "
- .. lang
- .. "! But the parser is still installed (not by nvim-treesitter):"
- .. table.concat(all_parsers_after_deletion, ", "),
- vim.log.levels.ERROR
- )
- end
- end,
- },
- { -- auto-reattach or detach modules after uninstallation
- cmd = reattach_if_possible_fn(lang, false),
- },
- }
- M.iter_cmd(command_list, 1, lang, "Treesitter parser for " .. lang .. " has been uninstalled")
- elseif #all_parsers > 0 then
- vim.notify(
- "Parser for "
- .. lang
- .. " is installed! But not by nvim-treesitter! Please manually remove the following files: "
- .. table.concat(all_parsers, ", "),
- vim.log.levels.ERROR
- )
- end
- end
+--- @param lang string
+--- @param parser string
+--- @param queries string
+local function uninstall(lang, parser, queries)
+ if vim.fn.filereadable(parser) ~= 1 then
+ return
end
+
+ iter_cmd({
+ {
+ cmd = function()
+ uv.fs_unlink(parser)
+ end,
+ },
+ {
+ cmd = function()
+ uv.fs_unlink(queries)
+ end,
+ },
+ }, 1, lang, 'Parser for ' .. lang .. ' has been uninstalled')
end
-function M.write_lockfile(verbose, skip_langs)
- local sorted_parsers = {} ---@type Parser[]
- -- Load previous lockfile
- load_lockfile()
- skip_langs = skip_langs or {}
+--- @param languages string[]|string
+function M.uninstall(languages)
+ reset_progress_counter()
- for k, v in pairs(parsers.get_parser_configs()) do
- table.insert(sorted_parsers, { name = k, parser = v })
- end
+ languages = config.norm_languages(languages or 'all', { missing = true })
- ---@param a Parser
- ---@param b Parser
- table.sort(sorted_parsers, function(a, b)
- return a.name < b.name
- end)
+ local parser_dir = config.get_install_dir('parser')
+ local query_dir = config.get_install_dir('queries')
+ local installed = config.installed_parsers()
- 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 ---@type string
- 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
+ for _, lang in ipairs(languages) do
+ if not vim.list_contains(installed, lang) then
+ vim.notify(
+ 'Parser for ' .. lang .. ' is is not managed by nvim-treesitter',
+ vim.log.levels.ERROR
+ )
else
- print("Skipping " .. v.name)
+ local parser = utils.join_path(parser_dir, lang) .. '.so'
+ local queries = utils.join_path(query_dir, lang)
+ uninstall(lang, parser, queries)
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/lua/nvim-treesitter/locals.lua b/lua/nvim-treesitter/locals.lua
index fed835bbd..fa8496469 100644
--- a/lua/nvim-treesitter/locals.lua
+++ b/lua/nvim-treesitter/locals.lua
@@ -1,29 +1,46 @@
-- Functions to handle locals
-- Locals are a generalization of definition and scopes
--- its the way nvim-treesitter uses to "understand" the code
+-- it's the way nvim-treesitter uses to "understand" the code
-local queries = require "nvim-treesitter.query"
-local ts_utils = require "nvim-treesitter.ts_utils"
-local ts = vim.treesitter
+local query = require('nvim-treesitter.query')
local api = vim.api
+local ts = vim.treesitter
local M = {}
-function M.collect_locals(bufnr)
- return queries.collect_group_results(bufnr, "locals")
+local function get_named_children(node)
+ local nodes = {} ---@type TSNode[]
+ for i = 0, node:named_child_count() - 1, 1 do
+ nodes[i + 1] = node:named_child(i)
+ end
+ return nodes
+end
+
+---@param node TSNode
+---@return TSNode result
+local function get_root_for_node(node)
+ local parent = node
+ local result = node
+
+ while parent ~= nil do
+ result = parent
+ parent = result:parent()
+ end
+
+ return result
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)
+ return query.iter_group_results(bufnr, 'locals', root)
end
---@param bufnr integer
---@return any
-function M.get_locals(bufnr)
- return queries.get_matches(bufnr, "locals")
+function M.collect_locals(bufnr)
+ return query.collect_group_results(bufnr, 'locals')
end
-- Creates unique id for a node based on text and range
@@ -32,17 +49,17 @@ end
---@return string: 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() }, "_")
+ return table.concat({ 'k', node_text or '', scope:range() }, '_')
end
function M.get_definitions(bufnr)
- local locals = M.get_locals(bufnr)
+ local locals = M.collect_locals(bufnr)
local defs = {}
for _, loc in ipairs(locals) do
- if loc["local"]["definition"] then
- table.insert(defs, loc["local"]["definition"])
+ if loc['local.definition'] then
+ table.insert(defs, loc['local.definition'])
end
end
@@ -50,13 +67,13 @@ function M.get_definitions(bufnr)
end
function M.get_scopes(bufnr)
- local locals = M.get_locals(bufnr)
+ local locals = M.collect_locals(bufnr)
local scopes = {}
for _, loc in ipairs(locals) do
- if loc["local"]["scope"] and loc["local"]["scope"].node then
- table.insert(scopes, loc["local"]["scope"].node)
+ if loc['local.scope'] and loc['local.scope'].node then
+ table.insert(scopes, loc['local.scope'].node)
end
end
@@ -64,13 +81,13 @@ function M.get_scopes(bufnr)
end
function M.get_references(bufnr)
- local locals = M.get_locals(bufnr)
+ local locals = M.collect_locals(bufnr)
local refs = {}
for _, loc in ipairs(locals) do
- if loc["local"]["reference"] and loc["local"]["reference"].node then
- table.insert(refs, loc["local"]["reference"].node)
+ if loc['local.reference'] and loc['local.reference'].node then
+ table.insert(refs, loc['local.reference'].node)
end
end
@@ -103,7 +120,7 @@ function M.iter_scope_tree(node, bufnr)
return
end
- local scope = M.containing_scope(last_node, bufnr, false) or ts_utils.get_root_for_node(node)
+ local scope = M.containing_scope(last_node, bufnr, false) or get_root_for_node(node)
last_node = scope:parent()
@@ -117,8 +134,8 @@ end
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))
+ M.recurse_local_nodes(local_def, function(def, _, kind)
+ table.insert(result, vim.tbl_extend('keep', { kind = kind }, def))
end)
return result
@@ -135,7 +152,7 @@ end
---@param full_match? string The full match path to append to
---@param last_match? string The last match
function M.recurse_local_nodes(local_def, accumulator, full_match, last_match)
- if type(local_def) ~= "table" then
+ if type(local_def) ~= 'table' then
return
end
@@ -143,11 +160,36 @@ function M.recurse_local_nodes(local_def, accumulator, full_match, last_match)
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)
+ M.recurse_local_nodes(
+ def,
+ accumulator,
+ full_match and (full_match .. '.' .. match_key) or match_key,
+ match_key
+ )
end
end
end
+---Memoize a function using hash_fn to hash the arguments.
+---@generic F: function
+---@param fn F
+---@param hash_fn fun(...): any
+---@return F
+local function memoize(fn, hash_fn)
+ local cache = setmetatable({}, { __mode = 'kv' }) ---@type table<any,any>
+
+ return function(...)
+ local key = hash_fn(...)
+ if cache[key] == nil then
+ local v = fn(...) ---@type any
+ cache[key] = v ~= nil and v or vim.NIL
+ end
+
+ local v = cache[key]
+ return v ~= vim.NIL and v or nil
+ 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.
@@ -161,7 +203,7 @@ end
--
---@param bufnr integer: the buffer
---@return table result: a table for looking up definitions
-M.get_definitions_lookup_table = ts_utils.memoize_by_buf_tick(function(bufnr)
+M.get_definitions_lookup_table = memoize(function(bufnr)
local definitions = M.get_definitions(bufnr)
local result = {}
@@ -178,6 +220,8 @@ M.get_definitions_lookup_table = ts_utils.memoize_by_buf_tick(function(bufnr)
end
return result
+end, function(bufnr)
+ return tostring(bufnr)
end)
-- Gets all the scopes of a definition based on the scope type
@@ -196,10 +240,10 @@ function M.get_definition_scopes(node, bufnr, scope_type)
-- Definition is valid for the containing scope
-- and the containing scope of that scope
- if scope_type == "parent" then
+ if scope_type == 'parent' then
scope_count = 2
-- Definition is valid in all parent scopes
- elseif scope_type == "global" then
+ elseif scope_type == 'global' then
scope_count = nil
end
@@ -235,7 +279,7 @@ function M.find_definition(node, bufnr)
end
end
- return node, ts_utils.get_root_for_node(node), nil
+ return node, get_root_for_node(node), nil
end
-- Finds usages of a node in a given scope.
@@ -250,12 +294,15 @@ function M.find_usages(node, scope_node, bufnr)
return {}
end
- local scope_node = scope_node or ts_utils.get_root_for_node(node)
+ scope_node = scope_node or get_root_for_node(node)
local usages = {}
for match in M.iter_locals(bufnr, scope_node) do
- match = match["local"]
- if match.reference and match.reference.node and ts.get_node_text(match.reference.node, bufnr) == node_text then
+ if
+ match.reference
+ and match.reference.node
+ and ts.get_node_text(match.reference.node, bufnr) == node_text
+ then
local def_node, _, kind = M.find_definition(match.reference.node, bufnr)
if kind == nil or def_node == node then
@@ -272,8 +319,8 @@ end
---@param allow_scope? boolean
---@return TSNode|nil
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
+ bufnr = bufnr or api.nvim_get_current_buf()
+ allow_scope = allow_scope == nil or allow_scope == true
local scopes = M.get_scopes(bufnr)
if not node or not scopes then
@@ -301,7 +348,7 @@ function M.nested_scope(node, cursor_pos)
local col = cursor_pos.col ---@type integer
local scope = M.containing_scope(node)
- for _, child in ipairs(ts_utils.get_named_children(scope)) do
+ for _, child in ipairs(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
@@ -318,6 +365,9 @@ function M.next_scope(node)
end
local scope = M.containing_scope(node)
+ if not scope then
+ return
+ end
local parent = scope:parent()
if not parent then
@@ -325,7 +375,7 @@ function M.next_scope(node)
end
local is_prev = true
- for _, child in ipairs(ts_utils.get_named_children(parent)) do
+ for _, child in ipairs(get_named_children(parent)) do
if child == scope then
is_prev = false
elseif not is_prev and vim.tbl_contains(scopes, child) then
@@ -345,6 +395,9 @@ function M.previous_scope(node)
end
local scope = M.containing_scope(node)
+ if not scope then
+ return
+ end
local parent = scope:parent()
if not parent then
@@ -352,7 +405,7 @@ function M.previous_scope(node)
end
local is_prev = true
- local children = ts_utils.get_named_children(parent)
+ local children = get_named_children(parent)
for i = #children, 1, -1 do
if children[i] == scope then
is_prev = false
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 31b691209..69e9500fe 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1,43 +1,3 @@
-local api = vim.api
-local ts = vim.treesitter
-
-for ft, lang in pairs {
- automake = "make",
- javascriptreact = "javascript",
- ecma = "javascript",
- jsx = "javascript",
- gyp = "python",
- html_tags = "html",
- ["typescript.tsx"] = "tsx",
- ["terraform-vars"] = "terraform",
- ["html.handlebars"] = "glimmer",
- systemverilog = "verilog",
- dosini = "ini",
- confini = "ini",
- svg = "xml",
- xsd = "xml",
- xslt = "xml",
- expect = "tcl",
- mysql = "sql",
- sbt = "scala",
- neomuttrc = "muttrc",
- clientscript = "runescript",
- --- short-hand list from https://github.com/helix-editor/helix/blob/master/languages.toml
- rs = "rust",
- ex = "elixir",
- js = "javascript",
- ts = "typescript",
- ["c-sharp"] = "csharp",
- hs = "haskell",
- py = "python",
- erl = "erlang",
- typ = "typst",
- pl = "perl",
- uxn = "uxntal",
-} do
- ts.language.register(lang, ft)
-end
-
---@class InstallInfo
---@field url string
---@field branch string|nil
@@ -47,2798 +7,2830 @@ end
---@field requires_generate_from_grammar boolean|nil
---@field location string|nil
---@field use_makefile boolean|nil
----@field cxx_standard string|nil
---@class ParserInfo
---@field install_info InstallInfo
----@field filetype string
+---@field filetype string[]
---@field maintainers string[]
----@field experimental boolean|nil
----@field readme_name string|nil
+---@field tier integer|nil
+---@field readme_note string|nil
----@type ParserInfo[]
-local list = setmetatable({}, {
- __newindex = function(table, parsername, parserconfig)
- rawset(table, parsername, parserconfig)
- if parserconfig.filetype or vim.fn.has "nvim-0.11" == 0 then
- ts.language.register(parsername, parserconfig.filetype or parsername)
- end
- end,
-})
+local M = {}
-list.ada = {
- install_info = {
- url = "https://github.com/briot/tree-sitter-ada",
- files = { "src/parser.c" },
- },
- maintainers = { "@briot" },
-}
+M.tiers = { 'core', 'stable', 'community', 'unstable' }
-list.agda = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-agda",
- files = { "src/parser.c", "src/scanner.c" },
+---@type ParserInfo[]
+M.configs = {
+ ada = {
+ install_info = {
+ url = 'https://github.com/briot/tree-sitter-ada',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@briot' },
},
- maintainers = { "@Decodetalkers" },
-}
-list.angular = {
- install_info = {
- url = "https://github.com/dlvandenberg/tree-sitter-angular",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ agda = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-agda',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Decodetalkers' },
},
- filetype = "htmlangular",
- maintainers = { "@dlvandenberg" },
- experimental = true,
-}
-list.apex = {
- install_info = {
- url = "https://github.com/aheber/tree-sitter-sfapex",
- files = { "src/parser.c" },
- location = "apex",
+ angular = {
+ install_info = {
+ url = 'https://github.com/dlvandenberg/tree-sitter-angular',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@dlvandenberg' },
+ tier = 4,
},
- maintainers = { "@aheber", "@xixiaofinland" },
-}
-list.arduino = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-arduino",
- files = { "src/parser.c", "src/scanner.c" },
+ apex = {
+ install_info = {
+ url = 'https://github.com/aheber/tree-sitter-sfapex',
+ files = { 'src/parser.c' },
+ location = 'apex',
+ },
+ maintainers = { '@aheber', '@xixiafinland' },
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
-}
-list.asm = {
- install_info = {
- url = "https://github.com/RubixDev/tree-sitter-asm",
- files = { "src/parser.c" },
+ arduino = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-arduino',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
},
- maintainers = { "@RubixDev" },
-}
-list.astro = {
- install_info = {
- url = "https://github.com/virchau13/tree-sitter-astro",
- files = { "src/parser.c", "src/scanner.c" },
+ asm = {
+ install_info = {
+ url = 'https://github.com/RubixDev/tree-sitter-asm',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@RubixDev' },
+ tier = 3,
},
- maintainers = { "@virchau13" },
-}
-list.authzed = {
- install_info = {
- url = "https://github.com/mleonidas/tree-sitter-authzed",
- files = { "src/parser.c" },
+ astro = {
+ install_info = {
+ url = 'https://github.com/virchau13/tree-sitter-astro',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@virchau13' },
},
- maintainers = { "@mattpolzin" },
-}
-list.awk = {
- install_info = {
- url = "https://github.com/Beaglefoot/tree-sitter-awk",
- files = { "src/parser.c", "src/scanner.c" },
+ authzed = {
+ install_info = {
+ url = 'https://github.com/mleonidas/tree-sitter-authzed',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@mattpolzin' },
+ tier = 3,
},
-}
-list.bash = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-bash",
- files = { "src/parser.c", "src/scanner.c" },
+ awk = {
+ install_info = {
+ url = 'https://github.com/Beaglefoot/tree-sitter-awk',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
},
- filetype = "sh",
- maintainers = { "@TravonteD" },
-}
-list.bass = {
- install_info = {
- url = "https://github.com/vito/tree-sitter-bass",
- files = { "src/parser.c" },
+ bash = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-bash',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@TravonteD' },
},
- maintainers = { "@amaanq" },
-}
-list.beancount = {
- install_info = {
- url = "https://github.com/polarmutex/tree-sitter-beancount",
- files = { "src/parser.c", "src/scanner.c" },
+ bass = {
+ install_info = {
+ url = 'https://github.com/vito/tree-sitter-bass',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@polarmutex" },
-}
-list.bibtex = {
- install_info = {
- url = "https://github.com/latex-lsp/tree-sitter-bibtex",
- files = { "src/parser.c" },
+ beancount = {
+ install_info = {
+ url = 'https://github.com/polarmutex/tree-sitter-beancount',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@polarmutex' },
},
- filetype = "bib",
- maintainers = { "@theHamsta", "@clason" },
-}
-list.bicep = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-bicep",
- files = { "src/parser.c", "src/scanner.c" },
+ bibtex = {
+ install_info = {
+ url = 'https://github.com/latex-lsp/tree-sitter-bibtex',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta', '@clason' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.bitbake = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-bitbake",
- files = { "src/parser.c", "src/scanner.c" },
+ bicep = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-bicep',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@amaanq" },
-}
-list.blade = {
- install_info = {
- url = "https://github.com/EmranMR/tree-sitter-blade",
- files = { "src/parser.c" },
+ bitbake = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-bitbake',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@calebdw" },
-}
-list.blueprint = {
- install_info = {
- url = "https://gitlab.com/gabmus/tree-sitter-blueprint.git",
- files = { "src/parser.c" },
+ blade = {
+ install_info = {
+ url = 'https://github.com/EmranMR/tree-sitter-blade',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@calebdw' },
+ tier = 2,
},
- maintainers = { "@gabmus" },
- experimental = true,
-}
-
-list.bp = {
- install_info = {
- url = "https://github.com/ambroisie/tree-sitter-bp",
- files = { "src/parser.c" },
+ blueprint = {
+ install_info = {
+ url = 'https://gitlab.com/gabmus/tree-sitter-blueprint.git',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@gabmus' },
+ tier = 4,
},
- maintainers = { "@ambroisie" },
-}
-list.brightscript = {
- install_info = {
- url = "https://github.com/ajdelcimmuto/tree-sitter-brightscript",
- files = { "src/parser.c" },
+ bp = {
+ install_info = {
+ url = 'https://github.com/ambroisie/tree-sitter-bp',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ambroisie' },
+ tier = 3,
+ readme_note = 'Android Blueprint',
},
- maintainers = { "@ajdelcimmuto" },
-}
-
-list.c = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-c",
- files = { "src/parser.c" },
+ brightscript = {
+ install_info = {
+ url = 'https://github.com/ajdelcimmuto/tree-sitter-brightscript',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ajdelcimmuto' },
+ tier = 2,
},
- maintainers = { "@amaanq" },
-}
-
-list.c_sharp = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-c-sharp",
- files = { "src/parser.c", "src/scanner.c" },
+ c = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-c',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 1,
},
- filetype = "cs",
- maintainers = { "@amaanq" },
-}
-list.caddy = {
- install_info = {
- url = "https://github.com/opa-oz/tree-sitter-caddy",
- files = { "src/parser.c", "src/scanner.c" },
+ c_sharp = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-c-sharp',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@opa-oz" },
-}
-list.cairo = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-cairo",
- files = { "src/parser.c", "src/scanner.c" },
+ cairo = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-cairo',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@amaanq" },
-}
-list.capnp = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-capnp",
- files = { "src/parser.c" },
+ caddy = {
+ install_info = {
+ url = 'https://github.com/opa-oz/tree-sitter-caddy',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@opa-oz' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.chatito = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-chatito",
- files = { "src/parser.c" },
+ capnp = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-capnp',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@ObserverOfTime" },
-}
-list.circom = {
- install_info = {
- url = "https://github.com/Decurity/tree-sitter-circom",
- files = { "src/parser.c" },
+ chatito = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-chatito',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
},
- maintainers = { "@alexandr-martirosyan" },
-}
-list.clojure = {
- install_info = {
- url = "https://github.com/sogaiu/tree-sitter-clojure",
- files = { "src/parser.c" },
+ circom = {
+ install_info = {
+ url = 'https://github.com/Decurity/tree-sitter-circom',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@alexandr-martirosyan' },
+ tier = 3,
},
- maintainers = { "@NoahTheDuke" },
-}
-list.cmake = {
- install_info = {
- url = "https://github.com/uyha/tree-sitter-cmake",
- files = { "src/parser.c", "src/scanner.c" },
+ clojure = {
+ install_info = {
+ url = 'https://github.com/sogaiu/tree-sitter-clojure',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@NoahTheDuke' },
},
- maintainers = { "@uyha" },
-}
-list.comment = {
- install_info = {
- url = "https://github.com/stsewd/tree-sitter-comment",
- files = { "src/parser.c", "src/scanner.c" },
+ cmake = {
+ install_info = {
+ url = 'https://github.com/uyha/tree-sitter-cmake',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@uyha' },
},
- maintainers = { "@stsewd" },
-}
-list.commonlisp = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-commonlisp",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ comment = {
+ install_info = {
+ url = 'https://github.com/stsewd/tree-sitter-comment',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@stsewd' },
+ tier = 2,
},
- filetype = "lisp",
- maintainers = { "@theHamsta" },
-}
-list.cooklang = {
- install_info = {
- url = "https://github.com/addcninblue/tree-sitter-cooklang",
- files = { "src/parser.c", "src/scanner.c" },
+ commonlisp = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-commonlisp',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@addcninblue" },
- filetype = "cook",
-}
-list.corn = {
- install_info = {
- url = "https://github.com/jakestanger/tree-sitter-corn",
- files = { "src/parser.c" },
+ cooklang = {
+ install_info = {
+ url = 'https://github.com/addcninblue/tree-sitter-cooklang',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@addcninblue' },
+ tier = 3,
},
- maintainers = { "@jakestanger" },
-}
-list.cpon = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-cpon",
- files = { "src/parser.c" },
+ corn = {
+ install_info = {
+ url = 'https://github.com/jakestanger/tree-sitter-corn',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@jakestanger' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.cpp = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-cpp",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ cpon = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-cpon',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@theHamsta" },
-}
-list.css = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-css",
- files = { "src/parser.c", "src/scanner.c" },
+ cpp = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-cpp',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@TravonteD" },
-}
-list.csv = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-csv",
- files = { "src/parser.c" },
- location = "csv",
+ css = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-css',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@TravonteD' },
},
- maintainers = { "@amaanq" },
-}
-list.cuda = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-cuda",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ csv = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-csv',
+ files = { 'src/parser.c' },
+ location = 'csv',
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@theHamsta" },
-}
-list.cue = {
- install_info = {
- url = "https://github.com/eonpatapon/tree-sitter-cue",
- files = { "src/parser.c", "src/scanner.c" },
+ cuda = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-cuda',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@amaanq" },
-}
-list.cylc = {
- install_info = {
- url = "https://github.com/elliotfontaine/tree-sitter-cylc",
- files = { "src/parser.c" },
+ cue = {
+ install_info = {
+ url = 'https://github.com/eonpatapon/tree-sitter-cue',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@elliotfontaine" },
-}
-list.d = {
- install_info = {
- url = "https://github.com/gdamore/tree-sitter-d",
- files = { "src/parser.c", "src/scanner.c" },
+ cylc = {
+ install_info = {
+ url = 'https://github.com/elliotfontaine/tree-sitter-cylc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@elliotfontaine' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.dart = {
- install_info = {
- url = "https://github.com/UserNobody14/tree-sitter-dart",
- files = { "src/parser.c", "src/scanner.c" },
+ d = {
+ install_info = {
+ url = 'https://github.com/gdamore/tree-sitter-d',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ tier = 2,
+ maintainers = { '@amaanq' },
},
- maintainers = { "@akinsho" },
-}
-list.desktop = {
- install_info = {
- url = "https://github.com/ValdezFOmar/tree-sitter-desktop",
- files = { "src/parser.c" },
+ dart = {
+ install_info = {
+ url = 'https://github.com/UserNobody14/tree-sitter-dart',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@akinsho' },
},
- maintainers = { "@ValdezFOmar" },
-}
-list.devicetree = {
- install_info = {
- url = "https://github.com/joelspadin/tree-sitter-devicetree",
- files = { "src/parser.c" },
+ desktop = {
+ install_info = {
+ url = 'https://github.com/ValdezFOmar/tree-sitter-desktop',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ValdezFOmar' },
+ tier = 3,
},
- filetype = "dts",
- maintainers = { "@jedrzejboczar" },
-}
-list.dhall = {
- install_info = {
- url = "https://github.com/jbellerb/tree-sitter-dhall",
- files = { "src/parser.c", "src/scanner.c" },
+ devicetree = {
+ install_info = {
+ url = 'https://github.com/joelspadin/tree-sitter-devicetree',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@jedrzejboczar' },
},
- maintainers = { "@amaanq" },
-}
-list.diff = {
- install_info = {
- url = "https://github.com/the-mikedavis/tree-sitter-diff",
- files = { "src/parser.c" },
+ dhall = {
+ install_info = {
+ url = 'https://github.com/jbellerb/tree-sitter-dhall',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- filetype = "gitdiff",
- maintainers = { "@gbprod" },
-}
-list.disassembly = {
- install_info = {
- url = "https://github.com/ColinKennedy/tree-sitter-disassembly",
- files = { "src/parser.c", "src/scanner.c" },
+ diff = {
+ install_info = {
+ url = 'https://github.com/the-mikedavis/tree-sitter-diff',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@gbprod' },
},
- maintainers = { "@ColinKennedy" },
-}
-list.djot = {
- install_info = {
- url = "https://github.com/treeman/tree-sitter-djot",
- files = { "src/parser.c", "src/scanner.c" },
+ disassembly = {
+ install_info = {
+ url = 'https://github.com/ColinKennedy/tree-sitter-disassembly',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ColinKennedy' },
+ tier = 3,
},
- maintainers = { "@NoahTheDuke" },
-}
-list.dockerfile = {
- install_info = {
- url = "https://github.com/camdencheek/tree-sitter-dockerfile",
- files = { "src/parser.c", "src/scanner.c" },
+ djot = {
+ install_info = {
+ url = 'https://github.com/treeman/tree-sitter-djot',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@NoahTheDuke' },
+ tier = 3,
},
- maintainers = { "@camdencheek" },
-}
-list.dot = {
- install_info = {
- url = "https://github.com/rydesun/tree-sitter-dot",
- files = { "src/parser.c" },
+ dockerfile = {
+ install_info = {
+ url = 'https://github.com/camdencheek/tree-sitter-dockerfile',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@camdencheek' },
},
- maintainers = { "@rydesun" },
-}
-list.doxygen = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-doxygen",
- files = { "src/parser.c", "src/scanner.c" },
+ dot = {
+ install_info = {
+ url = 'https://github.com/rydesun/tree-sitter-dot',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@rydesun' },
},
- maintainers = { "@amaanq" },
-}
-list.dtd = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-xml",
- files = { "src/parser.c", "src/scanner.c" },
- location = "dtd",
+ doxygen = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-doxygen',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@ObserverOfTime" },
-}
-list.earthfile = {
- install_info = {
- url = "https://github.com/glehmann/tree-sitter-earthfile",
- files = { "src/parser.c", "src/scanner.c" },
+ dtd = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-xml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'dtd',
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@glehmann" },
-}
-list.ebnf = {
- install_info = {
- url = "https://github.com/RubixDev/ebnf",
- files = { "src/parser.c" },
- location = "crates/tree-sitter-ebnf",
+ earthfile = {
+ install_info = {
+ url = 'https://github.com/glehmann/tree-sitter-earthfile',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@glehmann' },
+ tier = 3,
},
- maintainers = { "@RubixDev" },
- experimental = true,
-}
-
-list.editorconfig = {
- install_info = {
- url = "https://github.com/ValdezFOmar/tree-sitter-editorconfig",
- files = { "src/parser.c", "src/scanner.c" },
+ ebnf = {
+ install_info = {
+ url = 'https://github.com/RubixDev/ebnf',
+ files = { 'src/parser.c' },
+ location = 'crates/tree-sitter-ebnf',
+ },
+ maintainers = { '@RubixDev' },
+ tier = 4,
},
- maintainers = { "@ValdezFOmar" },
-}
-list.eds = {
- install_info = {
- url = "https://github.com/uyha/tree-sitter-eds",
- files = { "src/parser.c" },
+ editorconfig = {
+ install_info = {
+ url = 'https://github.com/ValdezFOmar/tree-sitter-editorconfig',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ValdezFOmar' },
+ tier = 3,
},
- maintainers = { "@uyha" },
-}
-list.eex = {
- install_info = {
- url = "https://github.com/connorlay/tree-sitter-eex",
- files = { "src/parser.c" },
+ eds = {
+ install_info = {
+ url = 'https://github.com/uyha/tree-sitter-eds',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@uyha' },
+ tier = 3,
},
- filetype = "eelixir",
- maintainers = { "@connorlay" },
-}
-list.elixir = {
- install_info = {
- url = "https://github.com/elixir-lang/tree-sitter-elixir",
- files = { "src/parser.c", "src/scanner.c" },
+ eex = {
+ install_info = {
+ url = 'https://github.com/connorlay/tree-sitter-eex',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@connorlay' },
},
- maintainers = { "@connorlay" },
-}
-list.elm = {
- install_info = {
- url = "https://github.com/elm-tooling/tree-sitter-elm",
- files = { "src/parser.c", "src/scanner.c" },
+ elixir = {
+ install_info = {
+ url = 'https://github.com/elixir-lang/tree-sitter-elixir',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@connorlay' },
},
- maintainers = { "@zweimach" },
-}
-list.elsa = {
- install_info = {
- url = "https://github.com/glapa-grossklag/tree-sitter-elsa",
- files = { "src/parser.c" },
+ elm = {
+ install_info = {
+ url = 'https://github.com/elm-tooling/tree-sitter-elm',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@zweimach' },
},
- maintainers = { "@glapa-grossklag", "@amaanq" },
-}
-list.elvish = {
- install_info = {
- url = "https://github.com/elves/tree-sitter-elvish",
- files = { "src/parser.c" },
+ elsa = {
+ install_info = {
+ url = 'https://github.com/glapa-grossklag/tree-sitter-elsa',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@glapa-grossklag', '@amaanq' },
},
- maintainers = { "@elves" },
-}
-list.embedded_template = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-embedded-template",
- files = { "src/parser.c" },
+ elvish = {
+ install_info = {
+ url = 'https://github.com/elves/tree-sitter-elvish',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@elves' },
},
- filetype = "eruby",
-}
-list.enforce = {
- install_info = {
- url = "https://github.com/simonvic/tree-sitter-enforce",
- files = { "src/parser.c" },
+ embedded_template = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-embedded-template',
+ files = { 'src/parser.c' },
+ },
},
- maintainers = { "@simonvic" },
-}
-list.erlang = {
- install_info = {
- url = "https://github.com/WhatsApp/tree-sitter-erlang",
- files = { "src/parser.c", "src/scanner.c" },
+ enforce = {
+ install_info = {
+ url = 'https://github.com/simonvic/tree-sitter-enforce',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@simonvic' },
+ tier = 3,
},
- maintainers = { "@filmor" },
-}
-list.facility = {
- install_info = {
- url = "https://github.com/FacilityApi/tree-sitter-facility",
- files = { "src/parser.c" },
+ erlang = {
+ install_info = {
+ url = 'https://github.com/WhatsApp/tree-sitter-erlang',
+ files = { 'src/parser.c', 'src/parser.c' },
+ },
+ maintainers = { '@filmor' },
},
- filetype = "fsd",
- maintainers = { "@bryankenote" },
-}
-list.faust = {
- install_info = {
- url = "https://github.com/khiner/tree-sitter-faust",
- files = { "src/parser.c" },
+ facility = {
+ install_info = {
+ url = 'https://github.com/FacilityApi/tree-sitter-facility',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@bryankenote' },
+ tier = 3,
},
- filetype = "dsp",
- maintainers = { "@khiner" },
-}
-list.fennel = {
- install_info = {
- url = "https://github.com/alexmozaidze/tree-sitter-fennel",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ faust = {
+ install_info = {
+ url = 'https://github.com/khiner/tree-sitter-faust',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@khiner' },
+ tier = 3,
},
- maintainers = { "@alexmozaidze" },
-}
-list.fidl = {
- install_info = {
- url = "https://github.com/google/tree-sitter-fidl",
- files = { "src/parser.c" },
+ fennel = {
+ install_info = {
+ url = 'https://github.com/alexmozaidze/tree-sitter-fennel',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@alexmozaidze' },
},
- maintainers = { "@chaopeng" },
-}
-list.firrtl = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-firrtl",
- files = { "src/parser.c", "src/scanner.c" },
+ fidl = {
+ install_info = {
+ url = 'https://github.com/google/tree-sitter-fidl',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@chaopeng' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.fish = {
- install_info = {
- url = "https://github.com/ram02z/tree-sitter-fish",
- files = { "src/parser.c", "src/scanner.c" },
+ firrtl = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-firrtl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@ram02z" },
-}
-list.foam = {
- install_info = {
- url = "https://github.com/FoamScience/tree-sitter-foam",
- files = { "src/parser.c", "src/scanner.c" },
+ fish = {
+ install_info = {
+ url = 'https://github.com/ram02z/tree-sitter-fish',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ram02z' },
},
- maintainers = { "@FoamScience" },
- -- Queries might change over time on the grammar's side
- -- Otherwise everything runs fine
- experimental = true,
-}
-list.forth = {
- install_info = {
- url = "https://github.com/AlexanderBrevig/tree-sitter-forth",
- files = { "src/parser.c" },
+ foam = {
+ install_info = {
+ url = 'https://github.com/FoamScience/tree-sitter-foam',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@FoamScience' },
+ tier = 4,
},
- maintainers = { "@amaanq" },
-}
-list.fortran = {
- install_info = {
- url = "https://github.com/stadelmanma/tree-sitter-fortran",
- files = { "src/parser.c", "src/scanner.c" },
+ forth = {
+ install_info = {
+ url = 'https://github.com/AlexanderBrevig/tree-sitter-forth',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@amaanq" },
-}
-list.fsh = {
- install_info = {
- url = "https://github.com/mgramigna/tree-sitter-fsh",
- files = { "src/parser.c" },
+ fortran = {
+ install_info = {
+ url = 'https://github.com/stadelmanma/tree-sitter-fortran',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@mgramigna" },
-}
-list.fsharp = {
- install_info = {
- url = "https://github.com/ionide/tree-sitter-fsharp",
- files = { "src/parser.c", "src/scanner.c" },
- location = "fsharp",
+ fsh = {
+ install_info = {
+ url = 'https://github.com/mgramigna/tree-sitter-fsh',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@mgramigna' },
},
- maintainers = { "@nsidorenco" },
-}
-list.func = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-func",
- files = { "src/parser.c" },
+ fsharp = {
+ install_info = {
+ url = 'https://github.com/ionide/tree-sitter-fsharp',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'fsharp',
+ },
+ maintainers = { '@nsidorenco' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.fusion = {
- install_info = {
- url = "https://gitlab.com/jirgn/tree-sitter-fusion.git",
- files = { "src/parser.c", "src/scanner.c" },
+ func = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-func',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@jirgn" },
-}
-list.gap = {
- install_info = {
- url = "https://github.com/gap-system/tree-sitter-gap",
- files = { "src/parser.c", "src/scanner.c" },
+ fusion = {
+ install_info = {
+ url = 'https://gitlab.com/jirgn/tree-sitter-fusion.git',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@jirgn' },
},
- maintainers = { "@reiniscirpons" },
- readme_name = "GAP system",
-}
-list.gaptst = {
- install_info = {
- url = "https://github.com/gap-system/tree-sitter-gaptst",
- files = { "src/parser.c", "src/scanner.c" },
+ gap = {
+ install_info = {
+ url = 'https://github.com/gap-system/tree-sitter-gap',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@reiniscirpons' },
+ readme_name = 'GAP system',
+ tier = 3,
},
- maintainers = { "@reiniscirpons" },
- readme_name = "GAP system test files",
-}
-list.gdscript = {
- install_info = {
- url = "https://github.com/PrestonKnopp/tree-sitter-gdscript",
- files = { "src/parser.c", "src/scanner.c" },
+ gaptst = {
+ install_info = {
+ url = 'https://github.com/gap-system/tree-sitter-gaptst',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@reiniscirpons' },
+ readme_name = 'GAP system test files',
+ requires = { 'gap' },
+ tier = 3,
},
- maintainers = { "@PrestonKnopp" },
- readme_name = "Godot (gdscript)",
-}
-list.gdshader = {
- install_info = {
- url = "https://github.com/GodOfAvacyn/tree-sitter-gdshader",
- files = { "src/parser.c" },
+ gdscript = {
+ install_info = {
+ url = 'https://github.com/PrestonKnopp/tree-sitter-gdscript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@PrestonKnopp' },
+ readme_note = 'Godot',
},
- filetype = "gdshaderinc",
- maintainers = { "@godofavacyn" },
-}
-list.git_rebase = {
- install_info = {
- url = "https://github.com/the-mikedavis/tree-sitter-git-rebase",
- files = { "src/parser.c" },
+ gdshader = {
+ install_info = {
+ url = 'https://github.com/GodOfAvacyn/tree-sitter-gdshader',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@godofavacyn' },
+ tier = 3,
},
- filetype = "gitrebase",
- maintainers = { "@gbprod" },
-}
-list.gitattributes = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-gitattributes",
- files = { "src/parser.c" },
+ git_rebase = {
+ install_info = {
+ url = 'https://github.com/the-mikedavis/tree-sitter-git-rebase',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@gbprod' },
},
- maintainers = { "@ObserverOfTime" },
-}
-list.gitcommit = {
- install_info = {
- url = "https://github.com/gbprod/tree-sitter-gitcommit",
- files = { "src/parser.c", "src/scanner.c" },
+ gitattributes = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-gitattributes',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
},
- maintainers = { "@gbprod" },
-}
-list.git_config = {
- install_info = {
- url = "https://github.com/the-mikedavis/tree-sitter-git-config",
- files = { "src/parser.c" },
+ gitcommit = {
+ install_info = {
+ url = 'https://github.com/gbprod/tree-sitter-gitcommit',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@gbprod' },
},
- filetype = "gitconfig",
- maintainers = { "@amaanq" },
- readme_name = "git_config",
-}
-list.gitignore = {
- install_info = {
- url = "https://github.com/shunsambongi/tree-sitter-gitignore",
- files = { "src/parser.c" },
+ git_config = {
+ install_info = {
+ url = 'https://github.com/the-mikedavis/tree-sitter-git-config',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ readme_note = 'git_config',
},
- maintainers = { "@theHamsta" },
-}
-list.gleam = {
- install_info = {
- url = "https://github.com/gleam-lang/tree-sitter-gleam",
- files = { "src/parser.c", "src/scanner.c" },
+ gitignore = {
+ install_info = {
+ url = 'https://github.com/shunsambongi/tree-sitter-gitignore',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@amaanq" },
-}
-list.glimmer = {
- install_info = {
- url = "https://github.com/ember-tooling/tree-sitter-glimmer",
- files = { "src/parser.c", "src/scanner.c" },
+ gleam = {
+ install_info = {
+ url = 'https://github.com/gleam-lang/tree-sitter-gleam',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- filetype = "handlebars",
- maintainers = { "@NullVoxPopuli" },
- readme_name = "Glimmer and Ember",
-}
-list.glimmer_javascript = {
- install_info = {
- url = "https://github.com/NullVoxPopuli/tree-sitter-glimmer-javascript",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ glimmer = {
+ install_info = {
+ url = 'https://github.com/ember-tooling/tree-sitter-glimmer',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@NullVoxPopuli' },
+ readme_note = 'Glimmer and Ember',
},
- filetype = "javascript.glimmer",
- maintainers = { "@NullVoxPopuli" },
-}
-list.glimmer_typescript = {
- install_info = {
- url = "https://github.com/NullVoxPopuli/tree-sitter-glimmer-typescript",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ glimmer_javascript = {
+ install_info = {
+ url = 'https://github.com/NullVoxPopuli/tree-sitter-glimmer-javascript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@NullVoxPopuli' },
+ requires = { 'javascript' },
+ tier = 3,
},
- filetype = "typescript.glimmer",
- maintainers = { "@NullVoxPopuli" },
-}
-list.glsl = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-glsl",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ glimmer_typescript = {
+ install_info = {
+ url = 'https://github.com/NullVoxPopuli/tree-sitter-glimmer-typescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@NullVoxPopuli' },
+ requires = { 'typescript' },
+ tier = 3,
},
- maintainers = { "@theHamsta" },
-}
-list.gn = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-gn",
- files = { "src/parser.c", "src/scanner.c" },
+ glsl = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-glsl',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@amaanq" },
- readme_name = "GN (Generate Ninja)",
-}
-list.gnuplot = {
- install_info = {
- url = "https://github.com/dpezto/tree-sitter-gnuplot",
- files = { "src/parser.c" },
+ gn = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-gn',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ readme_name = 'GN (Generate Ninja)',
+ tier = 2,
},
- maintainers = { "@dpezto" },
-}
-list.go = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-go",
- files = { "src/parser.c" },
+ gnuplot = {
+ install_info = {
+ url = 'https://github.com/dpezto/tree-sitter-gnuplot',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@dpezto' },
+ tier = 3,
},
- maintainers = { "@theHamsta", "@WinWisely268" },
-}
-list.goctl = {
- install_info = {
- url = "https://github.com/chaozwn/tree-sitter-goctl",
- files = { "src/parser.c" },
+ go = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-go',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta', '@WinWisely268' },
},
- maintainers = { "@chaozwn" },
-}
-list.godot_resource = {
- install_info = {
- url = "https://github.com/PrestonKnopp/tree-sitter-godot-resource",
- files = { "src/parser.c", "src/scanner.c" },
+ goctl = {
+ install_info = {
+ url = 'https://github.com/chaozwn/tree-sitter-goctl',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@chaozwn' },
+ tier = 3,
},
- filetype = "gdresource",
- maintainers = { "@pierpo" },
- readme_name = "Godot Resources (gdresource)",
-}
-list.gomod = {
- install_info = {
- url = "https://github.com/camdencheek/tree-sitter-go-mod",
- files = { "src/parser.c" },
+ godot_resource = {
+ install_info = {
+ url = 'https://github.com/PrestonKnopp/tree-sitter-godot-resource',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@pierpo' },
+ readme_note = 'Godot Resources',
},
- maintainers = { "@camdencheek" },
-}
-list.gosum = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-go-sum",
- files = { "src/parser.c" },
+ gomod = {
+ install_info = {
+ url = 'https://github.com/camdencheek/tree-sitter-go-mod',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@camdencheek' },
},
- maintainers = { "@amaanq" },
-}
-list.gowork = {
- install_info = {
- url = "https://github.com/omertuc/tree-sitter-go-work",
- files = { "src/parser.c" },
+ gosum = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-go-sum',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@omertuc" },
-}
-list.gotmpl = {
- install_info = {
- url = "https://github.com/ngalaiko/tree-sitter-go-template",
- files = { "src/parser.c" },
+ gowork = {
+ install_info = {
+ url = 'https://github.com/omertuc/tree-sitter-go-work',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@omertuc' },
},
- maintainers = { "@qvalentin" },
-}
-list.gpg = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-gpg-config",
- files = { "src/parser.c" },
+ graphql = {
+ install_info = {
+ url = 'https://github.com/bkegley/tree-sitter-graphql',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@bkegley' },
},
- maintainers = { "@ObserverOfTime" },
-}
-list.gren = {
- install_info = {
- files = { "src/parser.c", "src/scanner.c" },
- url = "https://github.com/MaeBrooks/tree-sitter-gren",
+ gotmpl = {
+ install_info = {
+ url = 'https://github.com/ngalaiko/tree-sitter-go-template',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@qvalentin' },
+ tier = 3,
},
- maintainers = { "@MaeBrooks" },
-}
-list.groovy = {
- install_info = {
- url = "https://github.com/murtaza64/tree-sitter-groovy",
- files = { "src/parser.c" },
+ gpg = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-gpg-config',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@murtaza64" },
-}
-list.graphql = {
- install_info = {
- url = "https://github.com/bkegley/tree-sitter-graphql",
- files = { "src/parser.c" },
+ gren = {
+ install_info = {
+ files = { 'src/parser.c', 'src/scanner.c' },
+ url = 'https://github.com/MaeBrooks/tree-sitter-gren',
+ },
+ maintainers = { '@MaeBrooks' },
+ tier = 3,
},
- maintainers = { "@bkegley" },
-}
-list.gstlaunch = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-gstlaunch",
- files = { "src/parser.c" },
+ groovy = {
+ install_info = {
+ url = 'https://github.com/murtaza64/tree-sitter-groovy',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@murtaza64' },
+ tier = 3,
},
- maintainers = { "@theHamsta" },
-}
-list.hack = {
- install_info = {
- url = "https://github.com/slackhq/tree-sitter-hack",
- files = { "src/parser.c", "src/scanner.c" },
+ gstlaunch = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-gstlaunch',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta' },
+ tier = 2,
},
-}
-list.hare = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-hare",
- files = { "src/parser.c" },
+ hack = {
+ install_info = {
+ url = 'https://github.com/slackhq/tree-sitter-hack',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
},
- maintainers = { "@amaanq" },
-}
-list.haskell = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-haskell",
- files = { "src/parser.c", "src/scanner.c" },
+ hare = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-hare',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@mrcjkb" },
-}
-list.haskell_persistent = {
- install_info = {
- url = "https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent",
- files = { "src/parser.c", "src/scanner.c" },
+ haskell = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-haskell',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@mrcjkb' },
},
- filetype = "haskellpersistent",
- maintainers = { "@lykahb" },
-}
-list.hcl = {
- install_info = {
- url = "https://github.com/MichaHoffmann/tree-sitter-hcl",
- files = { "src/parser.c", "src/scanner.c" },
+ haskell_persistent = {
+ install_info = {
+ url = 'https://github.com/MercuryTechnologies/tree-sitter-haskell-persistent',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ filetype = 'haskell.persistent',
+ maintainers = { '@lykahb' },
},
- maintainers = { "@MichaHoffmann" },
-}
-list.heex = {
- install_info = {
- url = "https://github.com/connorlay/tree-sitter-heex",
- files = { "src/parser.c" },
+ hcl = {
+ install_info = {
+ url = 'https://github.com/MichaHoffmann/tree-sitter-hcl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@MichaHoffmann' },
},
- maintainers = { "@connorlay" },
-}
-list.helm = {
- install_info = {
- url = "https://github.com/ngalaiko/tree-sitter-go-template",
- location = "dialects/helm",
- files = { "src/parser.c" },
+ heex = {
+ install_info = {
+ url = 'https://github.com/connorlay/tree-sitter-heex',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@connorlay' },
},
- maintainers = { "@qvalentin" },
-}
-list.hjson = {
- install_info = {
- url = "https://github.com/winston0410/tree-sitter-hjson",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ helm = {
+ install_info = {
+ url = 'https://github.com/ngalaiko/tree-sitter-go-template',
+ location = 'dialects/helm',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@qvalentin' },
+ tier = 3,
},
- maintainers = { "@winston0410" },
-}
-list.hlsl = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-hlsl",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ hjson = {
+ install_info = {
+ url = 'https://github.com/winston0410/tree-sitter-hjson',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@winston0410' },
},
- maintainers = { "@theHamsta" },
-}
-list.hocon = {
- install_info = {
- url = "https://github.com/antosha417/tree-sitter-hocon",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ hlsl = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-hlsl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@antosha417" },
-}
-list.hoon = {
- install_info = {
- url = "https://github.com/urbit-pilled/tree-sitter-hoon",
- files = { "src/parser.c", "src/scanner.c" },
+ hlsplaylist = {
+ install_info = {
+ url = 'https://github.com/Freed-Wu/tree-sitter-hlsplaylist',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Freed-Wu' },
+ tier = 3,
},
- maintainers = { "@urbit-pilled" },
- experimental = true,
-}
-list.html = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-html",
- files = { "src/parser.c", "src/scanner.c" },
+ hocon = {
+ install_info = {
+ url = 'https://github.com/antosha417/tree-sitter-hocon',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@antosha417' },
},
- maintainers = { "@TravonteD" },
-}
-list.htmldjango = {
- install_info = {
- url = "https://github.com/interdependence/tree-sitter-htmldjango",
- files = { "src/parser.c" },
+ hoon = {
+ install_info = {
+ url = 'https://github.com/urbit-pilled/tree-sitter-hoon',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@urbit-pilled' },
+ tier = 4,
},
- maintainers = { "@ObserverOfTime" },
- experimental = true,
-}
-list.http = {
- install_info = {
- url = "https://github.com/rest-nvim/tree-sitter-http",
- files = { "src/parser.c" },
+ html = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-html',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@TravonteD' },
},
- maintainers = { "@amaanq", "@NTBBloodbath" },
-}
-list.hurl = {
- install_info = {
- url = "https://github.com/pfeiferj/tree-sitter-hurl",
- files = { "src/parser.c" },
+ htmldjango = {
+ install_info = {
+ url = 'https://github.com/interdependence/tree-sitter-htmldjango',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 4,
},
- maintainers = { "@pfeiferj" },
-}
-list.hyprlang = {
- install_info = {
- url = "https://github.com/luckasRanarison/tree-sitter-hyprlang",
- files = { "src/parser.c" },
+ http = {
+ install_info = {
+ url = 'https://github.com/rest-nvim/tree-sitter-http',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq', '@NTBBloodbath' },
},
- maintainers = { "@luckasRanarison" },
-}
-list.idl = {
- install_info = {
- url = "https://github.com/cathaysia/tree-sitter-idl",
- files = { "src/parser.c" },
+ hurl = {
+ install_info = {
+ url = 'https://github.com/pfeiferj/tree-sitter-hurl',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@pfeiferj' },
+ tier = 3,
},
- maintainers = { "@cathaysia" },
-}
-list.idris = {
- install_info = {
- url = "https://github.com/kayhide/tree-sitter-idris",
- files = { "src/parser.c", "src/scanner.c" },
+ hyprlang = {
+ install_info = {
+ url = 'https://github.com/luckasRanarison/tree-sitter-hyprlang',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@luckasRanarison' },
+ tier = 3,
},
- filetype = "idris2",
- maintainers = { "@srghma" },
-}
-list.ini = {
- install_info = {
- url = "https://github.com/justinmk/tree-sitter-ini",
- files = { "src/parser.c" },
+ idl = {
+ install_info = {
+ url = 'https://github.com/cathaysia/tree-sitter-idl',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@cathaysia' },
+ tier = 3,
},
- maintainers = { "@theHamsta" },
- experimental = true,
-}
-list.inko = {
- install_info = {
- url = "https://github.com/inko-lang/tree-sitter-inko",
- files = { "src/parser.c" },
+ idris = {
+ install_info = {
+ url = 'https://github.com/kayhide/tree-sitter-idris',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@srghma' },
+ tier = 3,
},
- maintainers = { "@yorickpeterse" },
-}
-list.ipkg = {
- install_info = {
- url = "https://github.com/srghma/tree-sitter-ipkg",
- files = { "src/parser.c", "src/scanner.c" },
+ ini = {
+ install_info = {
+ url = 'https://github.com/justinmk/tree-sitter-ini',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta' },
+ tier = 4,
},
- maintainers = { "@srghma" },
-}
-list.ispc = {
- install_info = {
- url = "https://github.com/fab4100/tree-sitter-ispc",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ inko = {
+ install_info = {
+ url = 'https://github.com/inko-lang/tree-sitter-inko',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@yorickpeterse' },
+ tier = 3,
},
- maintainers = { "@fab4100" },
-}
-list.janet_simple = {
- install_info = {
- url = "https://github.com/sogaiu/tree-sitter-janet-simple",
- files = { "src/parser.c", "src/scanner.c" },
+ ipkg = {
+ install_info = {
+ url = 'https://github.com/srghma/tree-sitter-ipkg',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@srghma' },
+ tier = 3,
},
- filetype = "janet",
- maintainers = { "@sogaiu" },
-}
-list.java = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-java",
- files = { "src/parser.c" },
+ ispc = {
+ install_info = {
+ url = 'https://github.com/fab4100/tree-sitter-ispc',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@fab4100' },
},
- maintainers = { "@p00f" },
-}
-list.javadoc = {
- install_info = {
- url = "https://github.com/rmuir/tree-sitter-javadoc",
- files = { "src/parser.c", "src/scanner.c" },
+ janet_simple = {
+ install_info = {
+ url = 'https://github.com/sogaiu/tree-sitter-janet-simple',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@sogaiu' },
},
- maintainers = { "@rmuir" },
-}
-list.javascript = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-javascript",
- files = { "src/parser.c", "src/scanner.c" },
+ java = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-java',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@p00f' },
},
- maintainers = { "@steelsojka" },
-}
-list.jinja = {
- install_info = {
- url = "https://github.com/cathaysia/tree-sitter-jinja",
- location = "tree-sitter-jinja",
- files = { "src/parser.c", "src/scanner.c" },
+ javadoc = {
+ install_info = {
+ url = 'https://github.com/rmuir/tree-sitter-javadoc',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@rmuir' },
+ tier = 2,
},
- maintainers = { "@cathaysia" },
-}
-list.jinja_inline = {
- install_info = {
- url = "https://github.com/cathaysia/tree-sitter-jinja",
- location = "tree-sitter-jinja_inline",
- files = { "src/parser.c", "src/scanner.c" },
+ javascript = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-javascript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@steelsojka' },
},
- maintainers = { "@cathaysia" },
-}
-list.jq = {
- install_info = {
- url = "https://github.com/flurie/tree-sitter-jq",
- files = { "src/parser.c" },
+ jinja = {
+ install_info = {
+ url = 'https://github.com/cathaysia/tree-sitter-jinja',
+ location = 'tree-sitter-jinja',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@cathaysia' },
+ readme_note = 'basic highlighting',
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
-}
-list.jsdoc = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-jsdoc",
- files = { "src/parser.c", "src/scanner.c" },
+ jinja_inline = {
+ install_info = {
+ url = 'https://github.com/cathaysia/tree-sitter-jinja',
+ location = 'tree-sitter-jinja_inline',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@cathaysia' },
+ readme_note = 'needed for full highlighting',
+ tier = 3,
},
- maintainers = { "@steelsojka" },
-}
-list.json = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-json",
- files = { "src/parser.c" },
+ jq = {
+ install_info = {
+ url = 'https://github.com/flurie/tree-sitter-jq',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
},
- maintainers = { "@steelsojka" },
-}
-list.json5 = {
- install_info = {
- url = "https://github.com/Joakker/tree-sitter-json5",
- files = { "src/parser.c" },
+ jsdoc = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-jsdoc',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@steelsojka' },
},
- maintainers = { "@Joakker" },
-}
-list.jsonc = {
- install_info = {
- url = "https://gitlab.com/WhyNotHugo/tree-sitter-jsonc.git",
- files = { "src/parser.c" },
- generate_requires_npm = true,
+ json = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-json',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@steelsojka' },
},
- maintainers = { "@WhyNotHugo" },
- readme_name = "JSON with comments",
-}
-list.jsonnet = {
- install_info = {
- url = "https://github.com/sourcegraph/tree-sitter-jsonnet",
- files = { "src/parser.c", "src/scanner.c" },
+ json5 = {
+ install_info = {
+ url = 'https://github.com/Joakker/tree-sitter-json5',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Joakker' },
},
- maintainers = { "@nawordar" },
-}
-list.julia = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-julia",
- files = { "src/parser.c", "src/scanner.c" },
+ jsonc = {
+ install_info = {
+ url = 'https://gitlab.com/WhyNotHugo/tree-sitter-jsonc.git',
+ files = { 'src/parser.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@WhyNotHugo' },
+ readme_note = 'JSON with comments',
},
- maintainers = { "@fredrikekre" },
-}
-list.just = {
- install_info = {
- url = "https://github.com/IndianBoy42/tree-sitter-just",
- files = { "src/parser.c", "src/scanner.c" },
+ jsonnet = {
+ install_info = {
+ url = 'https://github.com/sourcegraph/tree-sitter-jsonnet',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@nawordar' },
},
- maintainers = { "@Hubro" },
-}
-list.kcl = {
- install_info = {
- url = "https://github.com/kcl-lang/tree-sitter-kcl",
- files = { "src/parser.c", "src/scanner.c" },
+ julia = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-julia',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@fredrikekre' },
+ tier = 3,
},
- maintainers = { "@bertbaron" },
-}
-list.kconfig = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-kconfig",
- files = { "src/parser.c", "src/scanner.c" },
+ just = {
+ install_info = {
+ url = 'https://github.com/IndianBoy42/tree-sitter-just',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Hubro' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.kdl = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-kdl",
- files = { "src/parser.c", "src/scanner.c" },
+ kcl = {
+ install_info = {
+ url = 'https://github.com/kcl-lang/tree-sitter-kcl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@bertbaron' },
+ tier = 2,
},
- maintainers = { "@amaanq" },
-}
-list.kotlin = {
- install_info = {
- url = "https://github.com/fwcd/tree-sitter-kotlin",
- files = { "src/parser.c", "src/scanner.c" },
+ kconfig = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-kconfig',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@SalBakraa" },
-}
-list.koto = {
- install_info = {
- url = "https://github.com/koto-lang/tree-sitter-koto",
- files = { "src/parser.c", "src/scanner.c" },
+ kdl = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-kdl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@irh" },
-}
-list.kusto = {
- install_info = {
- url = "https://github.com/Willem-J-an/tree-sitter-kusto",
- files = { "src/parser.c" },
+ kotlin = {
+ install_info = {
+ url = 'https://github.com/fwcd/tree-sitter-kotlin',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@SalBakraa' },
},
- maintainers = { "@Willem-J-an" },
-}
-list.lalrpop = {
- install_info = {
- url = "https://github.com/traxys/tree-sitter-lalrpop",
- files = { "src/parser.c", "src/scanner.c" },
+ koto = {
+ install_info = {
+ url = 'https://github.com/koto-lang/tree-sitter-koto',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@irh' },
+ tier = 3,
},
- maintainers = { "@traxys" },
-}
-list.latex = {
- install_info = {
- url = "https://github.com/latex-lsp/tree-sitter-latex",
- files = { "src/parser.c", "src/scanner.c" },
- requires_generate_from_grammar = true,
+ kusto = {
+ install_info = {
+ url = 'https://github.com/Willem-J-an/tree-sitter-kusto',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Willem-J-an' },
+ tier = 3,
},
- filetype = "tex",
- maintainers = { "@theHamsta", "@clason" },
-}
-list.ledger = {
- install_info = {
- url = "https://github.com/cbarrete/tree-sitter-ledger",
- files = { "src/parser.c" },
+ lalrpop = {
+ install_info = {
+ url = 'https://github.com/traxys/tree-sitter-lalrpop',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@traxys' },
},
- maintainers = { "@cbarrete" },
-}
-list.leo = {
- install_info = {
- url = "https://github.com/r001/tree-sitter-leo",
- files = { "src/parser.c" },
+ latex = {
+ install_info = {
+ url = 'https://github.com/latex-lsp/tree-sitter-latex',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { '@theHamsta', '@clason' },
+ tier = 3,
},
- maintainers = { "@r001" },
-}
-list.llvm = {
- install_info = {
- url = "https://github.com/benwilliamgraham/tree-sitter-llvm",
- files = { "src/parser.c" },
+ ledger = {
+ install_info = {
+ url = 'https://github.com/cbarrete/tree-sitter-ledger',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@cbarrete' },
},
- maintainers = { "@benwilliamgraham" },
-}
-list.linkerscript = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-linkerscript",
- files = { "src/parser.c" },
+ leo = {
+ install_info = {
+ url = 'https://github.com/r001/tree-sitter-leo',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@r001' },
+ tier = 3,
},
- filetype = "ld",
- maintainers = { "@amaanq" },
-}
-list.liquid = {
- install_info = {
- url = "https://github.com/hankthetank27/tree-sitter-liquid",
- files = { "src/parser.c", "src/scanner.c" },
+ llvm = {
+ install_info = {
+ url = 'https://github.com/benwilliamgraham/tree-sitter-llvm',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@benwilliamgraham' },
},
- maintainers = { "@hankthetank27" },
-}
-list.liquidsoap = {
- install_info = {
- url = "https://github.com/savonet/tree-sitter-liquidsoap",
- files = { "src/parser.c", "src/scanner.c" },
+ linkerscript = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-linkerscript',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@toots" },
-}
-list.lua = {
- install_info = {
- url = "https://github.com/MunifTanjim/tree-sitter-lua",
- files = { "src/parser.c", "src/scanner.c" },
+ liquid = {
+ install_info = {
+ url = 'https://github.com/hankthetank27/tree-sitter-liquid',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@hankthetank27' },
+ tier = 3,
},
- maintainers = { "@muniftanjim" },
-}
-list.luadoc = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-luadoc",
- files = { "src/parser.c" },
+ liquidsoap = {
+ install_info = {
+ url = 'https://github.com/savonet/tree-sitter-liquidsoap',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@toots' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.luap = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-luap",
- files = { "src/parser.c" },
+ lua = {
+ install_info = {
+ url = 'https://github.com/MunifTanjim/tree-sitter-lua',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ tier = 1,
+ maintainers = { '@muniftanjim' },
},
- maintainers = { "@amaanq" },
- readme_name = "lua patterns",
-}
-list.luau = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-luau",
- files = { "src/parser.c", "src/scanner.c" },
+ luadoc = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-luadoc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@amaanq" },
-}
-list.hlsplaylist = {
- install_info = {
- url = "https://github.com/Freed-Wu/tree-sitter-hlsplaylist",
- files = { "src/parser.c" },
+ luap = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-luap',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ readme_note = 'Lua patterns',
},
- maintainers = { "@Freed-Wu" },
-}
-list.m68k = {
- install_info = {
- url = "https://github.com/grahambates/tree-sitter-m68k",
- files = { "src/parser.c" },
+ luau = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-luau',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- filetype = "asm68k",
- maintainers = { "@grahambates" },
-}
-list.make = {
- install_info = {
- url = "https://github.com/alemuller/tree-sitter-make",
- files = { "src/parser.c" },
+ m68k = {
+ install_info = {
+ url = 'https://github.com/grahambates/tree-sitter-m68k',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@grahambates' },
},
- maintainers = { "@lewis6991" },
-}
-list.markdown = {
- install_info = {
- url = "https://github.com/MDeiml/tree-sitter-markdown",
- location = "tree-sitter-markdown",
- files = { "src/parser.c", "src/scanner.c" },
+ make = {
+ install_info = {
+ url = 'https://github.com/alemuller/tree-sitter-make',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@lewis6991' },
},
- maintainers = { "@MDeiml" },
- readme_name = "markdown (basic highlighting)",
- experimental = true,
-}
-list.markdown_inline = {
- install_info = {
- url = "https://github.com/MDeiml/tree-sitter-markdown",
- location = "tree-sitter-markdown-inline",
- files = { "src/parser.c", "src/scanner.c" },
+ markdown = {
+ install_info = {
+ url = 'https://github.com/MDeiml/tree-sitter-markdown',
+ location = 'tree-sitter-markdown',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@MDeiml' },
+ readme_note = 'basic highlighting',
+ tier = 1,
},
- maintainers = { "@MDeiml" },
- readme_name = "markdown_inline (needed for full highlighting)",
- experimental = true,
-}
-list.matlab = {
- install_info = {
- url = "https://github.com/acristoffers/tree-sitter-matlab",
- files = { "src/parser.c", "src/scanner.c" },
+ markdown_inline = {
+ install_info = {
+ url = 'https://github.com/MDeiml/tree-sitter-markdown',
+ location = 'tree-sitter-markdown-inline',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@MDeiml' },
+ readme_note = 'needed for full highlighting',
+ tier = 1,
},
- maintainers = { "@acristoffers" },
-}
-list.menhir = {
- install_info = {
- url = "https://github.com/Kerl13/tree-sitter-menhir",
- files = { "src/parser.c", "src/scanner.c" },
+ matlab = {
+ install_info = {
+ url = 'https://github.com/acristoffers/tree-sitter-matlab',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@acristoffers' },
},
- maintainers = { "@Kerl13" },
-}
-list.mermaid = {
- install_info = {
- url = "https://github.com/monaqa/tree-sitter-mermaid",
- files = { "src/parser.c" },
+ menhir = {
+ install_info = {
+ url = 'https://github.com/Kerl13/tree-sitter-menhir',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Kerl13' },
},
- experimental = true,
-}
-list.meson = {
- install_info = {
- url = "https://github.com/Decodetalkers/tree-sitter-meson",
- files = { "src/parser.c" },
+ mermaid = {
+ install_info = {
+ url = 'https://github.com/monaqa/tree-sitter-mermaid',
+ files = { 'src/parser.c' },
+ },
+ tier = 4,
},
- maintainers = { "@Decodetalkers" },
-}
-list.mlir = {
- install_info = {
- url = "https://github.com/artagnon/tree-sitter-mlir",
- files = { "src/parser.c" },
- requires_generate_from_grammar = true,
+ meson = {
+ install_info = {
+ url = 'https://github.com/Decodetalkers/tree-sitter-meson',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Decodetalkers' },
},
- experimental = true,
- maintainers = { "@artagnon" },
-}
-list.muttrc = {
- install_info = {
- url = "https://github.com/neomutt/tree-sitter-muttrc",
- files = { "src/parser.c" },
+ mlir = {
+ install_info = {
+ url = 'https://github.com/artagnon/tree-sitter-mlir',
+ files = { 'src/parser.c' },
+ requires_generate_from_grammar = true,
+ },
+ tier = 4,
+ maintainers = { '@artagnon' },
},
- maintainers = { "@Freed-Wu" },
-}
-list.nasm = {
- install_info = {
- url = "https://github.com/naclsn/tree-sitter-nasm",
- files = { "src/parser.c" },
+ muttrc = {
+ install_info = {
+ url = 'https://github.com/neomutt/tree-sitter-muttrc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Freed-Wu' },
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
-}
-list.nginx = {
- install_info = {
- url = "https://github.com/opa-oz/tree-sitter-nginx",
- files = { "src/parser.c", "src/scanner.c" },
+ nasm = {
+ install_info = {
+ url = 'https://github.com/naclsn/tree-sitter-nasm',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@opa-oz" },
-}
-list.nickel = {
- install_info = {
- url = "https://github.com/nickel-lang/tree-sitter-nickel",
- files = { "src/parser.c", "src/scanner.c" },
+ nginx = {
+ install_info = {
+ url = 'https://github.com/opa-oz/tree-sitter-nginx',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@opa-oz' },
+ tier = 3,
},
-}
-list.nim = {
- install_info = {
- url = "https://github.com/alaviss/tree-sitter-nim",
- files = { "src/parser.c", "src/scanner.c" },
+ nickel = {
+ install_info = {
+ url = 'https://github.com/nickel-lang/tree-sitter-nickel',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
},
- maintainers = { "@aMOPel" },
-}
-list.nim_format_string = {
- install_info = {
- url = "https://github.com/aMOPel/tree-sitter-nim-format-string",
- files = { "src/parser.c" },
+ nim = {
+ install_info = {
+ url = 'https://github.com/alaviss/tree-sitter-nim',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@aMOPel' },
+ tier = 3,
},
- maintainers = { "@aMOPel" },
-}
-list.ninja = {
- install_info = {
- url = "https://github.com/alemuller/tree-sitter-ninja",
- files = { "src/parser.c" },
+ nim_format_string = {
+ install_info = {
+ url = 'https://github.com/aMOPel/tree-sitter-nim-format-string',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@aMOPel' },
+ tier = 3,
},
- maintainers = { "@alemuller" },
-}
-list.nix = {
- install_info = {
- url = "https://github.com/cstrahan/tree-sitter-nix",
- files = { "src/parser.c", "src/scanner.c" },
+ ninja = {
+ install_info = {
+ url = 'https://github.com/alemuller/tree-sitter-ninja',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@alemuller' },
},
- maintainers = { "@leo60228" },
-}
-list.norg = {
- install_info = {
- url = "https://github.com/nvim-neorg/tree-sitter-norg",
- files = { "src/parser.c", "src/scanner.cc" },
- cxx_standard = "c++14",
- use_makefile = true,
+ nix = {
+ install_info = {
+ url = 'https://github.com/cstrahan/tree-sitter-nix',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@leo60228' },
},
- maintainers = { "@JoeyGrajciar", "@vhyrro" },
-}
-list.nqc = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-nqc",
- files = { "src/parser.c" },
+ norg = {
+ install_info = {
+ url = 'https://github.com/nvim-neorg/tree-sitter-norg',
+ files = { 'src/parser.c', 'src/scanner.cc' },
+ use_makefile = true,
+ },
+ tier = 4,
+ maintainers = { '@JoeyGrajciar', '@vhyrro' },
},
- maintainers = { "@amaanq" },
-}
-list.nu = {
- install_info = {
- url = "https://github.com/nushell/tree-sitter-nu",
- files = { "src/parser.c", "src/scanner.c" },
+ nqc = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-nqc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@abhisheksingh0x558" },
-}
-list.objc = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-objc",
- files = { "src/parser.c" },
+ nu = {
+ install_info = {
+ url = 'https://github.com/nushell/tree-sitter-nu',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@abhisheksingh0x558' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.objdump = {
- install_info = {
- url = "https://github.com/ColinKennedy/tree-sitter-objdump",
- files = { "src/parser.c", "src/scanner.c" },
+ objc = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-objc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@ColinKennedy" },
-}
-list.ocaml = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-ocaml",
- files = { "src/parser.c", "src/scanner.c" },
- location = "grammars/ocaml",
+ objdump = {
+ install_info = {
+ url = 'https://github.com/ColinKennedy/tree-sitter-objdump',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ColinKennedy' },
+ tier = 3,
},
- maintainers = { "@undu" },
-}
-list.ocaml_interface = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-ocaml",
- files = { "src/parser.c", "src/scanner.c" },
- location = "grammars/interface",
+ ocaml = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-ocaml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'grammars/ocaml',
+ },
+ maintainers = { '@undu' },
},
- filetype = "ocamlinterface",
- maintainers = { "@undu" },
-}
-list.ocamllex = {
- install_info = {
- url = "https://github.com/atom-ocaml/tree-sitter-ocamllex",
- files = { "src/parser.c", "src/scanner.c" },
- requires_generate_from_grammar = true,
+ ocaml_interface = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-ocaml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'grammars/interface',
+ },
+ maintainers = { '@undu' },
},
- maintainers = { "@undu" },
-}
-list.odin = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-odin",
- files = { "src/parser.c", "src/scanner.c" },
+ ocamllex = {
+ install_info = {
+ url = 'https://github.com/atom-ocaml/tree-sitter-ocamllex',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { '@undu' },
},
- maintainers = { "@amaanq" },
-}
-list.pascal = {
- install_info = {
- url = "https://github.com/Isopod/tree-sitter-pascal",
- files = { "src/parser.c" },
+ odin = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-odin',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@Isopod" },
-}
-list.passwd = {
- install_info = {
- url = "https://github.com/ath3/tree-sitter-passwd",
- files = { "src/parser.c" },
+ pascal = {
+ install_info = {
+ url = 'https://github.com/Isopod/tree-sitter-pascal',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Isopod' },
},
- maintainers = { "@amaanq" },
-}
-list.pem = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-pem",
- files = { "src/parser.c" },
+ passwd = {
+ install_info = {
+ url = 'https://github.com/ath3/tree-sitter-passwd',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@ObserverOfTime" },
-}
-list.perl = {
- install_info = {
- url = "https://github.com/tree-sitter-perl/tree-sitter-perl",
- files = { "src/parser.c", "src/scanner.c" },
- branch = "release",
+ pem = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-pem',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@RabbiVeesh", "@LeoNerd" },
-}
-list.php = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-php",
- location = "php",
- files = { "src/parser.c", "src/scanner.c" },
+ perl = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-perl/tree-sitter-perl',
+ branch = 'release',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@RabbiVeesh', '@LeoNerd' },
},
- maintainers = { "@tk-shirasaka", "@calebdw" },
-}
-list.php_only = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-php",
- location = "php_only",
- files = { "src/parser.c", "src/scanner.c" },
+ php = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-php',
+ location = 'php',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@tk-shirasaka', '@calebdw' },
+ requires = { 'php_only' },
+ readme_note = 'PHP with embedded HTML',
},
- maintainers = { "@tk-shirasaka", "@calebdw" },
-}
--- Parsers for injections
-list.phpdoc = {
- install_info = {
- url = "https://github.com/claytonrcarter/tree-sitter-phpdoc",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ php_only = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-php',
+ location = 'php_only',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@tk-shirasaka', '@calebdw' },
+ readme_note = 'PHP without embedded HTML',
},
- maintainers = { "@mikehaertl" },
- experimental = true,
-}
-list.pioasm = {
- install_info = {
- url = "https://github.com/leo60228/tree-sitter-pioasm",
- files = { "src/parser.c", "src/scanner.c" },
+ phpdoc = {
+ install_info = {
+ url = 'https://github.com/claytonrcarter/tree-sitter-phpdoc',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@mikehaertl' },
+ tier = 4,
},
- maintainers = { "@leo60228" },
-}
-list.po = {
- install_info = {
- url = "https://github.com/erasin/tree-sitter-po",
- files = { "src/parser.c" },
+ pioasm = {
+ install_info = {
+ url = 'https://github.com/leo60228/tree-sitter-pioasm',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@leo60228' },
},
- maintainers = { "@amaanq" },
-}
-list.pod = {
- install_info = {
- url = "https://github.com/tree-sitter-perl/tree-sitter-pod",
- files = { "src/parser.c", "src/scanner.c" },
- branch = "release",
+ po = {
+ install_info = {
+ url = 'https://github.com/erasin/tree-sitter-po',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@RabbiVeesh", "@LeoNerd" },
-}
-list.poe_filter = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-poe-filter",
- files = { "src/parser.c" },
+ pod = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-perl/tree-sitter-pod',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ branch = 'release',
+ },
+ maintainers = { '@RabbiVeesh', '@LeoNerd' },
+ tier = 3,
},
- filetype = "poefilter",
- maintainers = { "@ObserverOfTime" },
- readme_name = "Path of Exile item filter",
- experimental = true,
-}
-list.pony = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-pony",
- files = { "src/parser.c", "src/scanner.c" },
+ poe_filter = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-poe-filter',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ readme_note = 'Path of Exile item filter',
+ tier = 4,
},
- maintainers = { "@amaanq", "@mfelsche" },
-}
-list.powershell = {
- install_info = {
- url = "https://github.com/airbus-cert/tree-sitter-powershell",
- files = { "src/parser.c", "src/scanner.c" },
+ pony = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-pony',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq', '@mfelsche' },
},
- filetype = "ps1",
- maintainers = { "@L2jLiga" },
-}
-list.printf = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-printf",
- files = { "src/parser.c" },
+ powershell = {
+ install_info = {
+ url = 'https://github.com/airbus-cert/tree-sitter-powershell',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ filetype = 'ps1',
+ maintainers = { '@L2jLiga' },
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
-}
-list.prisma = {
- install_info = {
- url = "https://github.com/victorhqc/tree-sitter-prisma",
- files = { "src/parser.c" },
+ printf = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-printf',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@elianiva" },
-}
-list.problog = {
- install_info = {
- url = "https://github.com/foxyseta/tree-sitter-prolog",
- files = { "src/parser.c" },
- location = "grammars/problog",
+ prisma = {
+ install_info = {
+ url = 'https://github.com/victorhqc/tree-sitter-prisma',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@elianiva' },
},
- maintainers = { "@foxyseta" },
-}
-list.prolog = {
- install_info = {
- url = "https://github.com/foxyseta/tree-sitter-prolog",
- files = { "src/parser.c" },
- location = "grammars/prolog",
+ problog = {
+ install_info = {
+ url = 'https://github.com/foxyseta/tree-sitter-prolog',
+ files = { 'src/parser.c' },
+ location = 'grammars/problog',
+ },
+ maintainers = { '@foxyseta' },
+ requires = { 'prolog' },
+ tier = 3,
},
- maintainers = { "@foxyseta" },
-}
-list.promql = {
- install_info = {
- url = "https://github.com/MichaHoffmann/tree-sitter-promql",
- files = { "src/parser.c" },
- experimental = true,
+ prolog = {
+ install_info = {
+ url = 'https://github.com/foxyseta/tree-sitter-prolog',
+ files = { 'src/parser.c' },
+ location = 'grammars/prolog',
+ },
+ maintainers = { '@foxyseta' },
+ tier = 3,
},
- maintainers = { "@MichaHoffmann" },
-}
-list.properties = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-properties",
- files = { "src/parser.c", "src/scanner.c" },
+ properties = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-properties',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
+ readme_note = 'Java properties files',
},
- filetype = "jproperties",
- maintainers = { "@ObserverOfTime" },
-}
-list.proto = {
- install_info = {
- url = "https://github.com/treywood/tree-sitter-proto",
- files = { "src/parser.c" },
+ proto = {
+ install_info = {
+ url = 'https://github.com/treywood/tree-sitter-proto',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@treywood' },
},
- maintainers = { "@treywood" },
-}
-list.prql = {
- install_info = {
- url = "https://github.com/PRQL/tree-sitter-prql",
- files = { "src/parser.c" },
+ promql = {
+ install_info = {
+ url = 'https://github.com/MichaHoffmann/tree-sitter-promql',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@MichaHoffmann' },
+ tier = 4,
},
- maintainers = { "@matthias-Q" },
-}
-list.psv = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-csv",
- files = { "src/parser.c" },
- location = "psv",
+ prql = {
+ install_info = {
+ url = 'https://github.com/PRQL/tree-sitter-prql',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@matthias-Q' },
},
- maintainers = { "@amaanq" },
-}
-list.pug = {
- install_info = {
- url = "https://github.com/zealot128/tree-sitter-pug",
- files = { "src/parser.c", "src/scanner.c" },
+ psv = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-csv',
+ files = { 'src/parser.c' },
+ location = 'psv',
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@zealot128" },
- experimental = true,
-}
-list.puppet = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-puppet",
- files = { "src/parser.c" },
+ pug = {
+ install_info = {
+ url = 'https://github.com/zealot128/tree-sitter-pug',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@zealot128' },
+ tier = 4,
},
- maintainers = { "@amaanq" },
-}
-list.purescript = {
- install_info = {
- url = "https://github.com/postsolar/tree-sitter-purescript",
- files = { "src/parser.c", "src/scanner.c" },
+ puppet = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-puppet',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@postsolar" },
-}
-list.pymanifest = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-pymanifest",
- files = { "src/parser.c" },
+ purescript = {
+ install_info = {
+ url = 'https://github.com/postsolar/tree-sitter-purescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@postsolar' },
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
- readme_name = "PyPA manifest",
-}
-list.python = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-python",
- files = { "src/parser.c", "src/scanner.c" },
+ pymanifest = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-pymanifest',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ readme_name = 'PyPA manifest',
+ tier = 2,
},
- maintainers = { "@stsewd", "@theHamsta" },
-}
-list.ql = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-ql",
- files = { "src/parser.c" },
+ python = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-python',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@stsewd', '@theHamsta' },
},
- maintainers = { "@pwntester" },
-}
-list.qmldir = {
- install_info = {
- url = "https://github.com/Decodetalkers/tree-sitter-qmldir",
- files = { "src/parser.c" },
+ ql = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-ql',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@pwntester' },
},
- maintainers = { "@amaanq" },
-}
-list.qmljs = {
- install_info = {
- url = "https://github.com/yuja/tree-sitter-qmljs",
- files = { "src/parser.c", "src/scanner.c" },
+ qmldir = {
+ install_info = {
+ url = 'https://github.com/Decodetalkers/tree-sitter-qmldir',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- filetype = "qml",
- maintainers = { "@Decodetalkers" },
-}
-list.query = {
- install_info = {
- url = "https://github.com/nvim-treesitter/tree-sitter-query",
- files = { "src/parser.c" },
+ qmljs = {
+ install_info = {
+ url = 'https://github.com/yuja/tree-sitter-qmljs',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Decodetalkers' },
},
- maintainers = { "@steelsojka" },
- readme_name = "Tree-Sitter query language",
-}
-list.r = {
- install_info = {
- url = "https://github.com/r-lib/tree-sitter-r",
- files = { "src/parser.c", "src/scanner.c" },
+ query = {
+ install_info = {
+ url = 'https://github.com/nvim-treesitter/tree-sitter-query',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@steelsojka' },
+ readme_note = 'Tree-sitter query language',
+ tier = 1,
},
- maintainers = { "@ribru17" },
-}
-list.racket = {
- install_info = {
- url = "https://github.com/6cdh/tree-sitter-racket",
- files = { "src/parser.c", "src/scanner.c" },
+ r = {
+ install_info = {
+ url = 'https://github.com/r-lib/tree-sitter-r',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ribru17' },
+ tier = 3,
},
-}
-list.ralph = {
- install_info = {
- url = "https://github.com/alephium/tree-sitter-ralph",
- files = { "src/parser.c" },
+ racket = {
+ install_info = {
+ url = 'https://github.com/6cdh/tree-sitter-racket',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ tier = 4,
},
- maintainers = { "@tdroxler" },
-}
-list.rasi = {
- install_info = {
- url = "https://github.com/Fymyte/tree-sitter-rasi",
- files = { "src/parser.c" },
+ ralph = {
+ install_info = {
+ url = 'https://github.com/alephium/tree-sitter-ralph',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@tdroxler' },
+ tier = 3,
},
- maintainers = { "@Fymyte" },
-}
-list.razor = {
- install_info = {
- url = "https://github.com/tris203/tree-sitter-razor",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ rasi = {
+ install_info = {
+ url = 'https://github.com/Fymyte/tree-sitter-rasi',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Fymyte' },
},
- maintainers = { "@tris203" },
-}
-list.rbs = {
- install_info = {
- url = "https://github.com/joker1007/tree-sitter-rbs",
- files = { "src/parser.c" },
+ razor = {
+ install_info = {
+ url = 'https://github.com/tris203/tree-sitter-razor',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@tris203' },
+ tier = 3,
},
- maintainers = { "@joker1007" },
-}
-list.re2c = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-re2c",
- files = { "src/parser.c" },
+ rbs = {
+ install_info = {
+ url = 'https://github.com/joker1007/tree-sitter-rbs',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@joker1007' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.readline = {
- install_info = {
- url = "https://github.com/ribru17/tree-sitter-readline",
- files = { "src/parser.c" },
+ re2c = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-re2c',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@ribru17" },
-}
-list.regex = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-regex",
- files = { "src/parser.c" },
+ readline = {
+ install_info = {
+ url = 'https://github.com/ribru17/tree-sitter-readline',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ribru17' },
+ tier = 3,
},
- maintainers = { "@theHamsta" },
-}
-list.rego = {
- install_info = {
- url = "https://github.com/FallenAngel97/tree-sitter-rego",
- files = { "src/parser.c" },
+ regex = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-regex',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@FallenAngel97" },
-}
-list.requirements = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-requirements",
- files = { "src/parser.c" },
+ rego = {
+ install_info = {
+ url = 'https://github.com/FallenAngel97/tree-sitter-rego',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@FallenAngel97' },
},
- maintainers = { "@ObserverOfTime" },
- readme_name = "pip requirements",
-}
-list.rescript = {
- install_info = {
- url = "https://github.com/rescript-lang/tree-sitter-rescript",
- files = { "src/parser.c", "src/scanner.c" },
+ requirements = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-requirements',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ readme_name = 'pip requirements',
+ tier = 2,
},
- maintainers = { "@ribru17" },
-}
-list.rnoweb = {
- install_info = {
- url = "https://github.com/bamonroe/tree-sitter-rnoweb",
- files = { "src/parser.c", "src/scanner.c" },
+ rescript = {
+ install_info = {
+ url = 'https://github.com/rescript-lang/tree-sitter-rescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ribru17' },
+ tier = 2,
},
- maintainers = { "@bamonroe" },
-}
-list.robot = {
- install_info = {
- url = "https://github.com/Hubro/tree-sitter-robot",
- files = { "src/parser.c" },
+ rnoweb = {
+ install_info = {
+ url = 'https://github.com/bamonroe/tree-sitter-rnoweb',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@bamonroe' },
},
- maintainers = { "@Hubro" },
-}
-list.robots = {
- install_info = {
- url = "https://github.com/opa-oz/tree-sitter-robots-txt",
- files = { "src/parser.c", "src/scanner.c" },
+ robot = {
+ install_info = {
+ url = 'https://github.com/Hubro/tree-sitter-robot',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Hubro' },
+ tier = 3,
},
- maintainers = { "@opa-oz" },
-}
-list.roc = {
- install_info = {
- url = "https://github.com/faldor20/tree-sitter-roc",
- files = { "src/parser.c", "src/scanner.c" },
+ robots = {
+ install_info = {
+ url = 'https://github.com/opa-oz/tree-sitter-robots-txt',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@opa-oz' },
+ tier = 3,
},
- maintainers = { "@nat-418" },
-}
-list.ron = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-ron",
- files = { "src/parser.c", "src/scanner.c" },
+ roc = {
+ install_info = {
+ url = 'https://github.com/faldor20/tree-sitter-roc',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@nat-418' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.rst = {
- install_info = {
- url = "https://github.com/stsewd/tree-sitter-rst",
- files = { "src/parser.c", "src/scanner.c" },
+ ron = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-ron',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@stsewd" },
-}
-list.ruby = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-ruby",
- files = { "src/parser.c", "src/scanner.c" },
+ rst = {
+ install_info = {
+ url = 'https://github.com/stsewd/tree-sitter-rst',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@stsewd' },
},
- maintainers = { "@TravonteD" },
-}
-list.runescript = {
- install_info = {
- url = "https://github.com/2004Scape/tree-sitter-runescript",
- files = { "src/parser.c", "src/scanner.c" },
+ ruby = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-ruby',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@TravonteD' },
},
- maintainers = { "@2004Scape" },
-}
-list.rust = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-rust",
- files = { "src/parser.c", "src/scanner.c" },
+ runescript = {
+ install_info = {
+ url = 'https://github.com/2004Scape/tree-sitter-runescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@2004Scape' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.scala = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-scala",
- files = { "src/parser.c", "src/scanner.c" },
+ rust = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-rust',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@stevanmilic" },
-}
-list.scfg = {
- install_info = {
- url = "https://github.com/rockorager/tree-sitter-scfg",
- files = { "src/parser.c" },
- requires_generate_from_grammar = true,
+ scala = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-scala',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@stevanmilic' },
},
- maintainers = { "@WhyNotHugo" },
-}
-list.scheme = {
- install_info = {
- url = "https://github.com/6cdh/tree-sitter-scheme",
- files = { "src/parser.c" },
+ scfg = {
+ install_info = {
+ url = 'https://github.com/rockorager/tree-sitter-scfg',
+ files = { 'src/parser.c' },
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { '@WhyNotHugo' },
+ tier = 3,
},
-}
-list.scss = {
- install_info = {
- url = "https://github.com/serenadeai/tree-sitter-scss",
- files = { "src/parser.c", "src/scanner.c" },
+ scheme = {
+ install_info = {
+ url = 'https://github.com/6cdh/tree-sitter-scheme',
+ files = { 'src/parser.c' },
+ },
+ tier = 4,
},
- maintainers = { "@elianiva" },
-}
-list.sflog = {
- install_info = {
- url = "https://github.com/aheber/tree-sitter-sfapex",
- files = { "src/parser.c" },
- location = "sflog",
+ scss = {
+ install_info = {
+ url = 'https://github.com/serenadeai/tree-sitter-scss',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@elianiva' },
},
- maintainers = { "@aheber", "@xixiaofinland" },
-}
-list.slang = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-slang",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ sflog = {
+ install_info = {
+ url = 'https://github.com/aheber/tree-sitter-sfapex',
+ files = { 'src/parser.c' },
+ location = 'sflog',
+ },
+ maintainers = { '@aheber', '@xixiaofinland' },
+ readme_note = 'Salesforce debug log',
+ tier = 3,
},
- filetype = "shaderslang",
- maintainers = { "@theHamsta" },
- experimental = true,
-}
-
-list.slim = {
- install_info = {
- url = "https://github.com/theoo/tree-sitter-slim",
- files = { "src/parser.c", "src/scanner.c" },
+ slang = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-slang',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ readme_note = 'Shader Slang',
+ maintainers = { '@theHamsta' },
+ tier = 4,
},
- maintainers = { "@theoo" },
-}
-list.slint = {
- install_info = {
- url = "https://github.com/slint-ui/tree-sitter-slint",
- files = { "src/parser.c" },
+ slim = {
+ install_info = {
+ url = 'https://github.com/theoo/tree-sitter-slim',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@theoo' },
+ tier = 3,
},
- maintainers = { "@hunger" },
-}
-list.smali = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-smali",
- files = { "src/parser.c", "src/scanner.c" },
+ slint = {
+ install_info = {
+ url = 'https://github.com/slint-ui/tree-sitter-slint',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@hunger' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.snakemake = {
- install_info = {
- url = "https://github.com/osthomas/tree-sitter-snakemake",
- files = { "src/parser.c", "src/scanner.c" },
+ smali = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-smali',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 3,
},
- maintainer = { "@osthomas" },
- experimental = true,
-}
-list.smithy = {
- install_info = {
- url = "https://github.com/indoorvivants/tree-sitter-smithy",
- files = { "src/parser.c" },
+ snakemake = {
+ install_info = {
+ url = 'https://github.com/osthomas/tree-sitter-snakemake',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainer = { '@osthomas' },
+ tier = 4,
},
- maintainers = { "@amaanq", "@keynmol" },
-}
-list.solidity = {
- install_info = {
- url = "https://github.com/JoranHonig/tree-sitter-solidity",
- files = { "src/parser.c" },
+ smithy = {
+ install_info = {
+ url = 'https://github.com/indoorvivants/tree-sitter-smithy',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq', '@keynmol' },
},
- maintainers = { "@amaanq" },
-}
-list.soql = {
- install_info = {
- url = "https://github.com/aheber/tree-sitter-sfapex",
- files = { "src/parser.c" },
- location = "soql",
+ solidity = {
+ install_info = {
+ url = 'https://github.com/JoranHonig/tree-sitter-solidity',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@aheber", "@xixiaofinland" },
-}
-
-list.sosl = {
- install_info = {
- url = "https://github.com/aheber/tree-sitter-sfapex",
- files = { "src/parser.c" },
- location = "sosl",
+ soql = {
+ install_info = {
+ url = 'https://github.com/aheber/tree-sitter-sfapex',
+ files = { 'src/parser.c' },
+ location = 'soql',
+ },
+ maintainers = { '@aheber', '@xixiafinland' },
+ tier = 3,
},
- maintainers = { "@aheber", "@xixiaofinland" },
-}
-list.sourcepawn = {
- install_info = {
- url = "https://github.com/nilshelmig/tree-sitter-sourcepawn",
- files = { "src/parser.c", "src/scanner.c" },
+ sosl = {
+ install_info = {
+ url = 'https://github.com/aheber/tree-sitter-sfapex',
+ files = { 'src/parser.c' },
+ location = 'sosl',
+ },
+ maintainers = { '@aheber', '@xixiafinland' },
},
- maintainers = { "@Sarrus1" },
- tier = 3,
-}
-list.sparql = {
- install_info = {
- url = "https://github.com/GordianDziwis/tree-sitter-sparql",
- files = { "src/parser.c" },
+ sourcepawn = {
+ install_info = {
+ url = 'https://github.com/nilshelmig/tree-sitter-sourcepawn',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Sarrus1' },
+ tier = 3,
},
- maintainers = { "@GordianDziwis" },
-}
-list.sql = {
- install_info = {
- url = "https://github.com/derekstride/tree-sitter-sql",
- files = { "src/parser.c", "src/scanner.c" },
- branch = "gh-pages",
+ sparql = {
+ install_info = {
+ url = 'https://github.com/GordianDziwis/tree-sitter-sparql',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@GordianDziwis' },
},
- maintainers = { "@derekstride" },
-}
-list.squirrel = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-squirrel",
- files = { "src/parser.c", "src/scanner.c" },
+ sql = {
+ install_info = {
+ url = 'https://github.com/derekstride/tree-sitter-sql',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ branch = 'gh-pages',
+ },
+ maintainers = { '@derekstride' },
},
- maintainers = { "@amaanq" },
-}
-list.ssh_config = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-ssh-config",
- files = { "src/parser.c" },
+ squirrel = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-squirrel',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- filetype = "sshconfig",
- maintainers = { "@ObserverOfTime" },
-}
-list.starlark = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-starlark",
- files = { "src/parser.c", "src/scanner.c" },
+ ssh_config = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-ssh-config',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- filetype = "bzl",
- maintainers = { "@amaanq" },
-}
-list.strace = {
- install_info = {
- url = "https://github.com/sigmaSd/tree-sitter-strace",
- files = { "src/parser.c" },
+ starlark = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-starlark',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@amaanq" },
-}
-list.styled = {
- install_info = {
- url = "https://github.com/mskelton/tree-sitter-styled",
- files = { "src/parser.c", "src/scanner.c" },
+ strace = {
+ install_info = {
+ url = 'https://github.com/sigmaSd/tree-sitter-strace',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@mskelton" },
-}
-list.supercollider = {
- install_info = {
- url = "https://github.com/madskjeldgaard/tree-sitter-supercollider",
- files = { "src/parser.c", "src/scanner.c" },
+ styled = {
+ install_info = {
+ url = 'https://github.com/mskelton/tree-sitter-styled',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@mskelton' },
+ tier = 3,
},
- maintainers = { "@madskjeldgaard" },
-}
-list.superhtml = {
- install_info = {
- url = "https://github.com/kristoff-it/superhtml",
- files = {
- "src/parser.c",
- "src/scanner.c",
+ supercollider = {
+ install_info = {
+ url = 'https://github.com/madskjeldgaard/tree-sitter-supercollider',
+ files = { 'src/parser.c', 'src/scanner.c' },
},
- location = "tree-sitter-superhtml",
+ maintainers = { '@madskjeldgaard' },
},
- maintainers = { "@rockorager" },
-}
-list.surface = {
- install_info = {
- url = "https://github.com/connorlay/tree-sitter-surface",
- files = { "src/parser.c" },
+ superhtml = {
+ install_info = {
+ url = 'https://github.com/kristoff-it/superhtml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'tree-sitter-superhtml',
+ },
+ maintainers = { '@rockorager' },
+ tier = 3,
},
- filetype = "sface",
- maintainers = { "@connorlay" },
-}
-list.svelte = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-svelte",
- files = { "src/parser.c", "src/scanner.c" },
+ surface = {
+ install_info = {
+ url = 'https://github.com/connorlay/tree-sitter-surface',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@connorlay' },
},
- maintainers = { "@amaanq" },
-}
-list.sway = {
- install_info = {
- url = "https://github.com/FuelLabs/tree-sitter-sway.git",
- files = { "src/parser.c", "src/scanner.c" },
+ svelte = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-svelte',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@ribru17" },
-}
-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,
+ sway = {
+ install_info = {
+ url = 'https://github.com/FuelLabs/tree-sitter-sway.git',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ribru17' },
+ tier = 2,
},
- maintainers = { "@alex-pinkus" },
-}
-list.sxhkdrc = {
- install_info = {
- url = "https://github.com/RaafatTurki/tree-sitter-sxhkdrc",
- files = { "src/parser.c" },
+ swift = {
+ install_info = {
+ url = 'https://github.com/alex-pinkus/tree-sitter-swift',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { '@alex-pinkus' },
},
- maintainers = { "@RaafatTurki" },
-}
-list.systemtap = {
- install_info = {
- url = "https://github.com/ok-ryoko/tree-sitter-systemtap",
- files = { "src/parser.c" },
+ sxhkdrc = {
+ install_info = {
+ url = 'https://github.com/RaafatTurki/tree-sitter-sxhkdrc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@RaafatTurki' },
},
- maintainers = { "@ok-ryoko" },
-}
-list.t32 = {
- install_info = {
- url = "https://gitlab.com/xasc/tree-sitter-t32.git",
- files = { "src/parser.c", "src/scanner.c" },
+ systemtap = {
+ install_info = {
+ url = 'https://github.com/ok-ryoko/tree-sitter-systemtap',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ok-ryoko' },
+ tier = 3,
},
- filetype = "trace32",
- maintainers = { "@xasc" },
-}
-list.tablegen = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-tablegen",
- files = { "src/parser.c", "src/scanner.c" },
+ t32 = {
+ install_info = {
+ url = 'https://gitlab.com/xasc/tree-sitter-t32.git',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@xasc' },
+ tier = 3,
},
- maintainers = { "@amaanq" },
-}
-list.tact = {
- install_info = {
- url = "https://github.com/tact-lang/tree-sitter-tact",
- files = { "src/parser.c" },
+ tablegen = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-tablegen',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@novusnota" },
-}
-list.teal = {
- install_info = {
- url = "https://github.com/euclidianAce/tree-sitter-teal",
- files = { "src/parser.c", "src/scanner.c" },
- requires_generate_from_grammar = true,
+ tact = {
+ install_info = {
+ url = 'https://github.com/tact-lang/tree-sitter-tact',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@novusnota' },
+ tier = 3,
},
- maintainers = { "@euclidianAce" },
-}
-list.tcl = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-tcl",
- files = { "src/parser.c", "src/scanner.c" },
+ 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' },
},
- maintainers = { "@lewis6991" },
-}
-list.tera = {
- install_info = {
- url = "https://github.com/uncenter/tree-sitter-tera",
- files = { "src/parser.c", "src/scanner.c" },
+ templ = {
+ install_info = {
+ url = 'https://github.com/vrischmann/tree-sitter-templ',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@vrischmann' },
+ tier = 3,
},
- maintainers = { "@uncenter" },
-}
-list.terraform = {
- install_info = {
- url = "https://github.com/MichaHoffmann/tree-sitter-hcl",
- files = { "src/parser.c", "src/scanner.c" },
- location = "dialects/terraform",
+ tcl = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-tcl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@lewis6991' },
+ tier = 2,
},
- maintainers = { "@MichaHoffmann" },
-}
-list.textproto = {
- install_info = {
- url = "https://github.com/PorterAtGoogle/tree-sitter-textproto",
- files = { "src/parser.c" },
+ tera = {
+ install_info = {
+ url = 'https://github.com/uncenter/tree-sitter-tera',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@uncenter' },
+ tier = 2,
},
- filetype = "pbtxt",
- maintainers = { "@Porter" },
-}
-list.thrift = {
- install_info = {
- url = "https://github.com/duskmoon314/tree-sitter-thrift",
- files = { "src/parser.c" },
+ terraform = {
+ install_info = {
+ url = 'https://github.com/MichaHoffmann/tree-sitter-hcl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'dialects/terraform',
+ },
+ maintainers = { '@MichaHoffmann' },
},
- maintainers = { "@amaanq", "@duskmoon314" },
-}
-list.tiger = {
- install_info = {
- url = "https://github.com/ambroisie/tree-sitter-tiger",
- files = { "src/parser.c", "src/scanner.c" },
+ textproto = {
+ install_info = {
+ url = 'https://github.com/PorterAtGoogle/tree-sitter-textproto',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Porter' },
+ tier = 3,
},
- maintainers = { "@ambroisie" },
-}
-list.tlaplus = {
- install_info = {
- url = "https://github.com/tlaplus-community/tree-sitter-tlaplus",
- files = { "src/parser.c", "src/scanner.c" },
+ thrift = {
+ install_info = {
+ url = 'https://github.com/duskmoon314/tree-sitter-thrift',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq', '@duskmoon314' },
},
- filetype = "tla",
- maintainers = { "@ahelwer", "@susliko" },
-}
-list.tmux = {
- install_info = {
- url = "https://github.com/Freed-Wu/tree-sitter-tmux",
- files = { "src/parser.c" },
+ tiger = {
+ install_info = {
+ url = 'https://github.com/ambroisie/tree-sitter-tiger',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ambroisie' },
},
- maintainers = { "@Freed-Wu" },
-}
-list.todotxt = {
- install_info = {
- url = "https://github.com/arnarg/tree-sitter-todotxt",
- files = { "src/parser.c" },
+ tlaplus = {
+ install_info = {
+ url = 'https://github.com/tlaplus-community/tree-sitter-tlaplus',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@ahelwer', '@susliko' },
},
- maintainers = { "@arnarg" },
- experimental = true,
-}
-list.toml = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-toml",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ tmux = {
+ install_info = {
+ url = 'https://github.com/Freed-Wu/tree-sitter-tmux',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Freed-Wu' },
+ tier = 3,
},
- maintainers = { "@tk-shirasaka" },
-}
-list.tsv = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-csv",
- files = { "src/parser.c" },
- location = "tsv",
+ todotxt = {
+ install_info = {
+ url = 'https://github.com/arnarg/tree-sitter-todotxt',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@arnarg' },
+ tier = 4,
},
- maintainers = { "@amaanq" },
-}
-list.tsx = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-typescript",
- files = { "src/parser.c", "src/scanner.c" },
- location = "tsx",
- generate_requires_npm = true,
+ toml = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-toml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@tk-shirasaka' },
},
- filetype = "typescriptreact",
- maintainers = { "@steelsojka" },
-}
-list.turtle = {
- install_info = {
- url = "https://github.com/GordianDziwis/tree-sitter-turtle",
- files = { "src/parser.c" },
+ tsv = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-csv',
+ files = { 'src/parser.c' },
+ location = 'tsv',
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@GordianDziwis" },
-}
-list.twig = {
- install_info = {
- url = "https://github.com/gbprod/tree-sitter-twig",
- files = { "src/parser.c" },
+ tsx = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-typescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'tsx',
+ generate_requires_npm = true,
+ },
+ maintainers = { '@steelsojka' },
},
- maintainers = { "@gbprod" },
-}
-list.typescript = {
- install_info = {
- url = "https://github.com/tree-sitter/tree-sitter-typescript",
- files = { "src/parser.c", "src/scanner.c" },
- location = "typescript",
- generate_requires_npm = true,
+ turtle = {
+ install_info = {
+ url = 'https://github.com/GordianDziwis/tree-sitter-turtle',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@GordianDziwis' },
},
- maintainers = { "@steelsojka" },
-}
-list.typespec = {
- install_info = {
- url = "https://github.com/happenslol/tree-sitter-typespec",
- files = { "src/parser.c" },
+ twig = {
+ install_info = {
+ url = 'https://github.com/gbprod/tree-sitter-twig',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@gbprod' },
},
- maintainers = { "@happenslol" },
-}
-list.typoscript = {
- install_info = {
- url = "https://github.com/Teddytrombone/tree-sitter-typoscript",
- files = { "src/parser.c" },
+ typescript = {
+ install_info = {
+ url = 'https://github.com/tree-sitter/tree-sitter-typescript',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'typescript',
+ generate_requires_npm = true,
+ },
+ maintainers = { '@steelsojka' },
},
- maintainers = { "@Teddytrombone" },
-}
-list.typst = {
- install_info = {
- url = "https://github.com/uben0/tree-sitter-typst",
- files = { "src/parser.c", "src/scanner.c" },
+ typespec = {
+ install_info = {
+ url = 'https://github.com/happenslol/tree-sitter-typespec',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@happenslol' },
+ tier = 3,
},
- maintainers = { "@uben0", "@RaafatTurki" },
-}
-list.udev = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-udev",
- files = { "src/parser.c" },
+ typoscript = {
+ install_info = {
+ url = 'https://github.com/Teddytrombone/tree-sitter-typoscript',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Teddytrombone' },
+ tier = 3,
},
- filetype = "udevrules",
- maintainers = { "@ObserverOfTime" },
-}
-list.ungrammar = {
- install_info = {
- url = "https://github.com/Philipp-M/tree-sitter-ungrammar",
- files = { "src/parser.c" },
+ typst = {
+ install_info = {
+ url = 'https://github.com/uben0/tree-sitter-typst',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@uben0', '@RaafatTurki' },
+ tier = 3,
},
- maintainers = { "@Philipp-M", "@amaanq" },
-}
-list.unison = {
- install_info = {
- url = "https://github.com/kylegoetz/tree-sitter-unison",
- files = { "src/parser.c", "src/scanner.c" },
- requires_generate_from_grammar = true,
+ udev = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-udev',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@tapegram" },
-}
-list.usd = {
- install_info = {
- url = "https://github.com/ColinKennedy/tree-sitter-usd",
- files = { "src/parser.c" },
+ ungrammar = {
+ install_info = {
+ url = 'https://github.com/Philipp-M/tree-sitter-ungrammar',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Philipp-M', '@amaanq' },
},
- maintainers = { "@ColinKennedy" },
-}
-list.uxntal = {
- install_info = {
- url = "https://github.com/amaanq/tree-sitter-uxntal",
- files = { "src/parser.c", "src/scanner.c" },
+ unison = {
+ install_info = {
+ url = 'https://github.com/kylegoetz/tree-sitter-unison',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ requires_generate_from_grammar = true,
+ },
+ maintainers = { '@tapegram' },
+ tier = 4,
},
- filetype = "tal",
- maintainers = { "@amaanq" },
- readme_name = "uxn tal",
-}
-list.v = {
- install_info = {
- url = "https://github.com/vlang/v-analyzer",
- files = { "src/parser.c" },
- location = "tree_sitter_v",
+ usd = {
+ install_info = {
+ url = 'https://github.com/ColinKennedy/tree-sitter-usd',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ColinKennedy' },
},
- filetype = "vlang",
- maintainers = { "@kkharji", "@amaanq" },
-}
-list.vala = {
- install_info = {
- url = "https://github.com/vala-lang/tree-sitter-vala",
- files = { "src/parser.c" },
+ uxntal = {
+ install_info = {
+ url = 'https://github.com/amaanq/tree-sitter-uxntal',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
},
- maintainers = { "@Prince781" },
-}
-list.vento = {
- install_info = {
- url = "https://github.com/ventojs/tree-sitter-vento",
- files = { "src/parser.c", "src/scanner.c" },
+ v = {
+ install_info = {
+ url = 'https://github.com/vlang/v-analyzer',
+ files = { 'src/parser.c' },
+ location = 'tree_sitter_v',
+ },
+ maintainers = { '@kkharji', '@amaanq' },
},
- filetype = "vto",
- maintainers = { "@wrapperup", "@oscarotero" },
-}
-list.verilog = {
- install_info = {
- url = "https://github.com/gmlarumbe/tree-sitter-systemverilog",
- files = { "src/parser.c" },
+ vala = {
+ install_info = {
+ url = 'https://github.com/vala-lang/tree-sitter-vala',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Prince781' },
},
- maintainers = { "@zhangwwpeng" },
-}
-list.vhdl = {
- install_info = {
- url = "https://github.com/jpt13653903/tree-sitter-vhdl",
- files = { "src/parser.c", "src/scanner.c" },
+ vento = {
+ install_info = {
+ url = 'https://github.com/ventojs/tree-sitter-vento',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@wrapperup', '@oscarotero' },
+ tier = 3,
},
- maintainers = { "@jpt13653903" },
-}
-list.vhs = {
- install_info = {
- url = "https://github.com/charmbracelet/tree-sitter-vhs",
- files = { "src/parser.c" },
+ verilog = {
+ install_info = {
+ url = 'https://github.com/gmlarumbe/tree-sitter-systemverilog',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@zhangwwpeng' },
},
- filetype = "tape",
- maintainers = { "@caarlos0" },
-}
-list.vim = {
- install_info = {
- url = "https://github.com/neovim/tree-sitter-vim",
- files = { "src/parser.c", "src/scanner.c" },
+ vhdl = {
+ install_info = {
+ url = 'https://github.com/jpt13653903/tree-sitter-vhdl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@jpt13653903' },
+ tier = 3,
},
- maintainers = { "@clason" },
-}
-list.vimdoc = {
- install_info = {
- url = "https://github.com/neovim/tree-sitter-vimdoc",
- files = { "src/parser.c" },
+ vhs = {
+ install_info = {
+ url = 'https://github.com/charmbracelet/tree-sitter-vhs',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@caarlos0' },
},
- filetype = "help",
- maintainers = { "@clason" },
-}
-list.vrl = {
- install_info = {
- url = "https://github.com/belltoy/tree-sitter-vrl",
- files = { "src/parser.c" },
+ vim = {
+ install_info = {
+ url = 'https://github.com/neovim/tree-sitter-vim',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@clason' },
+ tier = 1,
},
- maintainers = { "@belltoy" },
-}
-list.vue = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-vue",
- files = { "src/parser.c", "src/scanner.c" },
- branch = "main",
+ vimdoc = {
+ install_info = {
+ url = 'https://github.com/neovim/tree-sitter-vimdoc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@clason' },
+ tier = 1,
},
- maintainers = { "@WhyNotHugo", "@lucario387" },
-}
-list.wgsl = {
- install_info = {
- url = "https://github.com/szebniok/tree-sitter-wgsl",
- files = { "src/parser.c", "src/scanner.c" },
+ vrl = {
+ install_info = {
+ url = 'https://github.com/belltoy/tree-sitter-vrl',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@belltoy' },
+ tier = 3,
},
- maintainers = { "@szebniok" },
-}
-list.wgsl_bevy = {
- install_info = {
- url = "https://github.com/theHamsta/tree-sitter-wgsl-bevy",
- files = { "src/parser.c", "src/scanner.c" },
- generate_requires_npm = true,
+ vue = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-vue',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ branch = 'main',
+ },
+ maintainers = { '@WhyNotHugo', '@lucario387' },
+ tier = 2,
},
- maintainers = { "@theHamsta" },
-}
-list.wing = {
- install_info = {
- url = "https://github.com/winglang/tree-sitter-wing",
- files = { "src/parser.c", "src/scanner.c" },
+ wing = {
+ install_info = {
+ url = 'https://github.com/winglang/tree-sitter-wing',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@gshpychka', '@MarkMcCulloh' },
+ tier = 3,
},
- maintainers = { "@gshpychka", "@MarkMcCulloh" },
-}
-list.wit = {
- install_info = {
- url = "https://github.com/liamwh/tree-sitter-wit",
- files = { "src/parser.c" },
+ wgsl = {
+ install_info = {
+ url = 'https://github.com/szebniok/tree-sitter-wgsl',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@szebniok' },
},
- maintainers = { "@liamwh" },
-}
-list.xcompose = {
- install_info = {
- url = "https://github.com/ObserverOfTime/tree-sitter-xcompose",
- files = { "src/parser.c" },
+ wgsl_bevy = {
+ install_info = {
+ url = 'https://github.com/theHamsta/tree-sitter-wgsl-bevy',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ generate_requires_npm = true,
+ },
+ maintainers = { '@theHamsta' },
},
- maintainers = { "@ObserverOfTime" },
-}
-list.xml = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-xml",
- files = { "src/parser.c", "src/scanner.c" },
- location = "xml",
+ wit = {
+ install_info = {
+ url = 'https://github.com/liamwh/tree-sitter-wit',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@liamwh' },
+ tier = 3,
},
- maintainers = { "@ObserverOfTime" },
-}
-
-list.xresources = {
- install_info = {
- url = "https://github.com/ValdezFOmar/tree-sitter-xresources",
- files = { "src/parser.c" },
+ xcompose = {
+ install_info = {
+ url = 'https://github.com/ObserverOfTime/tree-sitter-xcompose',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- filetype = "xdefaults",
- maintainers = { "@ValdezFOmar" },
-}
-list.yaml = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-yaml",
- files = { "src/parser.c", "src/scanner.c" },
+ xml = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-xml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ location = 'xml',
+ },
+ maintainers = { '@ObserverOfTime' },
+ tier = 2,
},
- maintainers = { "@amaanq" },
-}
-list.yang = {
- install_info = {
- url = "https://github.com/Hubro/tree-sitter-yang",
- files = { "src/parser.c" },
+ xresources = {
+ install_info = {
+ url = 'https://github.com/ValdezFOmar/tree-sitter-xresources',
+ files = { 'src/parser.c' },
+ },
+ filetype = 'xdefaults',
+ maintainers = { '@ValdezFOmar' },
+ tier = 3,
},
- maintainers = { "@Hubro" },
-}
-list.yuck = {
- install_info = {
- url = "https://github.com/Philipp-M/tree-sitter-yuck",
- files = { "src/parser.c", "src/scanner.c" },
+ yaml = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-yaml',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 2,
},
- maintainers = { "@Philipp-M", "@amaanq" },
-}
-list.zathurarc = {
- install_info = {
- url = "https://github.com/Freed-Wu/tree-sitter-zathurarc",
- files = { "src/parser.c" },
+ yang = {
+ install_info = {
+ url = 'https://github.com/Hubro/tree-sitter-yang',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Hubro' },
},
- maintainers = { "@Freed-Wu" },
-}
-list.zig = {
- install_info = {
- url = "https://github.com/tree-sitter-grammars/tree-sitter-zig",
- files = { "src/parser.c" },
+ yuck = {
+ install_info = {
+ url = 'https://github.com/Philipp-M/tree-sitter-yuck',
+ files = { 'src/parser.c', 'src/scanner.c' },
+ },
+ maintainers = { '@Philipp-M', '@amaanq' },
},
- maintainers = { "@amaanq" },
-}
-list.ziggy = {
- install_info = {
- url = "https://github.com/kristoff-it/ziggy",
- files = { "src/parser.c" },
- location = "tree-sitter-ziggy",
+ zathurarc = {
+ install_info = {
+ url = 'https://github.com/Freed-Wu/tree-sitter-zathurarc',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@Freed-Wu' },
+ tier = 3,
},
- maintainers = { "@rockorager" },
-}
-list.ziggy_schema = {
- install_info = {
- url = "https://github.com/kristoff-it/ziggy",
- files = { "src/parser.c" },
- location = "tree-sitter-ziggy-schema",
+ zig = {
+ install_info = {
+ url = 'https://github.com/tree-sitter-grammars/tree-sitter-zig',
+ files = { 'src/parser.c' },
+ },
+ maintainers = { '@amaanq' },
+ tier = 1,
},
- maintainers = { "@rockorager" },
-}
-list.templ = {
- install_info = {
- url = "https://github.com/vrischmann/tree-sitter-templ",
- files = { "src/parser.c", "src/scanner.c" },
+ ziggy = {
+ install_info = {
+ url = 'https://github.com/kristoff-it/ziggy',
+ files = { 'src/parser.c' },
+ location = 'tree-sitter-ziggy',
+ },
+ maintainers = { '@rockorager' },
+ tier = 3,
},
- maintainers = { "@vrischmann" },
-}
-local M = {
- list = list,
+ ziggy_schema = {
+ install_info = {
+ url = 'https://github.com/kristoff-it/ziggy',
+ files = { 'src/parser.c' },
+ location = 'tree-sitter-ziggy-schema',
+ },
+ maintainers = { '@rockorager' },
+ tier = 3,
+ },
}
-function M.ft_to_lang(ft)
- local result = ts.language.get_lang(ft)
- if result then
- return result
- else
- ft = vim.split(ft, ".", { plain = true })[1]
- return ts.language.get_lang(ft) or ft
- end
-end
-
-- Get a list of all available parsers
+---@param tier integer? only get parsers of specified tier
---@return string[]
-function M.available_parsers()
- local parsers = vim.tbl_keys(M.list)
+function M.get_available(tier)
+ local parsers = vim.tbl_keys(M.configs)
table.sort(parsers)
- if vim.fn.executable "tree-sitter" == 1 and vim.fn.executable "node" == 1 then
- return parsers
- else
- return vim.tbl_filter(function(p) ---@param p string
- return not M.list[p].install_info.requires_generate_from_grammar
+ if tier then
+ parsers = vim.iter.filter(function(p)
+ return M.configs[p].tier == tier
end, parsers)
end
-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)
+ if vim.fn.executable('tree-sitter') == 0 or vim.fn.executable('node') == 0 then
+ parsers = vim.iter.filter(function(p)
+ return not M.configs[p].install_info.requires_generate_from_grammar
+ end, parsers)
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
-
--- Gets the language of a given buffer
----@param bufnr number? or current buffer
----@return string
-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"))
+ return parsers
end
return M
diff --git a/lua/nvim-treesitter/query.lua b/lua/nvim-treesitter/query.lua
index 4aba9f2fd..f7e5205f7 100644
--- a/lua/nvim-treesitter/query.lua
+++ b/lua/nvim-treesitter/query.lua
@@ -1,154 +1,7 @@
-local api = vim.api
-local ts = require "nvim-treesitter.compat"
-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.
----@param query string
----@return fun(string): boolean
-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
-
----@return string[]
-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
-
- ---@param bufnr integer
- ---@param query_group string
- ---@return any
- 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
-
----@param lang string
----@param query_name string
----@return string[]
-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
-
----@type table<string, table<string, boolean>>
-local query_files_cache = {}
-
----@param lang string
----@param query_name string
----@return boolean
-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
- ---@type table<string, table<string, Query>>
- local cache = setmetatable({}, mt)
-
- -- Same as `vim.treesitter.query` except will return cached values
- ---@param lang string
- ---@param query_name string
- function M.get_query(lang, query_name)
- if cache[lang][query_name] == nil then
- cache[lang][query_name] = ts.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
- ---@param lang? string
- ---@param query_name? string
- 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_name0, _ in pairs(cache[lang]) do
- M.invalidate_query_cache(lang, query_name0)
- end
- elseif not lang and not query_name then
- query_files_cache = {}
- for lang0, _ in pairs(cache) do
- for query_name0, _ in pairs(cache[lang0]) do
- M.invalidate_query_cache(lang0, query_name0)
- 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.
----@param fname string
-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
-
---@class QueryInfo
---@field root TSNode
---@field source integer
@@ -161,13 +14,13 @@ end
---@param root_lang string|nil
---@return Query|nil, QueryInfo|nil
local function prepare_query(bufnr, query_name, root, root_lang)
- local buf_lang = parsers.get_buf_lang(bufnr)
-
+ local ft = vim.bo[bufnr].filetype
+ local buf_lang = vim.treesitter.language.get_lang(ft) or ft
if not buf_lang then
return
end
- local parser = parsers.get_parser(bufnr, buf_lang)
+ local parser = vim.treesitter.get_parser(bufnr, buf_lang)
if not parser then
return
end
@@ -198,7 +51,7 @@ local function prepare_query(bufnr, query_name, root, root_lang)
return
end
- local query = M.get_query(root_lang, query_name)
+ local query = vim.treesitter.query.get(root_lang, query_name)
if not query then
return
end
@@ -241,7 +94,7 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
---@return string[]
local function split(to_split)
local t = {}
- for str in string.gmatch(to_split, "([^.]+)") do
+ for str in string.gmatch(to_split, '([^.]+)') do
table.insert(t, str)
end
@@ -259,9 +112,9 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
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")
+ local path = split(name .. '.node')
M.insert_to_path(prepared_match, path, node)
- local metadata_path = split(name .. ".metadata")
+ local metadata_path = split(name .. '.metadata')
M.insert_to_path(prepared_match, metadata_path, metadata[id])
end
end
@@ -272,16 +125,9 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
if preds then
for _, pred in pairs(preds) do
-- functions
- if pred[1] == "set!" and type(pred[2]) == "string" then
+ if pred[1] == 'set!' and type(pred[2]) == 'string' then
M.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
- M.insert_to_path(
- prepared_match,
- split(pred[2] .. ".node"),
- tsrange.TSRange.from_nodes(bufnr, match[pred[3]], match[pred[4]])
- )
- end
end
end
@@ -291,103 +137,6 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
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 integer the buffer
----@param captures string|string[]
----@param query_group string the name of query group (highlights or injections for example)
----@param root TSNode|nil node from where to start the search
----@param lang string|nil the language from where to get the captures.
---- Root nodes can have several languages.
----@return table|nil
-function M.get_capture_matches(bufnr, captures, query_group, root, lang)
- if type(captures) == "string" then
- captures = { captures }
- end
- local strip_captures = {} ---@type string[]
- 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
- assert(params)
-
- 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
-
----@param bufnr integer
----@param capture_string string
----@param query_group string
----@param filter_predicate fun(match: table): boolean
----@param scoring_function fun(match: table): number
----@param root TSNode
----@return table|unknown
-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 ---@type table|nil
- local best_score ---@type number
-
- 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 integer the buffer
---@param query_group string the query file to use
@@ -413,41 +162,4 @@ function M.collect_group_results(bufnr, query_group, root, lang)
return matches
end
----@alias CaptureResFn function(string, LanguageTree, LanguageTree): string, string
-
--- Same as get_capture_matches except this will recursively get matches for every language in the tree.
----@param bufnr integer The buffer
----@param capture_or_fn string|CaptureResFn 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 string? The query to get the capture from. This is ignored if a function is provided
---- for the capture argument.
----@return table[]
-function M.get_capture_matches_recursively(bufnr, capture_or_fn, query_type)
- ---@type CaptureResFn
- local type_fn
- if type(capture_or_fn) == "function" then
- type_fn = capture_or_fn
- else
- type_fn = function(_, _, _)
- return capture_or_fn, query_type
- end
- 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) or {})
- end
- end)
- end
-
- return matches
-end
-
return M
diff --git a/lua/nvim-treesitter/query_predicates.lua b/lua/nvim-treesitter/query_predicates.lua
deleted file mode 100644
index 7539170dc..000000000
--- a/lua/nvim-treesitter/query_predicates.lua
+++ /dev/null
@@ -1,167 +0,0 @@
-local query = require "vim.treesitter.query"
-
-local html_script_type_languages = {
- ["importmap"] = "json",
- ["module"] = "javascript",
- ["application/ecmascript"] = "javascript",
- ["text/ecmascript"] = "javascript",
-}
-
-local non_filetype_match_injection_language_aliases = {
- ex = "elixir",
- pl = "perl",
- sh = "bash",
- uxn = "uxntal",
- ts = "typescript",
-}
-
--- compatibility shim for breaking change on nightly/0.11
-local opts = vim.fn.has "nvim-0.10" == 1 and { force = true, all = false } or true
-
-local function get_parser_from_markdown_info_string(injection_alias)
- local match = vim.filetype.match { filename = "a." .. injection_alias }
- return match or non_filetype_match_injection_language_aliases[injection_alias] or injection_alias
-end
-
-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
-
----@param match (TSNode|nil)[]
----@param _pattern string
----@param _bufnr integer
----@param pred string[]
----@return boolean|nil
-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]] ---@type TSNode
- 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, opts)
-
----@param match (TSNode|nil)[]
----@param _pattern string
----@param bufnr integer
----@param pred string[]
----@return boolean|nil
-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, opts)
-
----@param match (TSNode|nil)[]
----@param _pattern string
----@param _bufnr integer
----@param pred string[]
----@return boolean|nil
-query.add_predicate("kind-eq?", 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, opts)
-
----@param match (TSNode|nil)[]
----@param _ string
----@param bufnr integer
----@param pred string[]
----@return boolean|nil
-query.add_directive("set-lang-from-mimetype!", function(match, _, bufnr, pred, metadata)
- local capture_id = pred[2]
- local node = match[capture_id]
- if not node then
- return
- end
- local type_attr_value = vim.treesitter.get_node_text(node, bufnr)
- local configured = html_script_type_languages[type_attr_value]
- if configured then
- metadata["injection.language"] = configured
- else
- local parts = vim.split(type_attr_value, "/", {})
- metadata["injection.language"] = parts[#parts]
- end
-end, opts)
-
----@param match (TSNode|nil)[]
----@param _ string
----@param bufnr integer
----@param pred string[]
----@return boolean|nil
-query.add_directive("set-lang-from-info-string!", function(match, _, bufnr, pred, metadata)
- local capture_id = pred[2]
- local node = match[capture_id]
- if not node then
- return
- end
- local injection_alias = vim.treesitter.get_node_text(node, bufnr):lower()
- metadata["injection.language"] = get_parser_from_markdown_info_string(injection_alias)
-end, opts)
-
--- Just avoid some annoying warnings for this directive
-query.add_directive("make-range!", function() end, opts)
-
---- transform node text to lower case (e.g., to make @injection.language case insensitive)
----
----@param match (TSNode|nil)[]
----@param _ string
----@param bufnr integer
----@param pred string[]
----@return boolean|nil
-query.add_directive("downcase!", function(match, _, bufnr, pred, metadata)
- local id = pred[2]
- local node = match[id]
- if not node then
- return
- end
-
- local text = vim.treesitter.get_node_text(node, bufnr, { metadata = metadata[id] }) or ""
- if not metadata[id] then
- metadata[id] = {}
- end
- metadata[id].text = string.lower(text)
-end, opts)
diff --git a/lua/nvim-treesitter/shell_cmds.lua b/lua/nvim-treesitter/shell_cmds.lua
new file mode 100644
index 000000000..2dc7f8748
--- /dev/null
+++ b/lua/nvim-treesitter/shell_cmds.lua
@@ -0,0 +1,255 @@
+local uv = vim.loop
+local utils = require('nvim-treesitter.utils')
+
+local iswin = uv.os_uname().sysname == 'Windows_NT'
+
+local M = {}
+
+---@param executables string[]
+---@return string|nil
+function M.select_executable(executables)
+ return vim.tbl_filter(function(c) ---@param c string
+ return c ~= vim.NIL and vim.fn.executable(c) == 1
+ end, executables)[1]
+end
+
+-- Returns the compiler arguments based on the compiler and OS
+---@param repo InstallInfo
+---@param compiler string
+---@return string[]
+function M.select_compiler_args(repo, compiler)
+ if compiler:find('cl$') or compiler:find('cl.exe$') then
+ return {
+ '/Fe:',
+ 'parser.so',
+ '/Isrc',
+ repo.files,
+ '-Os',
+ '/utf-8',
+ '/LD',
+ }
+ elseif compiler:find('zig$') or compiler:find('zig.exe$') then
+ return {
+ 'c++',
+ '-o',
+ 'parser.so',
+ repo.files,
+ '-lc',
+ '-Isrc',
+ '-shared',
+ '-Os',
+ }
+ else
+ local args = {
+ '-o',
+ 'parser.so',
+ '-I./src',
+ repo.files,
+ '-Os',
+ }
+ if uv.os_uname().sysname == 'Darwin' then
+ table.insert(args, '-bundle')
+ else
+ table.insert(args, '-shared')
+ end
+ if
+ #vim.tbl_filter(function(file) ---@param file string
+ local ext = vim.fn.fnamemodify(file, ':e')
+ return ext == 'cc' or ext == 'cpp' or ext == 'cxx'
+ end, repo.files) > 0
+ then
+ table.insert(args, '-lstdc++')
+ end
+ if not iswin then
+ table.insert(args, '-fPIC')
+ end
+ return args
+ end
+end
+
+-- Returns the compile command based on the OS and user options
+---@param repo InstallInfo
+---@param cc string
+---@param compile_location string
+---@return Command
+function M.select_compile_command(repo, cc, compile_location)
+ local make = M.select_executable({ 'gmake', 'make' })
+ if cc:find('cl$') or cc:find('cl.exe$') or not repo.use_makefile or iswin 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.get_package_path('scripts', 'compile_parsers.makefile'),
+ 'CC=' .. cc,
+ },
+ cwd = compile_location,
+ },
+ }
+ end
+end
+
+---@param repo InstallInfo
+---@param project_name string
+---@param cache_dir string
+---@param revision string|nil
+---@param prefer_git boolean
+---@return table
+function M.select_download_commands(repo, project_name, cache_dir, 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)
+ local project_dir = utils.join_path(cache_dir, project_name)
+
+ revision = revision or repo.branch or 'master'
+
+ if can_use_tar and (is_github or is_gitlab) and not prefer_git then
+ local url = repo.url:gsub('.git$', '')
+
+ local dir_rev = revision
+ if is_github and revision:find('^v%d') then
+ dir_rev = revision:sub(2)
+ end
+
+ local temp_dir = project_dir .. '-tmp'
+
+ return {
+ {
+ cmd = function()
+ vim.fn.delete(temp_dir, 'rf')
+ end,
+ },
+ {
+ cmd = 'curl',
+ info = 'Downloading ' .. project_name .. '...',
+ 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_dir,
+ },
+ },
+ {
+ cmd = function()
+ --TODO(clason): use vim.fn.mkdir(temp_dir, 'p') in case stdpath('cache') is not created
+ uv.fs_mkdir(temp_dir, 493)
+ end,
+ info = 'Creating temporary directory',
+ err = 'Could not create ' .. project_name .. '-tmp',
+ },
+ {
+ cmd = 'tar',
+ info = 'Extracting ' .. project_name .. '...',
+ err = 'Error during tarball extraction.',
+ opts = {
+ args = {
+ '-xvzf',
+ project_name .. '.tar.gz',
+ '-C',
+ project_name .. '-tmp',
+ },
+ cwd = cache_dir,
+ },
+ },
+ {
+ cmd = function()
+ uv.fs_unlink(project_dir .. '.tar.gz')
+ end,
+ },
+ {
+ cmd = function()
+ uv.fs_rename(
+ utils.join_path(temp_dir, url:match('[^/]-$') .. '-' .. dir_rev),
+ project_dir
+ )
+ end,
+ },
+ {
+ cmd = function()
+ vim.fn.delete(temp_dir, 'rf')
+ end,
+ },
+ }
+ else
+ local git_dir = project_dir
+ local clone_error = 'Error during download, please verify your internet connection'
+
+ return {
+ {
+ cmd = 'git',
+ info = 'Downloading ' .. project_name .. '...',
+ err = clone_error,
+ opts = {
+ args = {
+ 'clone',
+ repo.url,
+ project_name,
+ },
+ cwd = cache_dir,
+ },
+ },
+ {
+ cmd = 'git',
+ info = 'Checking out locked revision',
+ err = 'Error while checking out revision',
+ opts = {
+ args = {
+ 'checkout',
+ revision,
+ },
+ cwd = git_dir,
+ },
+ },
+ }
+ end
+end
+
+--TODO(clason): only needed for iter_cmd_sync -> replace with uv.spawn?
+
+-- Convert path for cmd.exe on Windows (needed when shellslash is set)
+---@param p string
+---@return string
+local function cmdpath(p)
+ return vim.o.shellslash and p:gsub('/', '\\') or p
+end
+
+---@param dir string
+---@param command string
+---@return string command
+function M.make_directory_change_for_command(dir, command)
+ if iswin then
+ if string.find(vim.o.shell, 'cmd') ~= nil then
+ return string.format('pushd %s & %s & popd', cmdpath(dir), command)
+ else
+ return string.format('pushd %s ; %s ; popd', cmdpath(dir), command)
+ end
+ else
+ return string.format('cd %s;\n %s', dir, command)
+ end
+end
+
+return M
diff --git a/lua/nvim-treesitter/shell_command_selectors.lua b/lua/nvim-treesitter/shell_command_selectors.lua
deleted file mode 100644
index ee1d64745..000000000
--- a/lua/nvim-treesitter/shell_command_selectors.lua
+++ /dev/null
@@ -1,368 +0,0 @@
-local fn = vim.fn
-local utils = require "nvim-treesitter.utils"
-local uv = vim.uv or vim.loop
-
--- Convert path for cmd.exe on Windows.
--- This is needed when vim.opt.shellslash is in use.
----@param p string
----@return string
-local function cmdpath(p)
- if vim.opt.shellslash:get() then
- local r = p:gsub("/", "\\")
- return r
- else
- return p
- end
-end
-
-local M = {}
-
--- Returns the mkdir command based on the OS
----@param directory string
----@param cwd string
----@param info_msg string
----@return table
-function M.select_mkdir_cmd(directory, cwd, info_msg)
- if fn.has "win32" == 1 then
- return {
- cmd = "cmd",
- opts = {
- args = { "/C", "mkdir", cmdpath(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
-
--- Returns the remove command based on the OS
----@param file string
----@param info_msg string
----@return table
-function M.select_rm_file_cmd(file, info_msg)
- if fn.has "win32" == 1 then
- return {
- cmd = "cmd",
- opts = {
- args = { "/C", "if", "exist", cmdpath(file), "del", cmdpath(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
-
----@param executables string[]
----@return string|nil
-function M.select_executable(executables)
- return vim.tbl_filter(function(c) ---@param c string
- return c ~= vim.NIL and fn.executable(c) == 1
- end, executables)[1]
-end
-
--- Returns the compiler arguments based on the compiler and OS
----@param repo InstallInfo
----@param compiler string
----@return string[]
-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",
- "/std:c11",
- "/utf-8",
- "/LD",
- }
- elseif string.match(compiler, "zig$") or string.match(compiler, "zig.exe$") then
- return {
- "c++",
- "-o",
- "parser.so",
- repo.files,
- "-lc",
- "-Isrc",
- "-shared",
- "-Os",
- "-std=c11",
- }
- else
- local args = {
- "-o",
- "parser.so",
- "-I./src",
- repo.files,
- "-Os",
- "-std=c11",
- }
- if fn.has "mac" == 1 then
- table.insert(args, "-bundle")
- else
- table.insert(args, "-shared")
- end
- if
- #vim.tbl_filter(function(file) ---@param file string
- local ext = vim.fn.fnamemodify(file, ":e")
- return ext == "cc" or ext == "cpp" or ext == "cxx"
- end, repo.files) > 0
- then
- table.insert(args, "-lstdc++")
- end
- if fn.has "win32" == 0 then
- table.insert(args, "-fPIC")
- end
- return args
- end
-end
-
--- Returns the compile command based on the OS and user options
----@param repo InstallInfo
----@param cc string
----@param compile_location string
----@return Command
-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 = require("nvim-treesitter.compat").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
-
--- Returns the remove command based on the OS
----@param cache_folder string
----@param project_name string
----@return Command
-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", cmdpath(dir), "rmdir", "/s", "/q", cmdpath(dir) },
- },
- }
- else
- return {
- cmd = "rm",
- opts = {
- args = { "-rf", cache_folder .. "/" .. project_name },
- },
- }
- end
-end
-
--- Returns the move command based on the OS
----@param from string
----@param to string
----@param cwd string
----@return Command
-function M.select_mv_cmd(from, to, cwd)
- if fn.has "win32" == 1 then
- return {
- cmd = "cmd",
- opts = {
- args = { "/C", "move", "/Y", cmdpath(from), cmdpath(to) },
- cwd = cwd,
- },
- }
- else
- return {
- cmd = "mv",
- opts = {
- args = { "-f", from, to },
- cwd = cwd,
- },
- }
- end
-end
-
----@param repo InstallInfo
----@param project_name string
----@param cache_folder string
----@param revision string|nil
----@param prefer_git boolean
----@return table
-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$", "")
-
- local folder_rev = revision
- if is_github and revision:match "^v%d" then
- folder_rev = revision:sub(2)
- end
-
- return {
- M.select_install_rm_cmd(cache_folder, project_name .. "-tmp"),
- {
- cmd = "curl",
- info = "Downloading " .. project_name .. "...",
- err = "Error during download, please verify your internet connection",
- opts = {
- args = {
- "--silent",
- "--show-error",
- "-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 " .. project_name .. "...",
- 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 "[^/]-$" .. "-" .. folder_rev),
- 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"
-
- -- Running `git clone` or `git checkout` while running under Git (such as
- -- editing a `git commit` message) will likely fail to install parsers
- -- (such as 'gitcommit') and can also corrupt the index file of the current
- -- Git repository. Check for typical git environment variables and abort if found.
- for _, k in pairs {
- "GIT_ALTERNATE_OBJECT_DIRECTORIES",
- "GIT_CEILING_DIRECTORIES",
- "GIT_DIR",
- "GIT_INDEX",
- "GIT_INDEX_FILE",
- "GIT_OBJECT_DIRECTORY",
- "GIT_PREFIX",
- "GIT_WORK_TREE",
- } do
- if uv.os_getenv(k) then
- vim.api.nvim_err_writeln(
- string.format(
- "Cannot install %s with git in an active git session. Exit the session and run ':TSInstall %s' manually",
- project_name,
- project_name
- )
- )
- return {}
- end
- end
-
- return {
- {
- cmd = "git",
- info = "Downloading " .. project_name .. "...",
- err = clone_error,
- opts = {
- args = {
- "clone",
- repo.url,
- project_name,
- "--filter=blob:none",
- },
- 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
-
----@param dir string
----@param command string
----@return string command
-function M.make_directory_change_for_command(dir, command)
- if fn.has "win32" == 1 then
- if string.find(vim.o.shell, "cmd") ~= nil then
- return string.format("pushd %s & %s", cmdpath(dir), command)
- else
- return string.format("pushd %s ; %s", cmdpath(dir), command)
- end
- else
- return string.format("cd %s;\n%s", dir, command)
- end
-end
-
-return M
diff --git a/lua/nvim-treesitter/statusline.lua b/lua/nvim-treesitter/statusline.lua
deleted file mode 100644
index 68ba41aca..000000000
--- a/lua/nvim-treesitter/statusline.lua
+++ /dev/null
@@ -1,53 +0,0 @@
-local parsers = require "nvim-treesitter.parsers"
-local ts_utils = require "nvim-treesitter.ts_utils"
-
-local M = {}
-
--- 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 bufnr = options.bufnr or 0
- 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 allow_duplicates = options.allow_duplicates or false
-
- 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 = ts_utils._get_line_for_node(expr, type_patterns, transform_fn, bufnr)
- if line ~= "" then
- if allow_duplicates or not vim.tbl_contains(lines, line) then
- table.insert(lines, 1, line)
- end
- 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/lua/nvim-treesitter/ts_utils.lua b/lua/nvim-treesitter/ts_utils.lua
deleted file mode 100644
index ce103790c..000000000
--- a/lua/nvim-treesitter/ts_utils.lua
+++ /dev/null
@@ -1,482 +0,0 @@
-local api = vim.api
-
-local parsers = require "nvim-treesitter.parsers"
-local utils = require "nvim-treesitter.utils"
-local ts = vim.treesitter
-
-local M = {}
-
-local function get_node_text(node, bufnr)
- 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 = ts.get_node_range(node)
-
- if start_row ~= end_row then
- local lines = api.nvim_buf_get_lines(bufnr, start_row, end_row + 1, false)
- if next(lines) == nil then
- return {}
- end
- 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
-
----@private
----@param node TSNode
----@param type_patterns string[]
----@param transform_fn fun(line: string): string
----@param bufnr integer
----@return string
-function M._get_line_for_node(node, type_patterns, transform_fn, bufnr)
- 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(get_node_text(node, bufnr)[1] or ""), node)
- -- Escape % to avoid statusline to evaluate content as expression
- return line:gsub("%%", "%%%%")
-end
-
--- Gets the actual text content of a node
--- @deprecated Use vim.treesitter.get_node_text
--- @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)
- vim.notify_once(
- "nvim-treesitter.ts_utils.get_node_text is deprecated: use vim.treesitter.get_node_text",
- vim.log.levels.WARN
- )
- return get_node_text(node, bufnr)
-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 TSNode
----@param allow_switch_parents? boolean allow switching parents if last node
----@param allow_next_parent? boolean 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 ---@type TSNode
- 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 TSNode
----@param allow_switch_parents? boolean allow switching parents if first node
----@param allow_previous_parent? boolean 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 ---@type TSNode
- 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 = {} ---@type TSNode[]
- 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, ignore_injected_langs)
- 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 ---@type TSNode|nil
- if ignore_injected_langs then
- for _, tree in pairs(root_lang_tree:trees()) do
- local tree_root = tree:root()
- if tree_root and ts.is_in_node_range(tree_root, cursor_range[1], cursor_range[2]) then
- root = tree_root
- break
- end
- end
- else
- root = M.get_root_for_position(cursor_range[1], cursor_range[2], root_lang_tree)
- end
-
- 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 }
-
- while true do
- for _, tree in pairs(lang_tree:trees()) do
- local root = tree:root()
-
- if root and ts.is_in_node_range(root, line, col) then
- return root, tree, lang_tree
- end
- end
-
- if lang_tree == root_lang_tree then
- break
- end
-
- -- This case can happen when the cursor is at the start of a line that ends a injected region,
- -- e.g., the first `]` in the following lua code:
- -- ```
- -- vim.cmd[[
- -- ]]
- -- ```
- lang_tree = lang_tree:parent() -- NOTE: parent() method is private
- end
-
- -- This isn't a likely scenario, since the position must belong to a tree somewhere.
- return nil, nil, lang_tree
-end
-
----comment
----@param node TSNode
----@return TSNode result
-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.
----comment
----@param range integer[]
----@param buf integer|nil
----@return integer, integer, integer, integer
-function M.get_vim_range(range, buf)
- ---@type integer, integer, integer, integer
- 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
- ecol = math.max(ecol, 1)
- end
- return srow, scol, erow, ecol
-end
-
-function M.highlight_range(range, buf, hl_namespace, hl_group)
- ---@type integer, integer, integer, integer
- local start_row, start_col, end_row, end_col = unpack(range)
- ---@diagnostic disable-next-line: missing-parameter
- 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 "<C-v>" (as a string with 5 characters or a single character)
-function M.update_selection(buf, node, selection_mode)
- local start_row, start_col, end_row, end_col = M.get_vim_range({ ts.get_node_range(node) }, buf)
-
- local v_table = { charwise = "v", linewise = "V", blockwise = "<C-v>" }
- selection_mode = selection_mode or "charwise"
-
- -- Normalise selection_mode
- if vim.tbl_contains(vim.tbl_keys(v_table), selection_mode) then
- selection_mode = v_table[selection_mode]
- end
-
- -- enter visual mode if normal or operator-pending (no) mode
- -- Why? According to https://learnvimscriptthehardway.stevelosh.com/chapters/15.html
- -- If your operator-pending mapping ends with some text visually selected, Vim will operate on that text.
- -- Otherwise, Vim will operate on the text between the original cursor position and the new position.
- local mode = api.nvim_get_mode()
- if mode.mode ~= selection_mode then
- -- Call to `nvim_replace_termcodes()` is needed for sending appropriate command to enter blockwise mode
- selection_mode = vim.api.nvim_replace_termcodes(selection_mode, true, true, true)
- api.nvim_cmd({ cmd = "normal", bang = true, args = { selection_mode } }, {})
- end
-
- api.nvim_win_set_cursor(0, { start_row, start_col - 1 })
- vim.cmd "normal! o"
- api.nvim_win_set_cursor(0, { end_row, end_col - 1 })
-end
-
--- Byte length of node range
----@param node TSNode
----@return number
-function M.node_length(node)
- local _, _, start_byte = node:start()
- local _, _, end_byte = node:end_()
- return end_byte - start_byte
-end
-
----@deprecated Use `vim.treesitter.is_in_node_range()` instead
-function M.is_in_node_range(node, line, col)
- vim.notify_once(
- "nvim-treesitter.ts_utils.is_in_node_range is deprecated: use vim.treesitter.is_in_node_range",
- vim.log.levels.WARN
- )
- return ts.is_in_node_range(node, line, col)
-end
-
----@deprecated Use `vim.treesitter.get_node_range()` instead
-function M.get_node_range(node_or_range)
- vim.notify_once(
- "nvim-treesitter.ts_utils.get_node_range is deprecated: use vim.treesitter.get_node_range",
- vim.log.levels.WARN
- )
- return ts.get_node_range(node_or_range)
-end
-
----@param node TSNode
----@return table
-function M.node_to_lsp_range(node)
- local start_line, start_col, end_line, end_col = ts.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.
--- The options argument is a table with two optional values:
--- - bufnr: extracts a bufnr from the given arguments.
--- - key: extracts the cache key from the given arguments.
----@param fn function the fn to memoize, taking the buffer as first argument
----@param options? {bufnr: integer?, key: string|fun(...): string?} the memoization options
----@return function: a memoized function
-function M.memoize_by_buf_tick(fn, options)
- options = options or {}
-
- ---@type table<string, {result: any, last_tick: integer}>
- local cache = setmetatable({}, { __mode = "kv" })
- 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 = get_node_text(node_or_range1, bufnr)
- local text2 = get_node_text(node_or_range2, bufnr)
-
- local edit1 = { range = range1, newText = table.concat(text2, "\n") }
- local edit2 = { range = range2, newText = table.concat(text1, "\n") }
- bufnr = bufnr == 0 and vim.api.nvim_get_current_buf() or bufnr
- 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() } }
- ---@type table<number>
- local position
- if not goto_end then
- position = { range[1], range[2] }
- else
- position = { range[3], range[4] }
- end
-
- -- Enter visual mode if we are in operator pending mode
- -- If we don't do this, it will miss the last character.
- local mode = vim.api.nvim_get_mode()
- if mode.mode == "no" then
- vim.cmd "normal! v"
- end
-
- -- Position is 1, 0 indexed.
- api.nvim_win_set_cursor(0, { position[1], position[2] - 1 })
-end
-
-return M
diff --git a/lua/nvim-treesitter/tsrange.lua b/lua/nvim-treesitter/tsrange.lua
deleted file mode 100644
index d41585c60..000000000
--- a/lua/nvim-treesitter/tsrange.lua
+++ /dev/null
@@ -1,154 +0,0 @@
-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/lua/nvim-treesitter/utils.lua b/lua/nvim-treesitter/utils.lua
index d920f4a61..f9e5a2b86 100644
--- a/lua/nvim-treesitter/utils.lua
+++ b/lua/nvim-treesitter/utils.lua
@@ -1,237 +1,12 @@
-local api = vim.api
-local fn = vim.fn
-local luv = vim.loop
-
local M = {}
--- Wrapper around vim.notify with common options set.
----@param msg string
----@param log_level number|nil
----@param opts table|nil
-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
-
--- Returns the system-specific path separator.
----@return string
-function M.get_path_sep()
- return (fn.has "win32" == 1 and not vim.opt.shellslash:get()) 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"
----@param separator string
----@return fun(...: string): string
-function M.generate_join(separator)
- return function(...)
- return table.concat({ ... }, separator)
- end
-end
-
-M.join_path = M.generate_join(M.get_path_sep())
-
-M.join_space = M.generate_join " "
-
----@class Command
----@field run function
----@field f_args string
----@field args string
-
--- 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 hierarchy - nvim-treesitter.module
----@param commands table<string, Command> 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 <f-args>)
---- - 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
---- <pre>
---- M.commands = {
---- custom_command = {
---- run = M.module_function,
---- f_args = "<f-args>",
---- args = {
---- "-range"
---- }
---- }
---- }
----
---- utils.setup_commands("custom_mod", require("nvim-treesitter.custom_mod").commands)
---- </pre>
----
---- Will generate command :
---- <pre>
---- command! -range custom_command \
---- lua require'nvim-treesitter.custom_mod'.commands.custom_command['run<bang>'](<f-args>)
---- </pre>
-function M.setup_commands(mod, commands)
- for command_name, def in pairs(commands) do
- local f_args = def.f_args or "<f-args>"
- local call_fn =
- string.format("lua require'nvim-treesitter.%s'.commands.%s['run<bang>'](%s)", mod, command_name, f_args)
- local parts = require("nvim-treesitter.compat").flatten {
- "command!",
- "-bar",
- def.args,
- command_name,
- call_fn,
- }
- api.nvim_command(table.concat(parts, " "))
- end
-end
-
----@param dir string
----@param create_err string
----@param writeable_err string
----@return string|nil, string|nil
-function M.create_or_reuse_writable_dir(dir, create_err, writeable_err)
- create_err = create_err or M.join_space("Could not create dir '", dir, "': ")
- writeable_err = writeable_err or M.join_space("Invalid rights, '", dir, "' should be read/write")
- -- Try creating and using parser_dir if it doesn't exist
- if not luv.fs_stat(dir) then
- local ok, error = pcall(vim.fn.mkdir, dir, "p", "0755")
- if not ok then
- return nil, M.join_space(create_err, error)
- end
-
- return dir
- end
-
- -- parser_dir exists, use it if it's read/write
- if luv.fs_access(dir, "RW") then
- return dir
- end
-
- -- parser_dir exists but isn't read/write, give up
- return nil, M.join_space(writeable_err, dir, "'")
-end
-
-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, M.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()
- return M.join_path(fn.stdpath "data", "site")
-end
-
--- Gets a property at path
----@param tbl table the table to access
----@param path string the '.' separated path
----@return table|nil result 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)
- ---@type table[]|table
- local result = tbl
-
- for _, segment in ipairs(segments) do
- if type(result) == "table" then
- ---@type table
- -- TODO: figure out the actual type of tbl
- result = result[segment]
- end
- end
-
- return result
-end
-
-function M.set_jump()
- vim.cmd "normal! m'"
-end
-
--- Filters a list based on the given predicate
----@param tbl any[] The list to filter
----@param predicate fun(v:any, i:number):boolean 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.
----@param tbl1 any[] The first table
----@param tbl2 any[] The second table
----@return 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
-
--- Returns a function returning the given value
----@param a any
----@return fun():any
-function M.constant(a)
- return function()
- return a
- end
-end
-
--- Returns a function that returns the given value if it is a function,
--- otherwise returns a function that returns the given value.
----@param a any
----@return fun(...):any
-function M.to_func(a)
- return type(a) == "function" and a or M.constant(a)
+--TODO(clason): replace by vim.fs._join_paths
+function M.join_path(...)
+ return (table.concat({ ... }, '/'):gsub('//+', '/'))
end
----@return string|nil
-function M.ts_cli_version()
- if fn.executable "tree-sitter" == 1 then
- local handle = io.popen "tree-sitter -V"
- if not handle then
- return
- end
- local result = handle:read "*a"
- handle:close()
- return vim.split(result, "\n")[1]:match "[^tree%psitter ].*"
- end
+function M.get_package_path(...)
+ return M.join_path(vim.fn.fnamemodify(debug.getinfo(1, 'S').source:sub(2), ':p:h:h:h'), ...)
end
return M
diff --git a/parser-info/.gitignore b/parser-info/.gitignore
deleted file mode 100644
index d6b7ef32c..000000000
--- a/parser-info/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
diff --git a/parser/.gitignore b/parser/.gitignore
deleted file mode 100644
index d6b7ef32c..000000000
--- a/parser/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
diff --git a/plugin/filetypes.lua b/plugin/filetypes.lua
new file mode 100644
index 000000000..a4c236ec3
--- /dev/null
+++ b/plugin/filetypes.lua
@@ -0,0 +1,66 @@
+local filetypes = {
+ angular = { 'htmlangular' },
+ bash = { 'sh' },
+ bibtex = { 'bib' },
+ c_sharp = { 'cs', 'csharp', 'c-sharp' },
+ commonlisp = { 'lisp' },
+ cooklang = { 'cook' },
+ devicetree = { 'dts' },
+ diff = { 'gitdiff' },
+ eex = { 'eelixir' },
+ elixir = { 'ex' },
+ embedded_template = { 'eruby' },
+ erlang = { 'erl' },
+ facility = { 'fsd' },
+ faust = { 'dsp' },
+ gdshader = { 'gdshaderinc' },
+ git_config = { 'gitconfig' },
+ git_rebase = { 'gitrebase' },
+ glimmer = { 'handlebars', 'html.handlebars' },
+ godot_resource = { 'gdresource' },
+ haskell = { 'hs' },
+ haskell_persistent = { 'haskellpersistent' },
+ idris = { 'idris2' },
+ janet_simple = { 'janet' },
+ javascript = { 'javascriptreact', 'ecma', 'jsx', 'js' },
+ javascript_glimmer = { 'javascript.glimmer' },
+ linkerscript = { 'ld' },
+ latex = { 'tex' },
+ m68k = { 'asm68k' },
+ make = { 'automake' },
+ markdown = { 'pandoc', 'quarto', 'rmd' },
+ muttrc = { 'neomuttrc' },
+ ocaml_interface = { 'ocamlinterface' },
+ perl = { 'pl' },
+ poe_filter = { 'poefilter' },
+ properties = { 'jproperties' },
+ python = { 'py', 'gyp' },
+ qmljs = { 'qml' },
+ runescript = { 'clientscript' },
+ scala = { 'sbt' },
+ slang = { 'shaderslang' },
+ sqp = { 'mysqp' },
+ ssh_config = { 'sshconfig' },
+ starlark = { 'bzl' },
+ surface = { 'sface' },
+ t32 = { 'trace32' },
+ tcl = { 'expect' },
+ terraform = { 'terraform-vars' },
+ textproto = { 'pbtxt' },
+ tlaplus = { 'tla' },
+ tsx = { 'typescriptreact', 'typescript.tsx' },
+ typescript = { 'ts' },
+ typescript_glimmer = { 'typescript.glimmer' },
+ typst = { 'typ' },
+ udev = { 'udevrules' },
+ uxntal = { 'tal', 'uxn' },
+ v = { 'vlang' },
+ verilog = { 'systemverilog' },
+ vhs = { 'tape' },
+ xml = { 'xsd', 'xslt', 'svg' },
+ xresources = { 'xdefaults' },
+}
+
+for lang, ft in pairs(filetypes) do
+ vim.treesitter.language.register(lang, ft)
+end
diff --git a/plugin/nvim-treesitter.lua b/plugin/nvim-treesitter.lua
index 4ea3925fd..3ab264d41 100644
--- a/plugin/nvim-treesitter.lua
+++ b/plugin/nvim-treesitter.lua
@@ -1,34 +1,86 @@
--- Last Change: 2022 Apr 16
-
if vim.g.loaded_nvim_treesitter then
return
end
vim.g.loaded_nvim_treesitter = true
--- setup modules
-require("nvim-treesitter").setup()
-
local api = vim.api
--- define autocommands
-local augroup = api.nvim_create_augroup("NvimTreesitter", {})
+local function complete_available_parsers(arglead)
+ return vim.iter.filter(function(v)
+ return v:find(arglead)
+ end, require('nvim-treesitter.parsers').get_available())
+end
+
+local function complete_installed_parsers(arglead)
+ return vim.iter.filter(function(v)
+ return v:find(arglead)
+ end, require('nvim-treesitter.config').installed_parsers())
+end
+
+-- create user commands
+api.nvim_create_user_command('TSInstallInfo', function()
+ require('nvim-treesitter.install').info()
+end, { nargs = 0, desc = 'List available treesitter parsers' })
+
+api.nvim_create_user_command('TSInstall', function(args)
+ require('nvim-treesitter.install').install(args.fargs, { force = args.bang })
+end, {
+ nargs = '+',
+ bang = true,
+ bar = true,
+ complete = complete_available_parsers,
+ desc = 'Install treesitter parsers',
+})
+
+api.nvim_create_user_command('TSInstallFromGrammar', function(args)
+ require('nvim-treesitter.install').install(args.fargs, {
+ generate_from_grammar = true,
+ force = args.bang,
+ })
+end, {
+ nargs = '+',
+ bang = true,
+ bar = true,
+ complete = complete_available_parsers,
+ desc = 'Install treesitter parsers from grammar',
+})
+
+api.nvim_create_user_command('TSInstallSync', function(args)
+ require('nvim-treesitter.install').install(args.fargs, {
+ with_sync = true,
+ force = args.bang,
+ })
+end, {
+ nargs = '+',
+ bang = true,
+ bar = true,
+ complete = complete_available_parsers,
+ desc = 'Install treesitter parsers synchronously',
+})
+
+api.nvim_create_user_command('TSUpdate', function(args)
+ require('nvim-treesitter.install').update(args.fargs)
+end, {
+ nargs = '*',
+ bar = true,
+ complete = complete_installed_parsers,
+ desc = 'Update installed treesitter parsers',
+})
+
+api.nvim_create_user_command('TSUpdateSync', function(args)
+ require('nvim-treesitter.install').update(args.fargs, { with_sync = true })
+end, {
+ nargs = '*',
+ bar = true,
+ complete = complete_installed_parsers,
+ desc = 'Update installed treesitter parsers synchronously',
+})
-api.nvim_create_autocmd("Filetype", {
- pattern = "query",
- group = augroup,
- callback = function()
- api.nvim_clear_autocmds {
- group = augroup,
- event = "BufWritePost",
- }
- api.nvim_create_autocmd("BufWritePost", {
- group = augroup,
- buffer = 0,
- callback = function(opts)
- require("nvim-treesitter.query").invalidate_query_file(opts.file)
- end,
- desc = "Invalidate query file",
- })
- end,
- desc = "Reload query",
+api.nvim_create_user_command('TSUninstall', function(args)
+ require('nvim-treesitter.install').uninstall(args.fargs)
+end, {
+ nargs = '+',
+ bar = true,
+ complete = complete_installed_parsers,
+ desc = 'Uninstall treesitter parsers',
})
diff --git a/plugin/query_predicates.lua b/plugin/query_predicates.lua
new file mode 100644
index 000000000..abffea2f0
--- /dev/null
+++ b/plugin/query_predicates.lua
@@ -0,0 +1,141 @@
+local query = vim.treesitter.query
+
+-- register custom predicates
+
+---@param match (TSNode|nil)[]
+---@param pred string[]
+---@return boolean|nil
+query.add_predicate('kind-eq?', function(match, _, _, pred)
+ local node = match[pred[2]]
+ if not node then
+ return true
+ end
+
+ local types = { unpack(pred, 3) }
+ return vim.list_contains(types, node:type())
+end)
+
+-- register custom directives
+
+local mimetype_aliases = {
+ ['importmap'] = 'json',
+ ['module'] = 'javascript',
+ ['application/ecmascript'] = 'javascript',
+ ['text/ecmascript'] = 'javascript',
+}
+
+---@param match (TSNode|nil)[]
+---@param _ string
+---@param bufnr integer
+---@param pred string[]
+---@return boolean|nil
+query.add_directive('set-lang-from-mimetype!', function(match, _, bufnr, pred, metadata)
+ local capture_id = pred[2]
+ local node = match[capture_id]
+ if not node then
+ return
+ end
+ local type_attr_value = vim.treesitter.get_node_text(node, bufnr)
+ local configured = mimetype_aliases[type_attr_value]
+ if configured then
+ metadata['injection.language'] = configured
+ else
+ local parts = vim.split(type_attr_value, '/', {})
+ metadata['injection.language'] = parts[#parts]
+ end
+end)
+
+local injection_aliases = {
+ ex = 'elixir',
+ pl = 'perl',
+ sh = 'bash',
+ uxn = 'uxntal',
+ ts = 'typescript',
+}
+
+---@param match (TSNode|nil)[]
+---@param _ string
+---@param bufnr integer
+---@param pred string[]
+---@return boolean|nil
+query.add_directive('set-lang-from-info-string!', function(match, _, bufnr, pred, metadata)
+ local capture_id = pred[2]
+ local node = match[capture_id]
+ if not node then
+ return
+ end
+
+ local injection_alias = vim.treesitter.get_node_text(node, bufnr)
+ local filetype = vim.filetype.match({ filename = 'a.' .. injection_alias })
+ metadata['injection.language'] = filetype or injection_aliases[injection_alias] or injection_alias
+end)
+
+query.add_directive('downcase!', function(match, _, bufnr, pred, metadata)
+ local text, key, value ---@type string|string[], string, string|integer
+
+ 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 = vim.treesitter.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)
+
+-- Trim blank lines from end of the region
+-- Arguments are the captures to trim.
+---@param match (TSNode|nil)[]
+---@param _ string
+---@param bufnr integer
+---@param pred string[]
+---@param metadata table
+---TODO(clason): upstream
+query.add_directive('trim!', function(match, _, bufnr, pred, metadata)
+ for _, id in ipairs({ select(2, unpack(pred)) }) do
+ local node = match[id]
+ if not node then
+ return
+ end
+
+ local start_row, start_col, end_row, end_col = node:range()
+
+ -- Don't trim if region ends in middle of a line
+ if end_col ~= 0 then
+ return
+ end
+
+ while true do
+ -- As we only care when end_col == 0, always inspect one line above end_row.
+ local end_line = vim.api.nvim_buf_get_lines(bufnr, end_row - 1, end_row, true)[1]
+
+ if end_line ~= '' then
+ break
+ end
+
+ end_row = end_row - 1
+ end
+
+ -- If this produces an invalid range, we just skip it.
+ if start_row < end_row or (start_row == end_row and start_col <= end_col) then
+ if not metadata[id] then
+ metadata[id] = {}
+ end
+ metadata[id].range = { start_row, start_col, end_row, end_col }
+ end
+ end
+end)
diff --git a/queries/ada/folds.scm b/runtime/queries/ada/folds.scm
index 8e3defac4..8e3defac4 100644
--- a/queries/ada/folds.scm
+++ b/runtime/queries/ada/folds.scm
diff --git a/queries/ada/highlights.scm b/runtime/queries/ada/highlights.scm
index 0d42b70f9..0d42b70f9 100644
--- a/queries/ada/highlights.scm
+++ b/runtime/queries/ada/highlights.scm
diff --git a/queries/unison/injections.scm b/runtime/queries/ada/injections.scm
index f9754504e..f9754504e 100644
--- a/queries/unison/injections.scm
+++ b/runtime/queries/ada/injections.scm
diff --git a/queries/ada/locals.scm b/runtime/queries/ada/locals.scm
index bdfc38be8..bdfc38be8 100644
--- a/queries/ada/locals.scm
+++ b/runtime/queries/ada/locals.scm
diff --git a/queries/agda/folds.scm b/runtime/queries/agda/folds.scm
index 5e1051f8f..5e1051f8f 100644
--- a/queries/agda/folds.scm
+++ b/runtime/queries/agda/folds.scm
diff --git a/queries/agda/highlights.scm b/runtime/queries/agda/highlights.scm
index 4626a8c12..4626a8c12 100644
--- a/queries/agda/highlights.scm
+++ b/runtime/queries/agda/highlights.scm
diff --git a/queries/solidity/injections.scm b/runtime/queries/agda/injections.scm
index a772e0bd9..a772e0bd9 100644
--- a/queries/solidity/injections.scm
+++ b/runtime/queries/agda/injections.scm
diff --git a/queries/angular/folds.scm b/runtime/queries/angular/folds.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/angular/folds.scm
+++ b/runtime/queries/angular/folds.scm
diff --git a/queries/angular/highlights.scm b/runtime/queries/angular/highlights.scm
index 271e352e5..271e352e5 100644
--- a/queries/angular/highlights.scm
+++ b/runtime/queries/angular/highlights.scm
diff --git a/queries/angular/indents.scm b/runtime/queries/angular/indents.scm
index 2f46aa5bc..2f46aa5bc 100644
--- a/queries/angular/indents.scm
+++ b/runtime/queries/angular/indents.scm
diff --git a/queries/angular/injections.scm b/runtime/queries/angular/injections.scm
index 448e94275..448e94275 100644
--- a/queries/angular/injections.scm
+++ b/runtime/queries/angular/injections.scm
diff --git a/queries/angular/locals.scm b/runtime/queries/angular/locals.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/angular/locals.scm
+++ b/runtime/queries/angular/locals.scm
diff --git a/queries/apex/folds.scm b/runtime/queries/apex/folds.scm
index fdfc2a1ed..fdfc2a1ed 100644
--- a/queries/apex/folds.scm
+++ b/runtime/queries/apex/folds.scm
diff --git a/queries/apex/highlights.scm b/runtime/queries/apex/highlights.scm
index 82ce23414..82ce23414 100644
--- a/queries/apex/highlights.scm
+++ b/runtime/queries/apex/highlights.scm
diff --git a/queries/apex/injections.scm b/runtime/queries/apex/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/apex/injections.scm
+++ b/runtime/queries/apex/injections.scm
diff --git a/queries/apex/locals.scm b/runtime/queries/apex/locals.scm
index d758f14cf..d758f14cf 100644
--- a/queries/apex/locals.scm
+++ b/runtime/queries/apex/locals.scm
diff --git a/queries/arduino/folds.scm b/runtime/queries/arduino/folds.scm
index b617fdc56..b617fdc56 100644
--- a/queries/arduino/folds.scm
+++ b/runtime/queries/arduino/folds.scm
diff --git a/queries/arduino/highlights.scm b/runtime/queries/arduino/highlights.scm
index e6bf14784..e6bf14784 100644
--- a/queries/arduino/highlights.scm
+++ b/runtime/queries/arduino/highlights.scm
diff --git a/queries/arduino/indents.scm b/runtime/queries/arduino/indents.scm
index b617fdc56..b617fdc56 100644
--- a/queries/arduino/indents.scm
+++ b/runtime/queries/arduino/indents.scm
diff --git a/queries/arduino/injections.scm b/runtime/queries/arduino/injections.scm
index b617fdc56..b617fdc56 100644
--- a/queries/arduino/injections.scm
+++ b/runtime/queries/arduino/injections.scm
diff --git a/queries/arduino/locals.scm b/runtime/queries/arduino/locals.scm
index b617fdc56..b617fdc56 100644
--- a/queries/arduino/locals.scm
+++ b/runtime/queries/arduino/locals.scm
diff --git a/queries/asm/highlights.scm b/runtime/queries/asm/highlights.scm
index eccf9c996..eccf9c996 100644
--- a/queries/asm/highlights.scm
+++ b/runtime/queries/asm/highlights.scm
diff --git a/queries/asm/injections.scm b/runtime/queries/asm/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/asm/injections.scm
+++ b/runtime/queries/asm/injections.scm
diff --git a/queries/astro/folds.scm b/runtime/queries/astro/folds.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/astro/folds.scm
+++ b/runtime/queries/astro/folds.scm
diff --git a/queries/astro/highlights.scm b/runtime/queries/astro/highlights.scm
index e2917ad4d..e2917ad4d 100644
--- a/queries/astro/highlights.scm
+++ b/runtime/queries/astro/highlights.scm
diff --git a/queries/astro/indents.scm b/runtime/queries/astro/indents.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/astro/indents.scm
+++ b/runtime/queries/astro/indents.scm
diff --git a/queries/astro/injections.scm b/runtime/queries/astro/injections.scm
index d4f15ba56..d4f15ba56 100644
--- a/queries/astro/injections.scm
+++ b/runtime/queries/astro/injections.scm
diff --git a/queries/astro/locals.scm b/runtime/queries/astro/locals.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/astro/locals.scm
+++ b/runtime/queries/astro/locals.scm
diff --git a/queries/authzed/highlights.scm b/runtime/queries/authzed/highlights.scm
index fb946caaf..fb946caaf 100644
--- a/queries/authzed/highlights.scm
+++ b/runtime/queries/authzed/highlights.scm
diff --git a/queries/bass/injections.scm b/runtime/queries/authzed/injections.scm
index 298a8d070..298a8d070 100644
--- a/queries/bass/injections.scm
+++ b/runtime/queries/authzed/injections.scm
diff --git a/queries/awk/highlights.scm b/runtime/queries/awk/highlights.scm
index 51ec9c08e..51ec9c08e 100644
--- a/queries/awk/highlights.scm
+++ b/runtime/queries/awk/highlights.scm
diff --git a/queries/awk/injections.scm b/runtime/queries/awk/injections.scm
index 3e67da245..3e67da245 100644
--- a/queries/awk/injections.scm
+++ b/runtime/queries/awk/injections.scm
diff --git a/queries/bash/folds.scm b/runtime/queries/bash/folds.scm
index 766dbe598..766dbe598 100644
--- a/queries/bash/folds.scm
+++ b/runtime/queries/bash/folds.scm
diff --git a/queries/bash/highlights.scm b/runtime/queries/bash/highlights.scm
index 58d57d9e5..58d57d9e5 100644
--- a/queries/bash/highlights.scm
+++ b/runtime/queries/bash/highlights.scm
diff --git a/queries/bash/injections.scm b/runtime/queries/bash/injections.scm
index 9b86e351a..9b86e351a 100644
--- a/queries/bash/injections.scm
+++ b/runtime/queries/bash/injections.scm
diff --git a/queries/bash/locals.scm b/runtime/queries/bash/locals.scm
index 347f51fa2..347f51fa2 100644
--- a/queries/bash/locals.scm
+++ b/runtime/queries/bash/locals.scm
diff --git a/queries/bass/folds.scm b/runtime/queries/bass/folds.scm
index d99e0c1ac..d99e0c1ac 100644
--- a/queries/bass/folds.scm
+++ b/runtime/queries/bass/folds.scm
diff --git a/queries/bass/highlights.scm b/runtime/queries/bass/highlights.scm
index f84993af1..f84993af1 100644
--- a/queries/bass/highlights.scm
+++ b/runtime/queries/bass/highlights.scm
diff --git a/queries/bass/indents.scm b/runtime/queries/bass/indents.scm
index 27b976f21..27b976f21 100644
--- a/queries/bass/indents.scm
+++ b/runtime/queries/bass/indents.scm
diff --git a/queries/scala/injections.scm b/runtime/queries/bass/injections.scm
index 1c2fe3cc9..1c2fe3cc9 100644
--- a/queries/scala/injections.scm
+++ b/runtime/queries/bass/injections.scm
diff --git a/queries/bass/locals.scm b/runtime/queries/bass/locals.scm
index daed7e5e1..daed7e5e1 100644
--- a/queries/bass/locals.scm
+++ b/runtime/queries/bass/locals.scm
diff --git a/queries/beancount/folds.scm b/runtime/queries/beancount/folds.scm
index 9f1b6cbed..9f1b6cbed 100644
--- a/queries/beancount/folds.scm
+++ b/runtime/queries/beancount/folds.scm
diff --git a/queries/beancount/highlights.scm b/runtime/queries/beancount/highlights.scm
index 1e23d28f4..1e23d28f4 100644
--- a/queries/beancount/highlights.scm
+++ b/runtime/queries/beancount/highlights.scm
diff --git a/queries/verilog/injections.scm b/runtime/queries/beancount/injections.scm
index 05aa24d8f..05aa24d8f 100644
--- a/queries/verilog/injections.scm
+++ b/runtime/queries/beancount/injections.scm
diff --git a/queries/bibtex/folds.scm b/runtime/queries/bibtex/folds.scm
index 321a045c9..321a045c9 100644
--- a/queries/bibtex/folds.scm
+++ b/runtime/queries/bibtex/folds.scm
diff --git a/queries/bibtex/highlights.scm b/runtime/queries/bibtex/highlights.scm
index 2231a17db..2231a17db 100644
--- a/queries/bibtex/highlights.scm
+++ b/runtime/queries/bibtex/highlights.scm
diff --git a/queries/bibtex/indents.scm b/runtime/queries/bibtex/indents.scm
index 764172a76..764172a76 100644
--- a/queries/bibtex/indents.scm
+++ b/runtime/queries/bibtex/indents.scm
diff --git a/queries/bibtex/injections.scm b/runtime/queries/bibtex/injections.scm
index 98ad387d9..98ad387d9 100644
--- a/queries/bibtex/injections.scm
+++ b/runtime/queries/bibtex/injections.scm
diff --git a/queries/bicep/folds.scm b/runtime/queries/bicep/folds.scm
index 217a86d6a..217a86d6a 100644
--- a/queries/bicep/folds.scm
+++ b/runtime/queries/bicep/folds.scm
diff --git a/queries/bicep/highlights.scm b/runtime/queries/bicep/highlights.scm
index 35c9d6c17..35c9d6c17 100644
--- a/queries/bicep/highlights.scm
+++ b/runtime/queries/bicep/highlights.scm
diff --git a/queries/bicep/indents.scm b/runtime/queries/bicep/indents.scm
index 055e51b23..055e51b23 100644
--- a/queries/bicep/indents.scm
+++ b/runtime/queries/bicep/indents.scm
diff --git a/queries/bicep/injections.scm b/runtime/queries/bicep/injections.scm
index 5c2d4a57b..5c2d4a57b 100644
--- a/queries/bicep/injections.scm
+++ b/runtime/queries/bicep/injections.scm
diff --git a/queries/bicep/locals.scm b/runtime/queries/bicep/locals.scm
index cc9c3c2cf..cc9c3c2cf 100644
--- a/queries/bicep/locals.scm
+++ b/runtime/queries/bicep/locals.scm
diff --git a/queries/bitbake/folds.scm b/runtime/queries/bitbake/folds.scm
index 85d226348..85d226348 100644
--- a/queries/bitbake/folds.scm
+++ b/runtime/queries/bitbake/folds.scm
diff --git a/queries/bitbake/highlights.scm b/runtime/queries/bitbake/highlights.scm
index c7316de6e..c7316de6e 100644
--- a/queries/bitbake/highlights.scm
+++ b/runtime/queries/bitbake/highlights.scm
diff --git a/queries/bitbake/indents.scm b/runtime/queries/bitbake/indents.scm
index 5f2081868..5f2081868 100644
--- a/queries/bitbake/indents.scm
+++ b/runtime/queries/bitbake/indents.scm
diff --git a/queries/bitbake/injections.scm b/runtime/queries/bitbake/injections.scm
index 35c984a5b..35c984a5b 100644
--- a/queries/bitbake/injections.scm
+++ b/runtime/queries/bitbake/injections.scm
diff --git a/queries/bitbake/locals.scm b/runtime/queries/bitbake/locals.scm
index e4726ec51..e4726ec51 100644
--- a/queries/bitbake/locals.scm
+++ b/runtime/queries/bitbake/locals.scm
diff --git a/queries/blade/folds.scm b/runtime/queries/blade/folds.scm
index cc081a754..cc081a754 100644
--- a/queries/blade/folds.scm
+++ b/runtime/queries/blade/folds.scm
diff --git a/queries/blade/highlights.scm b/runtime/queries/blade/highlights.scm
index c05d2845f..c05d2845f 100644
--- a/queries/blade/highlights.scm
+++ b/runtime/queries/blade/highlights.scm
diff --git a/queries/blade/indents.scm b/runtime/queries/blade/indents.scm
index bd3e84d16..bd3e84d16 100644
--- a/queries/blade/indents.scm
+++ b/runtime/queries/blade/indents.scm
diff --git a/queries/blade/injections.scm b/runtime/queries/blade/injections.scm
index 12fa9f953..12fa9f953 100644
--- a/queries/blade/injections.scm
+++ b/runtime/queries/blade/injections.scm
diff --git a/queries/blueprint/highlights.scm b/runtime/queries/blueprint/highlights.scm
index f3c39f232..f3c39f232 100644
--- a/queries/blueprint/highlights.scm
+++ b/runtime/queries/blueprint/highlights.scm
diff --git a/queries/ada/injections.scm b/runtime/queries/blueprint/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/ada/injections.scm
+++ b/runtime/queries/blueprint/injections.scm
diff --git a/queries/bp/folds.scm b/runtime/queries/bp/folds.scm
index c40ea3df4..c40ea3df4 100644
--- a/queries/bp/folds.scm
+++ b/runtime/queries/bp/folds.scm
diff --git a/queries/bp/highlights.scm b/runtime/queries/bp/highlights.scm
index 5f94f4c11..5f94f4c11 100644
--- a/queries/bp/highlights.scm
+++ b/runtime/queries/bp/highlights.scm
diff --git a/queries/bp/indents.scm b/runtime/queries/bp/indents.scm
index 8cf8adc83..8cf8adc83 100644
--- a/queries/bp/indents.scm
+++ b/runtime/queries/bp/indents.scm
diff --git a/queries/agda/injections.scm b/runtime/queries/bp/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/agda/injections.scm
+++ b/runtime/queries/bp/injections.scm
diff --git a/queries/bp/locals.scm b/runtime/queries/bp/locals.scm
index c8a5a1719..c8a5a1719 100644
--- a/queries/bp/locals.scm
+++ b/runtime/queries/bp/locals.scm
diff --git a/queries/brightscript/folds.scm b/runtime/queries/brightscript/folds.scm
index 56b7d575b..56b7d575b 100644
--- a/queries/brightscript/folds.scm
+++ b/runtime/queries/brightscript/folds.scm
diff --git a/queries/brightscript/highlights.scm b/runtime/queries/brightscript/highlights.scm
index 5758f565b..5758f565b 100644
--- a/queries/brightscript/highlights.scm
+++ b/runtime/queries/brightscript/highlights.scm
diff --git a/queries/brightscript/indents.scm b/runtime/queries/brightscript/indents.scm
index e54bf52c1..e54bf52c1 100644
--- a/queries/brightscript/indents.scm
+++ b/runtime/queries/brightscript/indents.scm
diff --git a/queries/authzed/injections.scm b/runtime/queries/brightscript/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/authzed/injections.scm
+++ b/runtime/queries/brightscript/injections.scm
diff --git a/queries/c/folds.scm b/runtime/queries/c/folds.scm
index bb26a62eb..bb26a62eb 100644
--- a/queries/c/folds.scm
+++ b/runtime/queries/c/folds.scm
diff --git a/queries/c/highlights.scm b/runtime/queries/c/highlights.scm
index ea65075f2..ea65075f2 100644
--- a/queries/c/highlights.scm
+++ b/runtime/queries/c/highlights.scm
diff --git a/queries/c/indents.scm b/runtime/queries/c/indents.scm
index 1932ce8d6..1932ce8d6 100644
--- a/queries/c/indents.scm
+++ b/runtime/queries/c/indents.scm
diff --git a/queries/c/injections.scm b/runtime/queries/c/injections.scm
index 24634864e..24634864e 100644
--- a/queries/c/injections.scm
+++ b/runtime/queries/c/injections.scm
diff --git a/queries/c/locals.scm b/runtime/queries/c/locals.scm
index 13a122790..13a122790 100644
--- a/queries/c/locals.scm
+++ b/runtime/queries/c/locals.scm
diff --git a/queries/c_sharp/folds.scm b/runtime/queries/c_sharp/folds.scm
index 16967b69d..16967b69d 100644
--- a/queries/c_sharp/folds.scm
+++ b/runtime/queries/c_sharp/folds.scm
diff --git a/queries/c_sharp/highlights.scm b/runtime/queries/c_sharp/highlights.scm
index f23d7ec65..f23d7ec65 100644
--- a/queries/c_sharp/highlights.scm
+++ b/runtime/queries/c_sharp/highlights.scm
diff --git a/queries/beancount/injections.scm b/runtime/queries/c_sharp/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/beancount/injections.scm
+++ b/runtime/queries/c_sharp/injections.scm
diff --git a/queries/c_sharp/locals.scm b/runtime/queries/c_sharp/locals.scm
index bef094007..bef094007 100644
--- a/queries/c_sharp/locals.scm
+++ b/runtime/queries/c_sharp/locals.scm
diff --git a/queries/caddy/folds.scm b/runtime/queries/caddy/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/caddy/folds.scm
+++ b/runtime/queries/caddy/folds.scm
diff --git a/queries/caddy/highlights.scm b/runtime/queries/caddy/highlights.scm
index 47a170f76..47a170f76 100644
--- a/queries/caddy/highlights.scm
+++ b/runtime/queries/caddy/highlights.scm
diff --git a/queries/caddy/indents.scm b/runtime/queries/caddy/indents.scm
index b746788ab..b746788ab 100644
--- a/queries/caddy/indents.scm
+++ b/runtime/queries/caddy/indents.scm
diff --git a/queries/blueprint/injections.scm b/runtime/queries/caddy/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/blueprint/injections.scm
+++ b/runtime/queries/caddy/injections.scm
diff --git a/queries/cairo/folds.scm b/runtime/queries/cairo/folds.scm
index 9937da6f1..9937da6f1 100644
--- a/queries/cairo/folds.scm
+++ b/runtime/queries/cairo/folds.scm
diff --git a/queries/cairo/highlights.scm b/runtime/queries/cairo/highlights.scm
index 1ea6245d3..1ea6245d3 100644
--- a/queries/cairo/highlights.scm
+++ b/runtime/queries/cairo/highlights.scm
diff --git a/queries/cairo/indents.scm b/runtime/queries/cairo/indents.scm
index f63ef36fe..f63ef36fe 100644
--- a/queries/cairo/indents.scm
+++ b/runtime/queries/cairo/indents.scm
diff --git a/queries/cairo/injections.scm b/runtime/queries/cairo/injections.scm
index fbb66be38..fbb66be38 100644
--- a/queries/cairo/injections.scm
+++ b/runtime/queries/cairo/injections.scm
diff --git a/queries/cairo/locals.scm b/runtime/queries/cairo/locals.scm
index 0573cf6db..0573cf6db 100644
--- a/queries/cairo/locals.scm
+++ b/runtime/queries/cairo/locals.scm
diff --git a/queries/capnp/folds.scm b/runtime/queries/capnp/folds.scm
index 6e3f9c187..6e3f9c187 100644
--- a/queries/capnp/folds.scm
+++ b/runtime/queries/capnp/folds.scm
diff --git a/queries/capnp/highlights.scm b/runtime/queries/capnp/highlights.scm
index a48c007ed..a48c007ed 100644
--- a/queries/capnp/highlights.scm
+++ b/runtime/queries/capnp/highlights.scm
diff --git a/queries/capnp/indents.scm b/runtime/queries/capnp/indents.scm
index cc2f4d756..cc2f4d756 100644
--- a/queries/capnp/indents.scm
+++ b/runtime/queries/capnp/indents.scm
diff --git a/queries/bp/injections.scm b/runtime/queries/capnp/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/bp/injections.scm
+++ b/runtime/queries/capnp/injections.scm
diff --git a/queries/capnp/locals.scm b/runtime/queries/capnp/locals.scm
index d1f0ccacc..d1f0ccacc 100644
--- a/queries/capnp/locals.scm
+++ b/runtime/queries/capnp/locals.scm
diff --git a/queries/chatito/folds.scm b/runtime/queries/chatito/folds.scm
index 052dd2064..052dd2064 100644
--- a/queries/chatito/folds.scm
+++ b/runtime/queries/chatito/folds.scm
diff --git a/queries/chatito/highlights.scm b/runtime/queries/chatito/highlights.scm
index 47113f2cf..47113f2cf 100644
--- a/queries/chatito/highlights.scm
+++ b/runtime/queries/chatito/highlights.scm
diff --git a/queries/chatito/indents.scm b/runtime/queries/chatito/indents.scm
index dc9e13d78..dc9e13d78 100644
--- a/queries/chatito/indents.scm
+++ b/runtime/queries/chatito/indents.scm
diff --git a/queries/brightscript/injections.scm b/runtime/queries/chatito/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/brightscript/injections.scm
+++ b/runtime/queries/chatito/injections.scm
diff --git a/queries/chatito/locals.scm b/runtime/queries/chatito/locals.scm
index 827447f57..827447f57 100644
--- a/queries/chatito/locals.scm
+++ b/runtime/queries/chatito/locals.scm
diff --git a/queries/circom/folds.scm b/runtime/queries/circom/folds.scm
index 47525b174..47525b174 100644
--- a/queries/circom/folds.scm
+++ b/runtime/queries/circom/folds.scm
diff --git a/queries/circom/highlights.scm b/runtime/queries/circom/highlights.scm
index c61925e7a..c61925e7a 100644
--- a/queries/circom/highlights.scm
+++ b/runtime/queries/circom/highlights.scm
diff --git a/queries/c_sharp/injections.scm b/runtime/queries/circom/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/c_sharp/injections.scm
+++ b/runtime/queries/circom/injections.scm
diff --git a/queries/circom/locals.scm b/runtime/queries/circom/locals.scm
index 4c3a75152..4c3a75152 100644
--- a/queries/circom/locals.scm
+++ b/runtime/queries/circom/locals.scm
diff --git a/queries/clojure/folds.scm b/runtime/queries/clojure/folds.scm
index eceb69712..eceb69712 100644
--- a/queries/clojure/folds.scm
+++ b/runtime/queries/clojure/folds.scm
diff --git a/queries/clojure/highlights.scm b/runtime/queries/clojure/highlights.scm
index 264276634..264276634 100644
--- a/queries/clojure/highlights.scm
+++ b/runtime/queries/clojure/highlights.scm
diff --git a/queries/caddy/injections.scm b/runtime/queries/clojure/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/caddy/injections.scm
+++ b/runtime/queries/clojure/injections.scm
diff --git a/queries/clojure/locals.scm b/runtime/queries/clojure/locals.scm
index e47adce45..e47adce45 100644
--- a/queries/clojure/locals.scm
+++ b/runtime/queries/clojure/locals.scm
diff --git a/queries/cmake/folds.scm b/runtime/queries/cmake/folds.scm
index ef153b911..ef153b911 100644
--- a/queries/cmake/folds.scm
+++ b/runtime/queries/cmake/folds.scm
diff --git a/queries/cmake/highlights.scm b/runtime/queries/cmake/highlights.scm
index fbbf0d542..fbbf0d542 100644
--- a/queries/cmake/highlights.scm
+++ b/runtime/queries/cmake/highlights.scm
diff --git a/queries/cmake/indents.scm b/runtime/queries/cmake/indents.scm
index cbd976c7a..cbd976c7a 100644
--- a/queries/cmake/indents.scm
+++ b/runtime/queries/cmake/indents.scm
diff --git a/queries/cmake/injections.scm b/runtime/queries/cmake/injections.scm
index eb8e21503..eb8e21503 100644
--- a/queries/cmake/injections.scm
+++ b/runtime/queries/cmake/injections.scm
diff --git a/queries/comment/highlights.scm b/runtime/queries/comment/highlights.scm
index 5d18b790a..5d18b790a 100644
--- a/queries/comment/highlights.scm
+++ b/runtime/queries/comment/highlights.scm
diff --git a/queries/commonlisp/folds.scm b/runtime/queries/commonlisp/folds.scm
index eceb69712..eceb69712 100644
--- a/queries/commonlisp/folds.scm
+++ b/runtime/queries/commonlisp/folds.scm
diff --git a/queries/commonlisp/highlights.scm b/runtime/queries/commonlisp/highlights.scm
index 7236c84de..7236c84de 100644
--- a/queries/commonlisp/highlights.scm
+++ b/runtime/queries/commonlisp/highlights.scm
diff --git a/queries/commonlisp/injections.scm b/runtime/queries/commonlisp/injections.scm
index dc8982053..dc8982053 100644
--- a/queries/commonlisp/injections.scm
+++ b/runtime/queries/commonlisp/injections.scm
diff --git a/queries/commonlisp/locals.scm b/runtime/queries/commonlisp/locals.scm
index 98036d322..98036d322 100644
--- a/queries/commonlisp/locals.scm
+++ b/runtime/queries/commonlisp/locals.scm
diff --git a/queries/cooklang/highlights.scm b/runtime/queries/cooklang/highlights.scm
index 4ac391899..4ac391899 100644
--- a/queries/cooklang/highlights.scm
+++ b/runtime/queries/cooklang/highlights.scm
diff --git a/queries/capnp/injections.scm b/runtime/queries/cooklang/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/capnp/injections.scm
+++ b/runtime/queries/cooklang/injections.scm
diff --git a/queries/corn/folds.scm b/runtime/queries/corn/folds.scm
index 2ce5ddb31..2ce5ddb31 100644
--- a/queries/corn/folds.scm
+++ b/runtime/queries/corn/folds.scm
diff --git a/queries/corn/highlights.scm b/runtime/queries/corn/highlights.scm
index 8f394ed79..8f394ed79 100644
--- a/queries/corn/highlights.scm
+++ b/runtime/queries/corn/highlights.scm
diff --git a/queries/corn/indents.scm b/runtime/queries/corn/indents.scm
index f1f5e04da..f1f5e04da 100644
--- a/queries/corn/indents.scm
+++ b/runtime/queries/corn/indents.scm
diff --git a/queries/chatito/injections.scm b/runtime/queries/corn/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/chatito/injections.scm
+++ b/runtime/queries/corn/injections.scm
diff --git a/queries/corn/locals.scm b/runtime/queries/corn/locals.scm
index 7e78c4d23..7e78c4d23 100644
--- a/queries/corn/locals.scm
+++ b/runtime/queries/corn/locals.scm
diff --git a/queries/cpon/folds.scm b/runtime/queries/cpon/folds.scm
index 02feec4e1..02feec4e1 100644
--- a/queries/cpon/folds.scm
+++ b/runtime/queries/cpon/folds.scm
diff --git a/queries/cpon/highlights.scm b/runtime/queries/cpon/highlights.scm
index 9cc438ea5..9cc438ea5 100644
--- a/queries/cpon/highlights.scm
+++ b/runtime/queries/cpon/highlights.scm
diff --git a/queries/cpon/indents.scm b/runtime/queries/cpon/indents.scm
index 8ec2ff57c..8ec2ff57c 100644
--- a/queries/cpon/indents.scm
+++ b/runtime/queries/cpon/indents.scm
diff --git a/queries/circom/injections.scm b/runtime/queries/cpon/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/circom/injections.scm
+++ b/runtime/queries/cpon/injections.scm
diff --git a/queries/cpon/locals.scm b/runtime/queries/cpon/locals.scm
index 2a4ba4712..2a4ba4712 100644
--- a/queries/cpon/locals.scm
+++ b/runtime/queries/cpon/locals.scm
diff --git a/queries/cpp/folds.scm b/runtime/queries/cpp/folds.scm
index f5f566480..f5f566480 100644
--- a/queries/cpp/folds.scm
+++ b/runtime/queries/cpp/folds.scm
diff --git a/queries/cpp/highlights.scm b/runtime/queries/cpp/highlights.scm
index 85ff2dc40..85ff2dc40 100644
--- a/queries/cpp/highlights.scm
+++ b/runtime/queries/cpp/highlights.scm
diff --git a/queries/cpp/indents.scm b/runtime/queries/cpp/indents.scm
index 0782d226e..0782d226e 100644
--- a/queries/cpp/indents.scm
+++ b/runtime/queries/cpp/indents.scm
diff --git a/queries/cpp/injections.scm b/runtime/queries/cpp/injections.scm
index 07f21dd14..1fbc8e131 100644
--- a/queries/cpp/injections.scm
+++ b/runtime/queries/cpp/injections.scm
@@ -1,6 +1,4 @@
; inherits: c
-((comment) @injection.content
- (#set! injection.language "comment"))
((comment) @injection.content
(#lua-match? @injection.content "/[*\/][!*\/]<?[^a-zA-Z]")
diff --git a/queries/cpp/locals.scm b/runtime/queries/cpp/locals.scm
index b24ada85f..b24ada85f 100644
--- a/queries/cpp/locals.scm
+++ b/runtime/queries/cpp/locals.scm
diff --git a/queries/css/folds.scm b/runtime/queries/css/folds.scm
index 60d69a917..60d69a917 100644
--- a/queries/css/folds.scm
+++ b/runtime/queries/css/folds.scm
diff --git a/queries/css/highlights.scm b/runtime/queries/css/highlights.scm
index 49471fdb2..49471fdb2 100644
--- a/queries/css/highlights.scm
+++ b/runtime/queries/css/highlights.scm
diff --git a/queries/css/indents.scm b/runtime/queries/css/indents.scm
index 75e4a63a9..75e4a63a9 100644
--- a/queries/css/indents.scm
+++ b/runtime/queries/css/indents.scm
diff --git a/queries/clojure/injections.scm b/runtime/queries/css/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/clojure/injections.scm
+++ b/runtime/queries/css/injections.scm
diff --git a/queries/csv/highlights.scm b/runtime/queries/csv/highlights.scm
index de2213aa1..de2213aa1 100644
--- a/queries/csv/highlights.scm
+++ b/runtime/queries/csv/highlights.scm
diff --git a/queries/cuda/folds.scm b/runtime/queries/cuda/folds.scm
index b617fdc56..b617fdc56 100644
--- a/queries/cuda/folds.scm
+++ b/runtime/queries/cuda/folds.scm
diff --git a/queries/cuda/highlights.scm b/runtime/queries/cuda/highlights.scm
index 6605c5a72..6605c5a72 100644
--- a/queries/cuda/highlights.scm
+++ b/runtime/queries/cuda/highlights.scm
diff --git a/queries/cuda/indents.scm b/runtime/queries/cuda/indents.scm
index b617fdc56..b617fdc56 100644
--- a/queries/cuda/indents.scm
+++ b/runtime/queries/cuda/indents.scm
diff --git a/queries/cuda/injections.scm b/runtime/queries/cuda/injections.scm
index b617fdc56..b617fdc56 100644
--- a/queries/cuda/injections.scm
+++ b/runtime/queries/cuda/injections.scm
diff --git a/queries/cuda/locals.scm b/runtime/queries/cuda/locals.scm
index b617fdc56..b617fdc56 100644
--- a/queries/cuda/locals.scm
+++ b/runtime/queries/cuda/locals.scm
diff --git a/queries/cue/folds.scm b/runtime/queries/cue/folds.scm
index 934b59e6f..934b59e6f 100644
--- a/queries/cue/folds.scm
+++ b/runtime/queries/cue/folds.scm
diff --git a/queries/cue/highlights.scm b/runtime/queries/cue/highlights.scm
index 27d4daddc..27d4daddc 100644
--- a/queries/cue/highlights.scm
+++ b/runtime/queries/cue/highlights.scm
diff --git a/queries/cue/indents.scm b/runtime/queries/cue/indents.scm
index cef2345cc..cef2345cc 100644
--- a/queries/cue/indents.scm
+++ b/runtime/queries/cue/indents.scm
diff --git a/queries/cooklang/injections.scm b/runtime/queries/cue/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/cooklang/injections.scm
+++ b/runtime/queries/cue/injections.scm
diff --git a/queries/cue/locals.scm b/runtime/queries/cue/locals.scm
index b2a8972f7..b2a8972f7 100644
--- a/queries/cue/locals.scm
+++ b/runtime/queries/cue/locals.scm
diff --git a/queries/cylc/folds.scm b/runtime/queries/cylc/folds.scm
index c8bd40703..c8bd40703 100644
--- a/queries/cylc/folds.scm
+++ b/runtime/queries/cylc/folds.scm
diff --git a/queries/cylc/highlights.scm b/runtime/queries/cylc/highlights.scm
index a744caa52..a744caa52 100644
--- a/queries/cylc/highlights.scm
+++ b/runtime/queries/cylc/highlights.scm
diff --git a/queries/cylc/indents.scm b/runtime/queries/cylc/indents.scm
index 0457e4580..0457e4580 100644
--- a/queries/cylc/indents.scm
+++ b/runtime/queries/cylc/indents.scm
diff --git a/queries/cylc/injections.scm b/runtime/queries/cylc/injections.scm
index 41becd699..41becd699 100644
--- a/queries/cylc/injections.scm
+++ b/runtime/queries/cylc/injections.scm
diff --git a/queries/d/folds.scm b/runtime/queries/d/folds.scm
index 49d6256f6..49d6256f6 100644
--- a/queries/d/folds.scm
+++ b/runtime/queries/d/folds.scm
diff --git a/queries/d/highlights.scm b/runtime/queries/d/highlights.scm
index 11d08a1b7..11d08a1b7 100644
--- a/queries/d/highlights.scm
+++ b/runtime/queries/d/highlights.scm
diff --git a/queries/d/indents.scm b/runtime/queries/d/indents.scm
index c89b4e91d..c89b4e91d 100644
--- a/queries/d/indents.scm
+++ b/runtime/queries/d/indents.scm
diff --git a/queries/d/injections.scm b/runtime/queries/d/injections.scm
index cfc1bf986..cfc1bf986 100644
--- a/queries/d/injections.scm
+++ b/runtime/queries/d/injections.scm
diff --git a/queries/d/locals.scm b/runtime/queries/d/locals.scm
index 2cd7b9e89..2cd7b9e89 100644
--- a/queries/d/locals.scm
+++ b/runtime/queries/d/locals.scm
diff --git a/queries/dart/folds.scm b/runtime/queries/dart/folds.scm
index fc75ac219..fc75ac219 100644
--- a/queries/dart/folds.scm
+++ b/runtime/queries/dart/folds.scm
diff --git a/queries/dart/highlights.scm b/runtime/queries/dart/highlights.scm
index 072a10d26..072a10d26 100644
--- a/queries/dart/highlights.scm
+++ b/runtime/queries/dart/highlights.scm
diff --git a/queries/dart/indents.scm b/runtime/queries/dart/indents.scm
index 03d9464bc..03d9464bc 100644
--- a/queries/dart/indents.scm
+++ b/runtime/queries/dart/indents.scm
diff --git a/queries/corn/injections.scm b/runtime/queries/dart/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/corn/injections.scm
+++ b/runtime/queries/dart/injections.scm
diff --git a/queries/dart/locals.scm b/runtime/queries/dart/locals.scm
index 3e3beb58e..3e3beb58e 100644
--- a/queries/dart/locals.scm
+++ b/runtime/queries/dart/locals.scm
diff --git a/queries/desktop/folds.scm b/runtime/queries/desktop/folds.scm
index 624ca8a86..624ca8a86 100644
--- a/queries/desktop/folds.scm
+++ b/runtime/queries/desktop/folds.scm
diff --git a/queries/desktop/highlights.scm b/runtime/queries/desktop/highlights.scm
index 7a5ebf241..7a5ebf241 100644
--- a/queries/desktop/highlights.scm
+++ b/runtime/queries/desktop/highlights.scm
diff --git a/queries/desktop/injections.scm b/runtime/queries/desktop/injections.scm
index 1666a0430..1666a0430 100644
--- a/queries/desktop/injections.scm
+++ b/runtime/queries/desktop/injections.scm
diff --git a/queries/devicetree/folds.scm b/runtime/queries/devicetree/folds.scm
index 206c4bed8..206c4bed8 100644
--- a/queries/devicetree/folds.scm
+++ b/runtime/queries/devicetree/folds.scm
diff --git a/queries/devicetree/highlights.scm b/runtime/queries/devicetree/highlights.scm
index 74ec89af1..74ec89af1 100644
--- a/queries/devicetree/highlights.scm
+++ b/runtime/queries/devicetree/highlights.scm
diff --git a/queries/devicetree/indents.scm b/runtime/queries/devicetree/indents.scm
index 9740060ca..9740060ca 100644
--- a/queries/devicetree/indents.scm
+++ b/runtime/queries/devicetree/indents.scm
diff --git a/queries/cpon/injections.scm b/runtime/queries/devicetree/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/cpon/injections.scm
+++ b/runtime/queries/devicetree/injections.scm
diff --git a/queries/devicetree/locals.scm b/runtime/queries/devicetree/locals.scm
index e33a81dfd..e33a81dfd 100644
--- a/queries/devicetree/locals.scm
+++ b/runtime/queries/devicetree/locals.scm
diff --git a/queries/dhall/folds.scm b/runtime/queries/dhall/folds.scm
index bc92797b4..bc92797b4 100644
--- a/queries/dhall/folds.scm
+++ b/runtime/queries/dhall/folds.scm
diff --git a/queries/dhall/highlights.scm b/runtime/queries/dhall/highlights.scm
index d7a5d0006..d7a5d0006 100644
--- a/queries/dhall/highlights.scm
+++ b/runtime/queries/dhall/highlights.scm
diff --git a/queries/dhall/injections.scm b/runtime/queries/dhall/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/dhall/injections.scm
+++ b/runtime/queries/dhall/injections.scm
diff --git a/queries/diff/folds.scm b/runtime/queries/diff/folds.scm
index 3560abb3e..3560abb3e 100644
--- a/queries/diff/folds.scm
+++ b/runtime/queries/diff/folds.scm
diff --git a/queries/diff/highlights.scm b/runtime/queries/diff/highlights.scm
index 54c57a807..54c57a807 100644
--- a/queries/diff/highlights.scm
+++ b/runtime/queries/diff/highlights.scm
diff --git a/queries/css/injections.scm b/runtime/queries/diff/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/css/injections.scm
+++ b/runtime/queries/diff/injections.scm
diff --git a/queries/disassembly/highlights.scm b/runtime/queries/disassembly/highlights.scm
index b1ece9ab6..b1ece9ab6 100644
--- a/queries/disassembly/highlights.scm
+++ b/runtime/queries/disassembly/highlights.scm
diff --git a/queries/disassembly/injections.scm b/runtime/queries/disassembly/injections.scm
index 9fb52dafe..9fb52dafe 100644
--- a/queries/disassembly/injections.scm
+++ b/runtime/queries/disassembly/injections.scm
diff --git a/queries/djot/folds.scm b/runtime/queries/djot/folds.scm
index 94f3724eb..94f3724eb 100644
--- a/queries/djot/folds.scm
+++ b/runtime/queries/djot/folds.scm
diff --git a/queries/djot/highlights.scm b/runtime/queries/djot/highlights.scm
index 73dd66057..73dd66057 100644
--- a/queries/djot/highlights.scm
+++ b/runtime/queries/djot/highlights.scm
diff --git a/queries/djot/indents.scm b/runtime/queries/djot/indents.scm
index 3b1a56ebd..3b1a56ebd 100644
--- a/queries/djot/indents.scm
+++ b/runtime/queries/djot/indents.scm
diff --git a/queries/djot/injections.scm b/runtime/queries/djot/injections.scm
index 0e4141046..0e4141046 100644
--- a/queries/djot/injections.scm
+++ b/runtime/queries/djot/injections.scm
diff --git a/queries/djot/locals.scm b/runtime/queries/djot/locals.scm
index 1ac27529f..1ac27529f 100644
--- a/queries/djot/locals.scm
+++ b/runtime/queries/djot/locals.scm
diff --git a/queries/dockerfile/highlights.scm b/runtime/queries/dockerfile/highlights.scm
index 72893f8b0..72893f8b0 100644
--- a/queries/dockerfile/highlights.scm
+++ b/runtime/queries/dockerfile/highlights.scm
diff --git a/queries/dockerfile/injections.scm b/runtime/queries/dockerfile/injections.scm
index 5d3bbffb7..5d3bbffb7 100644
--- a/queries/dockerfile/injections.scm
+++ b/runtime/queries/dockerfile/injections.scm
diff --git a/queries/dot/highlights.scm b/runtime/queries/dot/highlights.scm
index 75ad92271..75ad92271 100644
--- a/queries/dot/highlights.scm
+++ b/runtime/queries/dot/highlights.scm
diff --git a/queries/dot/indents.scm b/runtime/queries/dot/indents.scm
index a951e5511..a951e5511 100644
--- a/queries/dot/indents.scm
+++ b/runtime/queries/dot/indents.scm
diff --git a/queries/dot/injections.scm b/runtime/queries/dot/injections.scm
index 4fe39a8ba..4fe39a8ba 100644
--- a/queries/dot/injections.scm
+++ b/runtime/queries/dot/injections.scm
diff --git a/queries/doxygen/highlights.scm b/runtime/queries/doxygen/highlights.scm
index 454500d64..454500d64 100644
--- a/queries/doxygen/highlights.scm
+++ b/runtime/queries/doxygen/highlights.scm
diff --git a/queries/doxygen/indents.scm b/runtime/queries/doxygen/indents.scm
index ef30f1e76..ef30f1e76 100644
--- a/queries/doxygen/indents.scm
+++ b/runtime/queries/doxygen/indents.scm
diff --git a/queries/doxygen/injections.scm b/runtime/queries/doxygen/injections.scm
index 994f535ad..994f535ad 100644
--- a/queries/doxygen/injections.scm
+++ b/runtime/queries/doxygen/injections.scm
diff --git a/queries/dtd/folds.scm b/runtime/queries/dtd/folds.scm
index b1bce4ffb..b1bce4ffb 100644
--- a/queries/dtd/folds.scm
+++ b/runtime/queries/dtd/folds.scm
diff --git a/queries/dtd/highlights.scm b/runtime/queries/dtd/highlights.scm
index 9afd6e38b..9afd6e38b 100644
--- a/queries/dtd/highlights.scm
+++ b/runtime/queries/dtd/highlights.scm
diff --git a/queries/dtd/injections.scm b/runtime/queries/dtd/injections.scm
index 57fae5832..57fae5832 100644
--- a/queries/dtd/injections.scm
+++ b/runtime/queries/dtd/injections.scm
diff --git a/queries/dtd/locals.scm b/runtime/queries/dtd/locals.scm
index 88246c04a..88246c04a 100644
--- a/queries/dtd/locals.scm
+++ b/runtime/queries/dtd/locals.scm
diff --git a/queries/earthfile/highlights.scm b/runtime/queries/earthfile/highlights.scm
index cc7dce298..cc7dce298 100644
--- a/queries/earthfile/highlights.scm
+++ b/runtime/queries/earthfile/highlights.scm
diff --git a/queries/earthfile/injections.scm b/runtime/queries/earthfile/injections.scm
index 7435a400e..7435a400e 100644
--- a/queries/earthfile/injections.scm
+++ b/runtime/queries/earthfile/injections.scm
diff --git a/queries/ebnf/highlights.scm b/runtime/queries/ebnf/highlights.scm
index 4254d04dd..4254d04dd 100644
--- a/queries/ebnf/highlights.scm
+++ b/runtime/queries/ebnf/highlights.scm
diff --git a/queries/cue/injections.scm b/runtime/queries/ebnf/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/cue/injections.scm
+++ b/runtime/queries/ebnf/injections.scm
diff --git a/queries/ecma/folds.scm b/runtime/queries/ecma/folds.scm
index a348f3444..a348f3444 100644
--- a/queries/ecma/folds.scm
+++ b/runtime/queries/ecma/folds.scm
diff --git a/queries/ecma/highlights.scm b/runtime/queries/ecma/highlights.scm
index cec2f4e3e..cec2f4e3e 100644
--- a/queries/ecma/highlights.scm
+++ b/runtime/queries/ecma/highlights.scm
diff --git a/queries/ecma/indents.scm b/runtime/queries/ecma/indents.scm
index d56741670..d56741670 100644
--- a/queries/ecma/indents.scm
+++ b/runtime/queries/ecma/indents.scm
diff --git a/queries/ecma/injections.scm b/runtime/queries/ecma/injections.scm
index 04abafcde..04abafcde 100644
--- a/queries/ecma/injections.scm
+++ b/runtime/queries/ecma/injections.scm
diff --git a/queries/ecma/locals.scm b/runtime/queries/ecma/locals.scm
index 24ea7c0a8..24ea7c0a8 100644
--- a/queries/ecma/locals.scm
+++ b/runtime/queries/ecma/locals.scm
diff --git a/queries/editorconfig/folds.scm b/runtime/queries/editorconfig/folds.scm
index 911798f5a..911798f5a 100644
--- a/queries/editorconfig/folds.scm
+++ b/runtime/queries/editorconfig/folds.scm
diff --git a/queries/editorconfig/highlights.scm b/runtime/queries/editorconfig/highlights.scm
index feb0a524c..feb0a524c 100644
--- a/queries/editorconfig/highlights.scm
+++ b/runtime/queries/editorconfig/highlights.scm
diff --git a/queries/dart/injections.scm b/runtime/queries/editorconfig/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/dart/injections.scm
+++ b/runtime/queries/editorconfig/injections.scm
diff --git a/queries/eds/folds.scm b/runtime/queries/eds/folds.scm
index 911798f5a..911798f5a 100644
--- a/queries/eds/folds.scm
+++ b/runtime/queries/eds/folds.scm
diff --git a/queries/eds/highlights.scm b/runtime/queries/eds/highlights.scm
index 0e008c979..0e008c979 100644
--- a/queries/eds/highlights.scm
+++ b/runtime/queries/eds/highlights.scm
diff --git a/queries/eex/highlights.scm b/runtime/queries/eex/highlights.scm
index d032a7486..d032a7486 100644
--- a/queries/eex/highlights.scm
+++ b/runtime/queries/eex/highlights.scm
diff --git a/queries/eex/injections.scm b/runtime/queries/eex/injections.scm
index f13d3c14e..f13d3c14e 100644
--- a/queries/eex/injections.scm
+++ b/runtime/queries/eex/injections.scm
diff --git a/queries/elixir/folds.scm b/runtime/queries/elixir/folds.scm
index 7abfe6797..7abfe6797 100644
--- a/queries/elixir/folds.scm
+++ b/runtime/queries/elixir/folds.scm
diff --git a/queries/elixir/highlights.scm b/runtime/queries/elixir/highlights.scm
index cbdb40de5..cbdb40de5 100644
--- a/queries/elixir/highlights.scm
+++ b/runtime/queries/elixir/highlights.scm
diff --git a/queries/elixir/indents.scm b/runtime/queries/elixir/indents.scm
index 5470b6422..5470b6422 100644
--- a/queries/elixir/indents.scm
+++ b/runtime/queries/elixir/indents.scm
diff --git a/queries/elixir/injections.scm b/runtime/queries/elixir/injections.scm
index f70fd984c..f70fd984c 100644
--- a/queries/elixir/injections.scm
+++ b/runtime/queries/elixir/injections.scm
diff --git a/queries/elixir/locals.scm b/runtime/queries/elixir/locals.scm
index ac9d86e36..ac9d86e36 100644
--- a/queries/elixir/locals.scm
+++ b/runtime/queries/elixir/locals.scm
diff --git a/queries/elm/folds.scm b/runtime/queries/elm/folds.scm
index 56987d9f9..56987d9f9 100644
--- a/queries/elm/folds.scm
+++ b/runtime/queries/elm/folds.scm
diff --git a/queries/elm/highlights.scm b/runtime/queries/elm/highlights.scm
index cfa09caf1..cfa09caf1 100644
--- a/queries/elm/highlights.scm
+++ b/runtime/queries/elm/highlights.scm
diff --git a/queries/elm/injections.scm b/runtime/queries/elm/injections.scm
index 7ee6c7f03..7ee6c7f03 100644
--- a/queries/elm/injections.scm
+++ b/runtime/queries/elm/injections.scm
diff --git a/queries/elsa/folds.scm b/runtime/queries/elsa/folds.scm
index afdfec308..afdfec308 100644
--- a/queries/elsa/folds.scm
+++ b/runtime/queries/elsa/folds.scm
diff --git a/queries/elsa/highlights.scm b/runtime/queries/elsa/highlights.scm
index 1a974bda6..1a974bda6 100644
--- a/queries/elsa/highlights.scm
+++ b/runtime/queries/elsa/highlights.scm
diff --git a/queries/elsa/indents.scm b/runtime/queries/elsa/indents.scm
index 6ddd1aa64..6ddd1aa64 100644
--- a/queries/elsa/indents.scm
+++ b/runtime/queries/elsa/indents.scm
diff --git a/queries/devicetree/injections.scm b/runtime/queries/elsa/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/devicetree/injections.scm
+++ b/runtime/queries/elsa/injections.scm
diff --git a/queries/elsa/locals.scm b/runtime/queries/elsa/locals.scm
index 3e8197ae7..3e8197ae7 100644
--- a/queries/elsa/locals.scm
+++ b/runtime/queries/elsa/locals.scm
diff --git a/queries/elvish/highlights.scm b/runtime/queries/elvish/highlights.scm
index 9836a6c78..9836a6c78 100644
--- a/queries/elvish/highlights.scm
+++ b/runtime/queries/elvish/highlights.scm
diff --git a/queries/diff/injections.scm b/runtime/queries/elvish/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/diff/injections.scm
+++ b/runtime/queries/elvish/injections.scm
diff --git a/queries/embedded_template/highlights.scm b/runtime/queries/embedded_template/highlights.scm
index 410983d65..410983d65 100644
--- a/queries/embedded_template/highlights.scm
+++ b/runtime/queries/embedded_template/highlights.scm
diff --git a/queries/embedded_template/injections.scm b/runtime/queries/embedded_template/injections.scm
index cdeb2cd4f..cdeb2cd4f 100644
--- a/queries/embedded_template/injections.scm
+++ b/runtime/queries/embedded_template/injections.scm
diff --git a/queries/enforce/folds.scm b/runtime/queries/enforce/folds.scm
index dd2b8622a..dd2b8622a 100644
--- a/queries/enforce/folds.scm
+++ b/runtime/queries/enforce/folds.scm
diff --git a/queries/enforce/highlights.scm b/runtime/queries/enforce/highlights.scm
index aa8fb9b3e..aa8fb9b3e 100644
--- a/queries/enforce/highlights.scm
+++ b/runtime/queries/enforce/highlights.scm
diff --git a/queries/enforce/indents.scm b/runtime/queries/enforce/indents.scm
index b1dc79b2e..b1dc79b2e 100644
--- a/queries/enforce/indents.scm
+++ b/runtime/queries/enforce/indents.scm
diff --git a/queries/enforce/injections.scm b/runtime/queries/enforce/injections.scm
index 9231a4429..9231a4429 100644
--- a/queries/enforce/injections.scm
+++ b/runtime/queries/enforce/injections.scm
diff --git a/queries/enforce/locals.scm b/runtime/queries/enforce/locals.scm
index 9f62f9d96..9f62f9d96 100644
--- a/queries/enforce/locals.scm
+++ b/runtime/queries/enforce/locals.scm
diff --git a/queries/erlang/folds.scm b/runtime/queries/erlang/folds.scm
index 65c2d8ed1..65c2d8ed1 100644
--- a/queries/erlang/folds.scm
+++ b/runtime/queries/erlang/folds.scm
diff --git a/queries/erlang/highlights.scm b/runtime/queries/erlang/highlights.scm
index 8bba348d9..8bba348d9 100644
--- a/queries/erlang/highlights.scm
+++ b/runtime/queries/erlang/highlights.scm
diff --git a/queries/ebnf/injections.scm b/runtime/queries/erlang/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/ebnf/injections.scm
+++ b/runtime/queries/erlang/injections.scm
diff --git a/queries/facility/folds.scm b/runtime/queries/facility/folds.scm
index 7d8bafc80..7d8bafc80 100644
--- a/queries/facility/folds.scm
+++ b/runtime/queries/facility/folds.scm
diff --git a/queries/facility/highlights.scm b/runtime/queries/facility/highlights.scm
index 592bf5311..592bf5311 100644
--- a/queries/facility/highlights.scm
+++ b/runtime/queries/facility/highlights.scm
diff --git a/queries/facility/indents.scm b/runtime/queries/facility/indents.scm
index 247949ba1..247949ba1 100644
--- a/queries/facility/indents.scm
+++ b/runtime/queries/facility/indents.scm
diff --git a/queries/facility/injections.scm b/runtime/queries/facility/injections.scm
index 5d9b7836f..5d9b7836f 100644
--- a/queries/facility/injections.scm
+++ b/runtime/queries/facility/injections.scm
diff --git a/queries/faust/highlights.scm b/runtime/queries/faust/highlights.scm
index 6e7ef1d92..6e7ef1d92 100644
--- a/queries/faust/highlights.scm
+++ b/runtime/queries/faust/highlights.scm
diff --git a/queries/editorconfig/injections.scm b/runtime/queries/faust/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/editorconfig/injections.scm
+++ b/runtime/queries/faust/injections.scm
diff --git a/queries/fennel/folds.scm b/runtime/queries/fennel/folds.scm
index 0862e5926..0862e5926 100644
--- a/queries/fennel/folds.scm
+++ b/runtime/queries/fennel/folds.scm
diff --git a/queries/fennel/highlights.scm b/runtime/queries/fennel/highlights.scm
index 2f0b5f738..2f0b5f738 100644
--- a/queries/fennel/highlights.scm
+++ b/runtime/queries/fennel/highlights.scm
diff --git a/queries/fennel/injections.scm b/runtime/queries/fennel/injections.scm
index f6724d328..f6724d328 100644
--- a/queries/fennel/injections.scm
+++ b/runtime/queries/fennel/injections.scm
diff --git a/queries/fennel/locals.scm b/runtime/queries/fennel/locals.scm
index be63e728f..be63e728f 100644
--- a/queries/fennel/locals.scm
+++ b/runtime/queries/fennel/locals.scm
diff --git a/queries/fidl/folds.scm b/runtime/queries/fidl/folds.scm
index f524c455b..f524c455b 100644
--- a/queries/fidl/folds.scm
+++ b/runtime/queries/fidl/folds.scm
diff --git a/queries/fidl/highlights.scm b/runtime/queries/fidl/highlights.scm
index f1960c612..f1960c612 100644
--- a/queries/fidl/highlights.scm
+++ b/runtime/queries/fidl/highlights.scm
diff --git a/queries/elsa/injections.scm b/runtime/queries/fidl/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/elsa/injections.scm
+++ b/runtime/queries/fidl/injections.scm
diff --git a/queries/firrtl/folds.scm b/runtime/queries/firrtl/folds.scm
index 4c64e644f..4c64e644f 100644
--- a/queries/firrtl/folds.scm
+++ b/runtime/queries/firrtl/folds.scm
diff --git a/queries/firrtl/highlights.scm b/runtime/queries/firrtl/highlights.scm
index 0a90fa55b..0a90fa55b 100644
--- a/queries/firrtl/highlights.scm
+++ b/runtime/queries/firrtl/highlights.scm
diff --git a/queries/firrtl/indents.scm b/runtime/queries/firrtl/indents.scm
index e172e1e81..e172e1e81 100644
--- a/queries/firrtl/indents.scm
+++ b/runtime/queries/firrtl/indents.scm
diff --git a/queries/elvish/injections.scm b/runtime/queries/firrtl/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/elvish/injections.scm
+++ b/runtime/queries/firrtl/injections.scm
diff --git a/queries/firrtl/locals.scm b/runtime/queries/firrtl/locals.scm
index 97b7931bf..97b7931bf 100644
--- a/queries/firrtl/locals.scm
+++ b/runtime/queries/firrtl/locals.scm
diff --git a/queries/fish/folds.scm b/runtime/queries/fish/folds.scm
index 06363e15e..06363e15e 100644
--- a/queries/fish/folds.scm
+++ b/runtime/queries/fish/folds.scm
diff --git a/queries/fish/highlights.scm b/runtime/queries/fish/highlights.scm
index a7c451175..a7c451175 100644
--- a/queries/fish/highlights.scm
+++ b/runtime/queries/fish/highlights.scm
diff --git a/queries/fish/indents.scm b/runtime/queries/fish/indents.scm
index 4984c4cb2..4984c4cb2 100644
--- a/queries/fish/indents.scm
+++ b/runtime/queries/fish/indents.scm
diff --git a/queries/erlang/injections.scm b/runtime/queries/fish/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/erlang/injections.scm
+++ b/runtime/queries/fish/injections.scm
diff --git a/queries/fish/locals.scm b/runtime/queries/fish/locals.scm
index 904d568f9..904d568f9 100644
--- a/queries/fish/locals.scm
+++ b/runtime/queries/fish/locals.scm
diff --git a/queries/foam/folds.scm b/runtime/queries/foam/folds.scm
index e05d0dbaa..e05d0dbaa 100644
--- a/queries/foam/folds.scm
+++ b/runtime/queries/foam/folds.scm
diff --git a/queries/foam/highlights.scm b/runtime/queries/foam/highlights.scm
index 9c96f196e..9c96f196e 100644
--- a/queries/foam/highlights.scm
+++ b/runtime/queries/foam/highlights.scm
diff --git a/queries/foam/indents.scm b/runtime/queries/foam/indents.scm
index be02b80ed..be02b80ed 100644
--- a/queries/foam/indents.scm
+++ b/runtime/queries/foam/indents.scm
diff --git a/queries/foam/injections.scm b/runtime/queries/foam/injections.scm
index b9f8f838f..b9f8f838f 100644
--- a/queries/foam/injections.scm
+++ b/runtime/queries/foam/injections.scm
diff --git a/queries/foam/locals.scm b/runtime/queries/foam/locals.scm
index f3f689081..f3f689081 100644
--- a/queries/foam/locals.scm
+++ b/runtime/queries/foam/locals.scm
diff --git a/queries/forth/folds.scm b/runtime/queries/forth/folds.scm
index 443abb30d..443abb30d 100644
--- a/queries/forth/folds.scm
+++ b/runtime/queries/forth/folds.scm
diff --git a/queries/forth/highlights.scm b/runtime/queries/forth/highlights.scm
index 1e7207597..1e7207597 100644
--- a/queries/forth/highlights.scm
+++ b/runtime/queries/forth/highlights.scm
diff --git a/queries/forth/indents.scm b/runtime/queries/forth/indents.scm
index 067755433..067755433 100644
--- a/queries/forth/indents.scm
+++ b/runtime/queries/forth/indents.scm
diff --git a/queries/faust/injections.scm b/runtime/queries/forth/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/faust/injections.scm
+++ b/runtime/queries/forth/injections.scm
diff --git a/queries/forth/locals.scm b/runtime/queries/forth/locals.scm
index d91d3aa98..d91d3aa98 100644
--- a/queries/forth/locals.scm
+++ b/runtime/queries/forth/locals.scm
diff --git a/queries/fortran/folds.scm b/runtime/queries/fortran/folds.scm
index cedbdb635..cedbdb635 100644
--- a/queries/fortran/folds.scm
+++ b/runtime/queries/fortran/folds.scm
diff --git a/queries/fortran/highlights.scm b/runtime/queries/fortran/highlights.scm
index 6a6dbba35..6a6dbba35 100644
--- a/queries/fortran/highlights.scm
+++ b/runtime/queries/fortran/highlights.scm
diff --git a/queries/fortran/indents.scm b/runtime/queries/fortran/indents.scm
index 86704c4f4..86704c4f4 100644
--- a/queries/fortran/indents.scm
+++ b/runtime/queries/fortran/indents.scm
diff --git a/queries/fidl/injections.scm b/runtime/queries/fortran/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/fidl/injections.scm
+++ b/runtime/queries/fortran/injections.scm
diff --git a/queries/fsh/highlights.scm b/runtime/queries/fsh/highlights.scm
index 2354a2037..2354a2037 100644
--- a/queries/fsh/highlights.scm
+++ b/runtime/queries/fsh/highlights.scm
diff --git a/queries/fsh/injections.scm b/runtime/queries/fsh/injections.scm
index 7bf6d006a..7bf6d006a 100644
--- a/queries/fsh/injections.scm
+++ b/runtime/queries/fsh/injections.scm
diff --git a/queries/fsharp/highlights.scm b/runtime/queries/fsharp/highlights.scm
index e400e3522..e400e3522 100644
--- a/queries/fsharp/highlights.scm
+++ b/runtime/queries/fsharp/highlights.scm
diff --git a/queries/fsharp/injections.scm b/runtime/queries/fsharp/injections.scm
index 211b263f3..211b263f3 100644
--- a/queries/fsharp/injections.scm
+++ b/runtime/queries/fsharp/injections.scm
diff --git a/queries/func/highlights.scm b/runtime/queries/func/highlights.scm
index 9fd6dd82d..9fd6dd82d 100644
--- a/queries/func/highlights.scm
+++ b/runtime/queries/func/highlights.scm
diff --git a/queries/firrtl/injections.scm b/runtime/queries/func/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/firrtl/injections.scm
+++ b/runtime/queries/func/injections.scm
diff --git a/queries/fusion/folds.scm b/runtime/queries/fusion/folds.scm
index 179fc160b..179fc160b 100644
--- a/queries/fusion/folds.scm
+++ b/runtime/queries/fusion/folds.scm
diff --git a/queries/fusion/highlights.scm b/runtime/queries/fusion/highlights.scm
index 7108e5705..7108e5705 100644
--- a/queries/fusion/highlights.scm
+++ b/runtime/queries/fusion/highlights.scm
diff --git a/queries/fusion/indents.scm b/runtime/queries/fusion/indents.scm
index 0ba6cf758..0ba6cf758 100644
--- a/queries/fusion/indents.scm
+++ b/runtime/queries/fusion/indents.scm
diff --git a/queries/fusion/injections.scm b/runtime/queries/fusion/injections.scm
index 085cdb458..085cdb458 100644
--- a/queries/fusion/injections.scm
+++ b/runtime/queries/fusion/injections.scm
diff --git a/queries/fusion/locals.scm b/runtime/queries/fusion/locals.scm
index d23e0ab46..d23e0ab46 100644
--- a/queries/fusion/locals.scm
+++ b/runtime/queries/fusion/locals.scm
diff --git a/queries/gap/folds.scm b/runtime/queries/gap/folds.scm
index 7cf0888b6..7cf0888b6 100644
--- a/queries/gap/folds.scm
+++ b/runtime/queries/gap/folds.scm
diff --git a/queries/gap/highlights.scm b/runtime/queries/gap/highlights.scm
index 6c0c856c5..6c0c856c5 100644
--- a/queries/gap/highlights.scm
+++ b/runtime/queries/gap/highlights.scm
diff --git a/queries/fish/injections.scm b/runtime/queries/gap/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/fish/injections.scm
+++ b/runtime/queries/gap/injections.scm
diff --git a/queries/gap/locals.scm b/runtime/queries/gap/locals.scm
index d695d1f2d..d695d1f2d 100644
--- a/queries/gap/locals.scm
+++ b/runtime/queries/gap/locals.scm
diff --git a/queries/gaptst/folds.scm b/runtime/queries/gaptst/folds.scm
index 0ec72d135..0ec72d135 100644
--- a/queries/gaptst/folds.scm
+++ b/runtime/queries/gaptst/folds.scm
diff --git a/queries/gaptst/highlights.scm b/runtime/queries/gaptst/highlights.scm
index 22ab2d0a0..22ab2d0a0 100644
--- a/queries/gaptst/highlights.scm
+++ b/runtime/queries/gaptst/highlights.scm
diff --git a/queries/gaptst/injections.scm b/runtime/queries/gaptst/injections.scm
index bdcba35dc..bdcba35dc 100644
--- a/queries/gaptst/injections.scm
+++ b/runtime/queries/gaptst/injections.scm
diff --git a/queries/gdscript/folds.scm b/runtime/queries/gdscript/folds.scm
index cda709077..cda709077 100644
--- a/queries/gdscript/folds.scm
+++ b/runtime/queries/gdscript/folds.scm
diff --git a/queries/gdscript/highlights.scm b/runtime/queries/gdscript/highlights.scm
index cea9093c0..cea9093c0 100644
--- a/queries/gdscript/highlights.scm
+++ b/runtime/queries/gdscript/highlights.scm
diff --git a/queries/gdscript/indents.scm b/runtime/queries/gdscript/indents.scm
index 36b989f93..36b989f93 100644
--- a/queries/gdscript/indents.scm
+++ b/runtime/queries/gdscript/indents.scm
diff --git a/queries/forth/injections.scm b/runtime/queries/gdscript/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/forth/injections.scm
+++ b/runtime/queries/gdscript/injections.scm
diff --git a/queries/gdscript/locals.scm b/runtime/queries/gdscript/locals.scm
index 62166e6f0..62166e6f0 100644
--- a/queries/gdscript/locals.scm
+++ b/runtime/queries/gdscript/locals.scm
diff --git a/queries/gdshader/highlights.scm b/runtime/queries/gdshader/highlights.scm
index c93fd4721..c93fd4721 100644
--- a/queries/gdshader/highlights.scm
+++ b/runtime/queries/gdshader/highlights.scm
diff --git a/queries/fortran/injections.scm b/runtime/queries/gdshader/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/fortran/injections.scm
+++ b/runtime/queries/gdshader/injections.scm
diff --git a/queries/git_config/folds.scm b/runtime/queries/git_config/folds.scm
index cb376d5b5..cb376d5b5 100644
--- a/queries/git_config/folds.scm
+++ b/runtime/queries/git_config/folds.scm
diff --git a/queries/git_config/highlights.scm b/runtime/queries/git_config/highlights.scm
index 6b37e9090..6b37e9090 100644
--- a/queries/git_config/highlights.scm
+++ b/runtime/queries/git_config/highlights.scm
diff --git a/queries/git_config/injections.scm b/runtime/queries/git_config/injections.scm
index 7bda6979c..7bda6979c 100644
--- a/queries/git_config/injections.scm
+++ b/runtime/queries/git_config/injections.scm
diff --git a/queries/git_rebase/highlights.scm b/runtime/queries/git_rebase/highlights.scm
index 248366e24..248366e24 100644
--- a/queries/git_rebase/highlights.scm
+++ b/runtime/queries/git_rebase/highlights.scm
diff --git a/queries/git_rebase/injections.scm b/runtime/queries/git_rebase/injections.scm
index c831594bd..c831594bd 100644
--- a/queries/git_rebase/injections.scm
+++ b/runtime/queries/git_rebase/injections.scm
diff --git a/queries/gitattributes/highlights.scm b/runtime/queries/gitattributes/highlights.scm
index aec7750f6..aec7750f6 100644
--- a/queries/gitattributes/highlights.scm
+++ b/runtime/queries/gitattributes/highlights.scm
diff --git a/queries/func/injections.scm b/runtime/queries/gitattributes/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/func/injections.scm
+++ b/runtime/queries/gitattributes/injections.scm
diff --git a/queries/gitattributes/locals.scm b/runtime/queries/gitattributes/locals.scm
index 2471b8bc6..2471b8bc6 100644
--- a/queries/gitattributes/locals.scm
+++ b/runtime/queries/gitattributes/locals.scm
diff --git a/queries/gitcommit/highlights.scm b/runtime/queries/gitcommit/highlights.scm
index b096056cc..b096056cc 100644
--- a/queries/gitcommit/highlights.scm
+++ b/runtime/queries/gitcommit/highlights.scm
diff --git a/queries/gitcommit/injections.scm b/runtime/queries/gitcommit/injections.scm
index 5613d7e8e..5613d7e8e 100644
--- a/queries/gitcommit/injections.scm
+++ b/runtime/queries/gitcommit/injections.scm
diff --git a/queries/gitignore/highlights.scm b/runtime/queries/gitignore/highlights.scm
index aafbe541e..aafbe541e 100644
--- a/queries/gitignore/highlights.scm
+++ b/runtime/queries/gitignore/highlights.scm
diff --git a/queries/gap/injections.scm b/runtime/queries/gitignore/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gap/injections.scm
+++ b/runtime/queries/gitignore/injections.scm
diff --git a/queries/gleam/folds.scm b/runtime/queries/gleam/folds.scm
index b4cd225e7..b4cd225e7 100644
--- a/queries/gleam/folds.scm
+++ b/runtime/queries/gleam/folds.scm
diff --git a/queries/gleam/highlights.scm b/runtime/queries/gleam/highlights.scm
index f80bda240..f80bda240 100644
--- a/queries/gleam/highlights.scm
+++ b/runtime/queries/gleam/highlights.scm
diff --git a/queries/gleam/indents.scm b/runtime/queries/gleam/indents.scm
index 3a44ea4c0..3a44ea4c0 100644
--- a/queries/gleam/indents.scm
+++ b/runtime/queries/gleam/indents.scm
diff --git a/queries/gleam/injections.scm b/runtime/queries/gleam/injections.scm
index 11d4f5d55..11d4f5d55 100644
--- a/queries/gleam/injections.scm
+++ b/runtime/queries/gleam/injections.scm
diff --git a/queries/gleam/locals.scm b/runtime/queries/gleam/locals.scm
index 0058b660e..0058b660e 100644
--- a/queries/gleam/locals.scm
+++ b/runtime/queries/gleam/locals.scm
diff --git a/queries/glimmer/folds.scm b/runtime/queries/glimmer/folds.scm
index 6502455d8..6502455d8 100644
--- a/queries/glimmer/folds.scm
+++ b/runtime/queries/glimmer/folds.scm
diff --git a/queries/glimmer/highlights.scm b/runtime/queries/glimmer/highlights.scm
index 9f11468d4..9f11468d4 100644
--- a/queries/glimmer/highlights.scm
+++ b/runtime/queries/glimmer/highlights.scm
diff --git a/queries/glimmer/indents.scm b/runtime/queries/glimmer/indents.scm
index c1ef130c0..c1ef130c0 100644
--- a/queries/glimmer/indents.scm
+++ b/runtime/queries/glimmer/indents.scm
diff --git a/queries/glimmer/injections.scm b/runtime/queries/glimmer/injections.scm
index 30b438682..30b438682 100644
--- a/queries/glimmer/injections.scm
+++ b/runtime/queries/glimmer/injections.scm
diff --git a/queries/glimmer/locals.scm b/runtime/queries/glimmer/locals.scm
index 8fde3a297..8fde3a297 100644
--- a/queries/glimmer/locals.scm
+++ b/runtime/queries/glimmer/locals.scm
diff --git a/queries/glimmer_javascript/highlights.scm b/runtime/queries/glimmer_javascript/highlights.scm
index 5bec5b149..5bec5b149 100644
--- a/queries/glimmer_javascript/highlights.scm
+++ b/runtime/queries/glimmer_javascript/highlights.scm
diff --git a/queries/glimmer_javascript/indents.scm b/runtime/queries/glimmer_javascript/indents.scm
index 2bf2b7801..2bf2b7801 100644
--- a/queries/glimmer_javascript/indents.scm
+++ b/runtime/queries/glimmer_javascript/indents.scm
diff --git a/queries/glimmer_javascript/injections.scm b/runtime/queries/glimmer_javascript/injections.scm
index 174372a48..174372a48 100644
--- a/queries/glimmer_javascript/injections.scm
+++ b/runtime/queries/glimmer_javascript/injections.scm
diff --git a/queries/glimmer_javascript/locals.scm b/runtime/queries/glimmer_javascript/locals.scm
index 04328f099..04328f099 100644
--- a/queries/glimmer_javascript/locals.scm
+++ b/runtime/queries/glimmer_javascript/locals.scm
diff --git a/queries/glimmer_typescript/highlights.scm b/runtime/queries/glimmer_typescript/highlights.scm
index 042387b21..042387b21 100644
--- a/queries/glimmer_typescript/highlights.scm
+++ b/runtime/queries/glimmer_typescript/highlights.scm
diff --git a/queries/glimmer_typescript/indents.scm b/runtime/queries/glimmer_typescript/indents.scm
index 237254d4c..237254d4c 100644
--- a/queries/glimmer_typescript/indents.scm
+++ b/runtime/queries/glimmer_typescript/indents.scm
diff --git a/queries/glimmer_typescript/injections.scm b/runtime/queries/glimmer_typescript/injections.scm
index 4c79d635a..4c79d635a 100644
--- a/queries/glimmer_typescript/injections.scm
+++ b/runtime/queries/glimmer_typescript/injections.scm
diff --git a/queries/glsl/folds.scm b/runtime/queries/glsl/folds.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/glsl/folds.scm
+++ b/runtime/queries/glsl/folds.scm
diff --git a/queries/glsl/highlights.scm b/runtime/queries/glsl/highlights.scm
index d4583f0ea..d4583f0ea 100644
--- a/queries/glsl/highlights.scm
+++ b/runtime/queries/glsl/highlights.scm
diff --git a/queries/glsl/indents.scm b/runtime/queries/glsl/indents.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/glsl/indents.scm
+++ b/runtime/queries/glsl/indents.scm
diff --git a/queries/glsl/injections.scm b/runtime/queries/glsl/injections.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/glsl/injections.scm
+++ b/runtime/queries/glsl/injections.scm
diff --git a/queries/glsl/locals.scm b/runtime/queries/glsl/locals.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/glsl/locals.scm
+++ b/runtime/queries/glsl/locals.scm
diff --git a/queries/gn/folds.scm b/runtime/queries/gn/folds.scm
index 352b0f0ec..352b0f0ec 100644
--- a/queries/gn/folds.scm
+++ b/runtime/queries/gn/folds.scm
diff --git a/queries/gn/highlights.scm b/runtime/queries/gn/highlights.scm
index 7bd97ff38..7bd97ff38 100644
--- a/queries/gn/highlights.scm
+++ b/runtime/queries/gn/highlights.scm
diff --git a/queries/gn/indents.scm b/runtime/queries/gn/indents.scm
index 82f44711d..82f44711d 100644
--- a/queries/gn/indents.scm
+++ b/runtime/queries/gn/indents.scm
diff --git a/queries/gdscript/injections.scm b/runtime/queries/gn/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gdscript/injections.scm
+++ b/runtime/queries/gn/injections.scm
diff --git a/queries/gn/locals.scm b/runtime/queries/gn/locals.scm
index eecb3426a..eecb3426a 100644
--- a/queries/gn/locals.scm
+++ b/runtime/queries/gn/locals.scm
diff --git a/queries/gnuplot/highlights.scm b/runtime/queries/gnuplot/highlights.scm
index 884c7263d..884c7263d 100644
--- a/queries/gnuplot/highlights.scm
+++ b/runtime/queries/gnuplot/highlights.scm
diff --git a/queries/gdshader/injections.scm b/runtime/queries/gnuplot/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gdshader/injections.scm
+++ b/runtime/queries/gnuplot/injections.scm
diff --git a/queries/go/folds.scm b/runtime/queries/go/folds.scm
index 44b452de5..44b452de5 100644
--- a/queries/go/folds.scm
+++ b/runtime/queries/go/folds.scm
diff --git a/queries/go/highlights.scm b/runtime/queries/go/highlights.scm
index 7675cb790..7675cb790 100644
--- a/queries/go/highlights.scm
+++ b/runtime/queries/go/highlights.scm
diff --git a/queries/go/indents.scm b/runtime/queries/go/indents.scm
index 28edfe973..28edfe973 100644
--- a/queries/go/indents.scm
+++ b/runtime/queries/go/indents.scm
diff --git a/queries/go/injections.scm b/runtime/queries/go/injections.scm
index 4e914a3ec..4e914a3ec 100644
--- a/queries/go/injections.scm
+++ b/runtime/queries/go/injections.scm
diff --git a/queries/go/locals.scm b/runtime/queries/go/locals.scm
index 608c45826..608c45826 100644
--- a/queries/go/locals.scm
+++ b/runtime/queries/go/locals.scm
diff --git a/queries/goctl/folds.scm b/runtime/queries/goctl/folds.scm
index 704928675..704928675 100644
--- a/queries/goctl/folds.scm
+++ b/runtime/queries/goctl/folds.scm
diff --git a/queries/goctl/highlights.scm b/runtime/queries/goctl/highlights.scm
index a4b809a1c..a4b809a1c 100644
--- a/queries/goctl/highlights.scm
+++ b/runtime/queries/goctl/highlights.scm
diff --git a/queries/goctl/indents.scm b/runtime/queries/goctl/indents.scm
index ffa126905..ffa126905 100644
--- a/queries/goctl/indents.scm
+++ b/runtime/queries/goctl/indents.scm
diff --git a/queries/goctl/injections.scm b/runtime/queries/goctl/injections.scm
index a53abee57..a53abee57 100644
--- a/queries/goctl/injections.scm
+++ b/runtime/queries/goctl/injections.scm
diff --git a/queries/godot_resource/folds.scm b/runtime/queries/godot_resource/folds.scm
index 911798f5a..911798f5a 100644
--- a/queries/godot_resource/folds.scm
+++ b/runtime/queries/godot_resource/folds.scm
diff --git a/queries/godot_resource/highlights.scm b/runtime/queries/godot_resource/highlights.scm
index 15cbadd10..15cbadd10 100644
--- a/queries/godot_resource/highlights.scm
+++ b/runtime/queries/godot_resource/highlights.scm
diff --git a/queries/gitattributes/injections.scm b/runtime/queries/godot_resource/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gitattributes/injections.scm
+++ b/runtime/queries/godot_resource/injections.scm
diff --git a/queries/godot_resource/locals.scm b/runtime/queries/godot_resource/locals.scm
index b946a5eec..b946a5eec 100644
--- a/queries/godot_resource/locals.scm
+++ b/runtime/queries/godot_resource/locals.scm
diff --git a/queries/gomod/highlights.scm b/runtime/queries/gomod/highlights.scm
index b30be0944..b30be0944 100644
--- a/queries/gomod/highlights.scm
+++ b/runtime/queries/gomod/highlights.scm
diff --git a/queries/gitignore/injections.scm b/runtime/queries/gomod/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gitignore/injections.scm
+++ b/runtime/queries/gomod/injections.scm
diff --git a/queries/gosum/highlights.scm b/runtime/queries/gosum/highlights.scm
index f20c5f176..f20c5f176 100644
--- a/queries/gosum/highlights.scm
+++ b/runtime/queries/gosum/highlights.scm
diff --git a/queries/gotmpl/folds.scm b/runtime/queries/gotmpl/folds.scm
index f3a22e90c..f3a22e90c 100644
--- a/queries/gotmpl/folds.scm
+++ b/runtime/queries/gotmpl/folds.scm
diff --git a/queries/gotmpl/highlights.scm b/runtime/queries/gotmpl/highlights.scm
index 4ee768c28..4ee768c28 100644
--- a/queries/gotmpl/highlights.scm
+++ b/runtime/queries/gotmpl/highlights.scm
diff --git a/queries/gotmpl/injections.scm b/runtime/queries/gotmpl/injections.scm
index 3cfc26361..3cfc26361 100644
--- a/queries/gotmpl/injections.scm
+++ b/runtime/queries/gotmpl/injections.scm
diff --git a/queries/gotmpl/locals.scm b/runtime/queries/gotmpl/locals.scm
index 528e9fabb..528e9fabb 100644
--- a/queries/gotmpl/locals.scm
+++ b/runtime/queries/gotmpl/locals.scm
diff --git a/queries/gowork/highlights.scm b/runtime/queries/gowork/highlights.scm
index bca9a5f80..bca9a5f80 100644
--- a/queries/gowork/highlights.scm
+++ b/runtime/queries/gowork/highlights.scm
diff --git a/queries/gn/injections.scm b/runtime/queries/gowork/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gn/injections.scm
+++ b/runtime/queries/gowork/injections.scm
diff --git a/queries/gpg/highlights.scm b/runtime/queries/gpg/highlights.scm
index f02834429..f02834429 100644
--- a/queries/gpg/highlights.scm
+++ b/runtime/queries/gpg/highlights.scm
diff --git a/queries/gnuplot/injections.scm b/runtime/queries/gpg/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gnuplot/injections.scm
+++ b/runtime/queries/gpg/injections.scm
diff --git a/queries/graphql/highlights.scm b/runtime/queries/graphql/highlights.scm
index c1ee501c4..c1ee501c4 100644
--- a/queries/graphql/highlights.scm
+++ b/runtime/queries/graphql/highlights.scm
diff --git a/queries/graphql/indents.scm b/runtime/queries/graphql/indents.scm
index fcffeb822..fcffeb822 100644
--- a/queries/graphql/indents.scm
+++ b/runtime/queries/graphql/indents.scm
diff --git a/queries/godot_resource/injections.scm b/runtime/queries/graphql/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/godot_resource/injections.scm
+++ b/runtime/queries/graphql/injections.scm
diff --git a/queries/gren/highlights.scm b/runtime/queries/gren/highlights.scm
index 030cf7fad..030cf7fad 100644
--- a/queries/gren/highlights.scm
+++ b/runtime/queries/gren/highlights.scm
diff --git a/queries/gren/injections.scm b/runtime/queries/gren/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/gren/injections.scm
+++ b/runtime/queries/gren/injections.scm
diff --git a/queries/groovy/folds.scm b/runtime/queries/groovy/folds.scm
index 354861a61..354861a61 100644
--- a/queries/groovy/folds.scm
+++ b/runtime/queries/groovy/folds.scm
diff --git a/queries/groovy/highlights.scm b/runtime/queries/groovy/highlights.scm
index 4504e16e2..4504e16e2 100644
--- a/queries/groovy/highlights.scm
+++ b/runtime/queries/groovy/highlights.scm
diff --git a/queries/groovy/indents.scm b/runtime/queries/groovy/indents.scm
index ba3a2e844..ba3a2e844 100644
--- a/queries/groovy/indents.scm
+++ b/runtime/queries/groovy/indents.scm
diff --git a/queries/groovy/injections.scm b/runtime/queries/groovy/injections.scm
index 1c04c65fb..1c04c65fb 100644
--- a/queries/groovy/injections.scm
+++ b/runtime/queries/groovy/injections.scm
diff --git a/queries/groovy/locals.scm b/runtime/queries/groovy/locals.scm
index 23cb5f0cb..23cb5f0cb 100644
--- a/queries/groovy/locals.scm
+++ b/runtime/queries/groovy/locals.scm
diff --git a/queries/gstlaunch/highlights.scm b/runtime/queries/gstlaunch/highlights.scm
index 90729f876..90729f876 100644
--- a/queries/gstlaunch/highlights.scm
+++ b/runtime/queries/gstlaunch/highlights.scm
diff --git a/queries/hack/highlights.scm b/runtime/queries/hack/highlights.scm
index bb9d2a55c..bb9d2a55c 100644
--- a/queries/hack/highlights.scm
+++ b/runtime/queries/hack/highlights.scm
diff --git a/queries/hack/injections.scm b/runtime/queries/hack/injections.scm
index 655c29ec5..655c29ec5 100644
--- a/queries/hack/injections.scm
+++ b/runtime/queries/hack/injections.scm
diff --git a/queries/hare/folds.scm b/runtime/queries/hare/folds.scm
index 58b10bfdc..58b10bfdc 100644
--- a/queries/hare/folds.scm
+++ b/runtime/queries/hare/folds.scm
diff --git a/queries/hare/highlights.scm b/runtime/queries/hare/highlights.scm
index deaecd283..deaecd283 100644
--- a/queries/hare/highlights.scm
+++ b/runtime/queries/hare/highlights.scm
diff --git a/queries/hare/indents.scm b/runtime/queries/hare/indents.scm
index 9e41ea6d0..9e41ea6d0 100644
--- a/queries/hare/indents.scm
+++ b/runtime/queries/hare/indents.scm
diff --git a/queries/hare/injections.scm b/runtime/queries/hare/injections.scm
index 88a3f1cdd..88a3f1cdd 100644
--- a/queries/hare/injections.scm
+++ b/runtime/queries/hare/injections.scm
diff --git a/queries/hare/locals.scm b/runtime/queries/hare/locals.scm
index 12a214bf7..12a214bf7 100644
--- a/queries/hare/locals.scm
+++ b/runtime/queries/hare/locals.scm
diff --git a/queries/haskell/folds.scm b/runtime/queries/haskell/folds.scm
index d7b820c9f..d7b820c9f 100644
--- a/queries/haskell/folds.scm
+++ b/runtime/queries/haskell/folds.scm
diff --git a/queries/haskell/highlights.scm b/runtime/queries/haskell/highlights.scm
index 0880f020e..0880f020e 100644
--- a/queries/haskell/highlights.scm
+++ b/runtime/queries/haskell/highlights.scm
diff --git a/queries/haskell/injections.scm b/runtime/queries/haskell/injections.scm
index a82addbce..a82addbce 100644
--- a/queries/haskell/injections.scm
+++ b/runtime/queries/haskell/injections.scm
diff --git a/queries/haskell/locals.scm b/runtime/queries/haskell/locals.scm
index 7177f9dee..7177f9dee 100644
--- a/queries/haskell/locals.scm
+++ b/runtime/queries/haskell/locals.scm
diff --git a/queries/haskell_persistent/folds.scm b/runtime/queries/haskell_persistent/folds.scm
index dd34d9f15..dd34d9f15 100644
--- a/queries/haskell_persistent/folds.scm
+++ b/runtime/queries/haskell_persistent/folds.scm
diff --git a/queries/haskell_persistent/highlights.scm b/runtime/queries/haskell_persistent/highlights.scm
index 22cbf5cb3..22cbf5cb3 100644
--- a/queries/haskell_persistent/highlights.scm
+++ b/runtime/queries/haskell_persistent/highlights.scm
diff --git a/queries/hcl/folds.scm b/runtime/queries/hcl/folds.scm
index e0c5313a2..e0c5313a2 100644
--- a/queries/hcl/folds.scm
+++ b/runtime/queries/hcl/folds.scm
diff --git a/queries/hcl/highlights.scm b/runtime/queries/hcl/highlights.scm
index 4fb7d1fca..4fb7d1fca 100644
--- a/queries/hcl/highlights.scm
+++ b/runtime/queries/hcl/highlights.scm
diff --git a/queries/hcl/indents.scm b/runtime/queries/hcl/indents.scm
index 1d7dc49d9..1d7dc49d9 100644
--- a/queries/hcl/indents.scm
+++ b/runtime/queries/hcl/indents.scm
diff --git a/queries/hcl/injections.scm b/runtime/queries/hcl/injections.scm
index b68f4caea..b68f4caea 100644
--- a/queries/hcl/injections.scm
+++ b/runtime/queries/hcl/injections.scm
diff --git a/queries/heex/folds.scm b/runtime/queries/heex/folds.scm
index 88d4f17ff..88d4f17ff 100644
--- a/queries/heex/folds.scm
+++ b/runtime/queries/heex/folds.scm
diff --git a/queries/heex/highlights.scm b/runtime/queries/heex/highlights.scm
index e2fb01880..e2fb01880 100644
--- a/queries/heex/highlights.scm
+++ b/runtime/queries/heex/highlights.scm
diff --git a/queries/heex/indents.scm b/runtime/queries/heex/indents.scm
index 82a2f8912..82a2f8912 100644
--- a/queries/heex/indents.scm
+++ b/runtime/queries/heex/indents.scm
diff --git a/queries/heex/injections.scm b/runtime/queries/heex/injections.scm
index 4f179ee80..4f179ee80 100644
--- a/queries/heex/injections.scm
+++ b/runtime/queries/heex/injections.scm
diff --git a/queries/heex/locals.scm b/runtime/queries/heex/locals.scm
index cfa239e5f..cfa239e5f 100644
--- a/queries/heex/locals.scm
+++ b/runtime/queries/heex/locals.scm
diff --git a/queries/helm/folds.scm b/runtime/queries/helm/folds.scm
index 6ffb4b7d4..6ffb4b7d4 100644
--- a/queries/helm/folds.scm
+++ b/runtime/queries/helm/folds.scm
diff --git a/queries/helm/highlights.scm b/runtime/queries/helm/highlights.scm
index e9d221bee..e9d221bee 100644
--- a/queries/helm/highlights.scm
+++ b/runtime/queries/helm/highlights.scm
diff --git a/queries/helm/injections.scm b/runtime/queries/helm/injections.scm
index 2adf8743a..2adf8743a 100644
--- a/queries/helm/injections.scm
+++ b/runtime/queries/helm/injections.scm
diff --git a/queries/helm/locals.scm b/runtime/queries/helm/locals.scm
index 6ffb4b7d4..6ffb4b7d4 100644
--- a/queries/helm/locals.scm
+++ b/runtime/queries/helm/locals.scm
diff --git a/queries/hjson/folds.scm b/runtime/queries/hjson/folds.scm
index 41269219e..41269219e 100644
--- a/queries/hjson/folds.scm
+++ b/runtime/queries/hjson/folds.scm
diff --git a/queries/hjson/highlights.scm b/runtime/queries/hjson/highlights.scm
index 8333d8fe5..8333d8fe5 100644
--- a/queries/hjson/highlights.scm
+++ b/runtime/queries/hjson/highlights.scm
diff --git a/queries/hjson/indents.scm b/runtime/queries/hjson/indents.scm
index 3b01ca999..3b01ca999 100644
--- a/queries/hjson/indents.scm
+++ b/runtime/queries/hjson/indents.scm
diff --git a/queries/gomod/injections.scm b/runtime/queries/hjson/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gomod/injections.scm
+++ b/runtime/queries/hjson/injections.scm
diff --git a/queries/hjson/locals.scm b/runtime/queries/hjson/locals.scm
index 41269219e..41269219e 100644
--- a/queries/hjson/locals.scm
+++ b/runtime/queries/hjson/locals.scm
diff --git a/queries/hlsl/folds.scm b/runtime/queries/hlsl/folds.scm
index b617fdc56..b617fdc56 100644
--- a/queries/hlsl/folds.scm
+++ b/runtime/queries/hlsl/folds.scm
diff --git a/queries/hlsl/highlights.scm b/runtime/queries/hlsl/highlights.scm
index 839d8d79a..839d8d79a 100644
--- a/queries/hlsl/highlights.scm
+++ b/runtime/queries/hlsl/highlights.scm
diff --git a/queries/hlsl/indents.scm b/runtime/queries/hlsl/indents.scm
index b617fdc56..b617fdc56 100644
--- a/queries/hlsl/indents.scm
+++ b/runtime/queries/hlsl/indents.scm
diff --git a/queries/hlsl/injections.scm b/runtime/queries/hlsl/injections.scm
index b617fdc56..b617fdc56 100644
--- a/queries/hlsl/injections.scm
+++ b/runtime/queries/hlsl/injections.scm
diff --git a/queries/hlsl/locals.scm b/runtime/queries/hlsl/locals.scm
index b617fdc56..b617fdc56 100644
--- a/queries/hlsl/locals.scm
+++ b/runtime/queries/hlsl/locals.scm
diff --git a/queries/hlsplaylist/highlights.scm b/runtime/queries/hlsplaylist/highlights.scm
index 9852aed6d..9852aed6d 100644
--- a/queries/hlsplaylist/highlights.scm
+++ b/runtime/queries/hlsplaylist/highlights.scm
diff --git a/queries/gowork/injections.scm b/runtime/queries/hlsplaylist/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gowork/injections.scm
+++ b/runtime/queries/hlsplaylist/injections.scm
diff --git a/queries/hocon/folds.scm b/runtime/queries/hocon/folds.scm
index cc8a231a4..cc8a231a4 100644
--- a/queries/hocon/folds.scm
+++ b/runtime/queries/hocon/folds.scm
diff --git a/queries/hocon/highlights.scm b/runtime/queries/hocon/highlights.scm
index 0eb94e6dd..0eb94e6dd 100644
--- a/queries/hocon/highlights.scm
+++ b/runtime/queries/hocon/highlights.scm
diff --git a/queries/gpg/injections.scm b/runtime/queries/hocon/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/gpg/injections.scm
+++ b/runtime/queries/hocon/injections.scm
diff --git a/queries/hoon/folds.scm b/runtime/queries/hoon/folds.scm
index cfb4b6d0c..cfb4b6d0c 100644
--- a/queries/hoon/folds.scm
+++ b/runtime/queries/hoon/folds.scm
diff --git a/queries/hoon/highlights.scm b/runtime/queries/hoon/highlights.scm
index 90ac87217..90ac87217 100644
--- a/queries/hoon/highlights.scm
+++ b/runtime/queries/hoon/highlights.scm
diff --git a/queries/hoon/injections.scm b/runtime/queries/hoon/injections.scm
index a004ba0b4..a004ba0b4 100644
--- a/queries/hoon/injections.scm
+++ b/runtime/queries/hoon/injections.scm
diff --git a/queries/hoon/locals.scm b/runtime/queries/hoon/locals.scm
index fd7cc026d..fd7cc026d 100644
--- a/queries/hoon/locals.scm
+++ b/runtime/queries/hoon/locals.scm
diff --git a/queries/html/folds.scm b/runtime/queries/html/folds.scm
index 69b57eac5..69b57eac5 100644
--- a/queries/html/folds.scm
+++ b/runtime/queries/html/folds.scm
diff --git a/queries/html/highlights.scm b/runtime/queries/html/highlights.scm
index 4e2371d64..4e2371d64 100644
--- a/queries/html/highlights.scm
+++ b/runtime/queries/html/highlights.scm
diff --git a/queries/html/indents.scm b/runtime/queries/html/indents.scm
index 448e94275..448e94275 100644
--- a/queries/html/indents.scm
+++ b/runtime/queries/html/indents.scm
diff --git a/queries/html/injections.scm b/runtime/queries/html/injections.scm
index adb067d15..adb067d15 100644
--- a/queries/html/injections.scm
+++ b/runtime/queries/html/injections.scm
diff --git a/queries/html/locals.scm b/runtime/queries/html/locals.scm
index 4e3325db8..4e3325db8 100644
--- a/queries/html/locals.scm
+++ b/runtime/queries/html/locals.scm
diff --git a/queries/html_tags/highlights.scm b/runtime/queries/html_tags/highlights.scm
index 9eaf813be..9eaf813be 100644
--- a/queries/html_tags/highlights.scm
+++ b/runtime/queries/html_tags/highlights.scm
diff --git a/queries/html_tags/indents.scm b/runtime/queries/html_tags/indents.scm
index dc57c333a..dc57c333a 100644
--- a/queries/html_tags/indents.scm
+++ b/runtime/queries/html_tags/indents.scm
diff --git a/queries/html_tags/injections.scm b/runtime/queries/html_tags/injections.scm
index 5b78e37b4..5b78e37b4 100644
--- a/queries/html_tags/injections.scm
+++ b/runtime/queries/html_tags/injections.scm
diff --git a/queries/htmldjango/folds.scm b/runtime/queries/htmldjango/folds.scm
index 5e8f17c78..5e8f17c78 100644
--- a/queries/htmldjango/folds.scm
+++ b/runtime/queries/htmldjango/folds.scm
diff --git a/queries/htmldjango/highlights.scm b/runtime/queries/htmldjango/highlights.scm
index 3992b826d..3992b826d 100644
--- a/queries/htmldjango/highlights.scm
+++ b/runtime/queries/htmldjango/highlights.scm
diff --git a/queries/htmldjango/indents.scm b/runtime/queries/htmldjango/indents.scm
index d671f045d..d671f045d 100644
--- a/queries/htmldjango/indents.scm
+++ b/runtime/queries/htmldjango/indents.scm
diff --git a/queries/htmldjango/injections.scm b/runtime/queries/htmldjango/injections.scm
index 2d3bdb6cd..2d3bdb6cd 100644
--- a/queries/htmldjango/injections.scm
+++ b/runtime/queries/htmldjango/injections.scm
diff --git a/queries/http/folds.scm b/runtime/queries/http/folds.scm
index f7108a551..f7108a551 100644
--- a/queries/http/folds.scm
+++ b/runtime/queries/http/folds.scm
diff --git a/queries/http/highlights.scm b/runtime/queries/http/highlights.scm
index 1ac243729..1ac243729 100644
--- a/queries/http/highlights.scm
+++ b/runtime/queries/http/highlights.scm
diff --git a/queries/http/injections.scm b/runtime/queries/http/injections.scm
index f0e086580..f0e086580 100644
--- a/queries/http/injections.scm
+++ b/runtime/queries/http/injections.scm
diff --git a/queries/hurl/folds.scm b/runtime/queries/hurl/folds.scm
index a0edfa930..a0edfa930 100644
--- a/queries/hurl/folds.scm
+++ b/runtime/queries/hurl/folds.scm
diff --git a/queries/hurl/highlights.scm b/runtime/queries/hurl/highlights.scm
index 70b220985..70b220985 100644
--- a/queries/hurl/highlights.scm
+++ b/runtime/queries/hurl/highlights.scm
diff --git a/queries/hurl/indents.scm b/runtime/queries/hurl/indents.scm
index af6fdfa4e..af6fdfa4e 100644
--- a/queries/hurl/indents.scm
+++ b/runtime/queries/hurl/indents.scm
diff --git a/queries/hurl/injections.scm b/runtime/queries/hurl/injections.scm
index 41abb387b..41abb387b 100644
--- a/queries/hurl/injections.scm
+++ b/runtime/queries/hurl/injections.scm
diff --git a/queries/hyprlang/folds.scm b/runtime/queries/hyprlang/folds.scm
index 911798f5a..911798f5a 100644
--- a/queries/hyprlang/folds.scm
+++ b/runtime/queries/hyprlang/folds.scm
diff --git a/queries/hyprlang/highlights.scm b/runtime/queries/hyprlang/highlights.scm
index 5e3514125..5e3514125 100644
--- a/queries/hyprlang/highlights.scm
+++ b/runtime/queries/hyprlang/highlights.scm
diff --git a/queries/hyprlang/indents.scm b/runtime/queries/hyprlang/indents.scm
index 731ae9a61..731ae9a61 100644
--- a/queries/hyprlang/indents.scm
+++ b/runtime/queries/hyprlang/indents.scm
diff --git a/queries/hyprlang/injections.scm b/runtime/queries/hyprlang/injections.scm
index c7929e24d..c7929e24d 100644
--- a/queries/hyprlang/injections.scm
+++ b/runtime/queries/hyprlang/injections.scm
diff --git a/queries/idl/highlights.scm b/runtime/queries/idl/highlights.scm
index de1937203..de1937203 100644
--- a/queries/idl/highlights.scm
+++ b/runtime/queries/idl/highlights.scm
diff --git a/queries/idl/indents.scm b/runtime/queries/idl/indents.scm
index 2256fb701..2256fb701 100644
--- a/queries/idl/indents.scm
+++ b/runtime/queries/idl/indents.scm
diff --git a/queries/idl/injections.scm b/runtime/queries/idl/injections.scm
index e4a286e42..e4a286e42 100644
--- a/queries/idl/injections.scm
+++ b/runtime/queries/idl/injections.scm
diff --git a/queries/idris/folds.scm b/runtime/queries/idris/folds.scm
index 2f4885165..2f4885165 100644
--- a/queries/idris/folds.scm
+++ b/runtime/queries/idris/folds.scm
diff --git a/queries/idris/highlights.scm b/runtime/queries/idris/highlights.scm
index d3dfa7a9f..d3dfa7a9f 100644
--- a/queries/idris/highlights.scm
+++ b/runtime/queries/idris/highlights.scm
diff --git a/queries/graphql/injections.scm b/runtime/queries/idris/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/graphql/injections.scm
+++ b/runtime/queries/idris/injections.scm
diff --git a/queries/idris/locals.scm b/runtime/queries/idris/locals.scm
index c46f831f7..c46f831f7 100644
--- a/queries/idris/locals.scm
+++ b/runtime/queries/idris/locals.scm
diff --git a/queries/ini/folds.scm b/runtime/queries/ini/folds.scm
index 911798f5a..911798f5a 100644
--- a/queries/ini/folds.scm
+++ b/runtime/queries/ini/folds.scm
diff --git a/queries/ini/highlights.scm b/runtime/queries/ini/highlights.scm
index cbf958e84..cbf958e84 100644
--- a/queries/ini/highlights.scm
+++ b/runtime/queries/ini/highlights.scm
diff --git a/queries/ini/injections.scm b/runtime/queries/ini/injections.scm
index 8bfeee22d..8bfeee22d 100644
--- a/queries/ini/injections.scm
+++ b/runtime/queries/ini/injections.scm
diff --git a/queries/inko/folds.scm b/runtime/queries/inko/folds.scm
index 6ec1f5ba4..6ec1f5ba4 100644
--- a/queries/inko/folds.scm
+++ b/runtime/queries/inko/folds.scm
diff --git a/queries/inko/highlights.scm b/runtime/queries/inko/highlights.scm
index 989bdb9e8..989bdb9e8 100644
--- a/queries/inko/highlights.scm
+++ b/runtime/queries/inko/highlights.scm
diff --git a/queries/inko/indents.scm b/runtime/queries/inko/indents.scm
index d2d9a5724..d2d9a5724 100644
--- a/queries/inko/indents.scm
+++ b/runtime/queries/inko/indents.scm
diff --git a/queries/inko/injections.scm b/runtime/queries/inko/injections.scm
index 36849c873..36849c873 100644
--- a/queries/inko/injections.scm
+++ b/runtime/queries/inko/injections.scm
diff --git a/queries/inko/locals.scm b/runtime/queries/inko/locals.scm
index 09450f525..09450f525 100644
--- a/queries/inko/locals.scm
+++ b/runtime/queries/inko/locals.scm
diff --git a/queries/ipkg/folds.scm b/runtime/queries/ipkg/folds.scm
index 271654f9a..271654f9a 100644
--- a/queries/ipkg/folds.scm
+++ b/runtime/queries/ipkg/folds.scm
diff --git a/queries/ipkg/highlights.scm b/runtime/queries/ipkg/highlights.scm
index 13c102018..13c102018 100644
--- a/queries/ipkg/highlights.scm
+++ b/runtime/queries/ipkg/highlights.scm
diff --git a/queries/ipkg/indents.scm b/runtime/queries/ipkg/indents.scm
index a596e9ebe..a596e9ebe 100644
--- a/queries/ipkg/indents.scm
+++ b/runtime/queries/ipkg/indents.scm
diff --git a/queries/ipkg/injections.scm b/runtime/queries/ipkg/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/ipkg/injections.scm
+++ b/runtime/queries/ipkg/injections.scm
diff --git a/queries/ipkg/locals.scm b/runtime/queries/ipkg/locals.scm
index c1970fcdf..c1970fcdf 100644
--- a/queries/ipkg/locals.scm
+++ b/runtime/queries/ipkg/locals.scm
diff --git a/queries/ispc/folds.scm b/runtime/queries/ispc/folds.scm
index 45d0ba131..45d0ba131 100644
--- a/queries/ispc/folds.scm
+++ b/runtime/queries/ispc/folds.scm
diff --git a/queries/ispc/highlights.scm b/runtime/queries/ispc/highlights.scm
index fd9c7262e..fd9c7262e 100644
--- a/queries/ispc/highlights.scm
+++ b/runtime/queries/ispc/highlights.scm
diff --git a/queries/ispc/indents.scm b/runtime/queries/ispc/indents.scm
index f8c04e3a9..f8c04e3a9 100644
--- a/queries/ispc/indents.scm
+++ b/runtime/queries/ispc/indents.scm
diff --git a/queries/ispc/injections.scm b/runtime/queries/ispc/injections.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/ispc/injections.scm
+++ b/runtime/queries/ispc/injections.scm
diff --git a/queries/ispc/locals.scm b/runtime/queries/ispc/locals.scm
index 985b3c9e0..985b3c9e0 100644
--- a/queries/ispc/locals.scm
+++ b/runtime/queries/ispc/locals.scm
diff --git a/queries/janet_simple/folds.scm b/runtime/queries/janet_simple/folds.scm
index e316af4d5..e316af4d5 100644
--- a/queries/janet_simple/folds.scm
+++ b/runtime/queries/janet_simple/folds.scm
diff --git a/queries/janet_simple/highlights.scm b/runtime/queries/janet_simple/highlights.scm
index 552f865c6..552f865c6 100644
--- a/queries/janet_simple/highlights.scm
+++ b/runtime/queries/janet_simple/highlights.scm
diff --git a/queries/hjson/injections.scm b/runtime/queries/janet_simple/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/hjson/injections.scm
+++ b/runtime/queries/janet_simple/injections.scm
diff --git a/queries/janet_simple/locals.scm b/runtime/queries/janet_simple/locals.scm
index e47adce45..e47adce45 100644
--- a/queries/janet_simple/locals.scm
+++ b/runtime/queries/janet_simple/locals.scm
diff --git a/queries/java/folds.scm b/runtime/queries/java/folds.scm
index 2cc143a78..2cc143a78 100644
--- a/queries/java/folds.scm
+++ b/runtime/queries/java/folds.scm
diff --git a/queries/java/highlights.scm b/runtime/queries/java/highlights.scm
index df9ca14d4..df9ca14d4 100644
--- a/queries/java/highlights.scm
+++ b/runtime/queries/java/highlights.scm
diff --git a/queries/java/indents.scm b/runtime/queries/java/indents.scm
index 9e4d0a5e1..9e4d0a5e1 100644
--- a/queries/java/indents.scm
+++ b/runtime/queries/java/indents.scm
diff --git a/queries/java/injections.scm b/runtime/queries/java/injections.scm
index 7728a0956..7728a0956 100644
--- a/queries/java/injections.scm
+++ b/runtime/queries/java/injections.scm
diff --git a/queries/java/locals.scm b/runtime/queries/java/locals.scm
index 53e950908..53e950908 100644
--- a/queries/java/locals.scm
+++ b/runtime/queries/java/locals.scm
diff --git a/queries/javadoc/highlights.scm b/runtime/queries/javadoc/highlights.scm
index 832899cb5..832899cb5 100644
--- a/queries/javadoc/highlights.scm
+++ b/runtime/queries/javadoc/highlights.scm
diff --git a/queries/javadoc/indents.scm b/runtime/queries/javadoc/indents.scm
index ef30f1e76..ef30f1e76 100644
--- a/queries/javadoc/indents.scm
+++ b/runtime/queries/javadoc/indents.scm
diff --git a/queries/javadoc/injections.scm b/runtime/queries/javadoc/injections.scm
index 7668f21bc..7668f21bc 100644
--- a/queries/javadoc/injections.scm
+++ b/runtime/queries/javadoc/injections.scm
diff --git a/queries/javascript/folds.scm b/runtime/queries/javascript/folds.scm
index b6d9b28bf..b6d9b28bf 100644
--- a/queries/javascript/folds.scm
+++ b/runtime/queries/javascript/folds.scm
diff --git a/queries/javascript/highlights.scm b/runtime/queries/javascript/highlights.scm
index 257a731ad..257a731ad 100644
--- a/queries/javascript/highlights.scm
+++ b/runtime/queries/javascript/highlights.scm
diff --git a/queries/javascript/indents.scm b/runtime/queries/javascript/indents.scm
index b6d9b28bf..b6d9b28bf 100644
--- a/queries/javascript/indents.scm
+++ b/runtime/queries/javascript/indents.scm
diff --git a/queries/javascript/injections.scm b/runtime/queries/javascript/injections.scm
index b6d9b28bf..b6d9b28bf 100644
--- a/queries/javascript/injections.scm
+++ b/runtime/queries/javascript/injections.scm
diff --git a/queries/javascript/locals.scm b/runtime/queries/javascript/locals.scm
index 6d6846fc7..6d6846fc7 100644
--- a/queries/javascript/locals.scm
+++ b/runtime/queries/javascript/locals.scm
diff --git a/queries/jinja/highlights.scm b/runtime/queries/jinja/highlights.scm
index cb6f9ff41..cb6f9ff41 100644
--- a/queries/jinja/highlights.scm
+++ b/runtime/queries/jinja/highlights.scm
diff --git a/queries/jinja/injections.scm b/runtime/queries/jinja/injections.scm
index 162db3aee..162db3aee 100644
--- a/queries/jinja/injections.scm
+++ b/runtime/queries/jinja/injections.scm
diff --git a/queries/jinja_inline/highlights.scm b/runtime/queries/jinja_inline/highlights.scm
index 69dba77b3..69dba77b3 100644
--- a/queries/jinja_inline/highlights.scm
+++ b/runtime/queries/jinja_inline/highlights.scm
diff --git a/queries/hlsplaylist/injections.scm b/runtime/queries/jinja_inline/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/hlsplaylist/injections.scm
+++ b/runtime/queries/jinja_inline/injections.scm
diff --git a/queries/jq/highlights.scm b/runtime/queries/jq/highlights.scm
index 5d6050f4c..5d6050f4c 100644
--- a/queries/jq/highlights.scm
+++ b/runtime/queries/jq/highlights.scm
diff --git a/queries/jq/injections.scm b/runtime/queries/jq/injections.scm
index f8a7a35b0..f8a7a35b0 100644
--- a/queries/jq/injections.scm
+++ b/runtime/queries/jq/injections.scm
diff --git a/queries/jq/locals.scm b/runtime/queries/jq/locals.scm
index 0b8a0997d..0b8a0997d 100644
--- a/queries/jq/locals.scm
+++ b/runtime/queries/jq/locals.scm
diff --git a/queries/jsdoc/highlights.scm b/runtime/queries/jsdoc/highlights.scm
index 6df73318d..6df73318d 100644
--- a/queries/jsdoc/highlights.scm
+++ b/runtime/queries/jsdoc/highlights.scm
diff --git a/queries/json/folds.scm b/runtime/queries/json/folds.scm
index 4c2b9d32e..4c2b9d32e 100644
--- a/queries/json/folds.scm
+++ b/runtime/queries/json/folds.scm
diff --git a/queries/json/highlights.scm b/runtime/queries/json/highlights.scm
index 85915285a..85915285a 100644
--- a/queries/json/highlights.scm
+++ b/runtime/queries/json/highlights.scm
diff --git a/queries/json/indents.scm b/runtime/queries/json/indents.scm
index 8274ee3d5..8274ee3d5 100644
--- a/queries/json/indents.scm
+++ b/runtime/queries/json/indents.scm
diff --git a/queries/json/locals.scm b/runtime/queries/json/locals.scm
index aaeee38ca..aaeee38ca 100644
--- a/queries/json/locals.scm
+++ b/runtime/queries/json/locals.scm
diff --git a/queries/json5/highlights.scm b/runtime/queries/json5/highlights.scm
index 4ffe311c4..4ffe311c4 100644
--- a/queries/json5/highlights.scm
+++ b/runtime/queries/json5/highlights.scm
diff --git a/queries/hocon/injections.scm b/runtime/queries/json5/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/hocon/injections.scm
+++ b/runtime/queries/json5/injections.scm
diff --git a/queries/jsonc/folds.scm b/runtime/queries/jsonc/folds.scm
index 41269219e..41269219e 100644
--- a/queries/jsonc/folds.scm
+++ b/runtime/queries/jsonc/folds.scm
diff --git a/queries/jsonc/highlights.scm b/runtime/queries/jsonc/highlights.scm
index e50112155..e50112155 100644
--- a/queries/jsonc/highlights.scm
+++ b/runtime/queries/jsonc/highlights.scm
diff --git a/queries/jsonc/indents.scm b/runtime/queries/jsonc/indents.scm
index 3b01ca999..3b01ca999 100644
--- a/queries/jsonc/indents.scm
+++ b/runtime/queries/jsonc/indents.scm
diff --git a/queries/idris/injections.scm b/runtime/queries/jsonc/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/idris/injections.scm
+++ b/runtime/queries/jsonc/injections.scm
diff --git a/queries/jsonc/locals.scm b/runtime/queries/jsonc/locals.scm
index 41269219e..41269219e 100644
--- a/queries/jsonc/locals.scm
+++ b/runtime/queries/jsonc/locals.scm
diff --git a/queries/jsonnet/folds.scm b/runtime/queries/jsonnet/folds.scm
index 91257a790..91257a790 100644
--- a/queries/jsonnet/folds.scm
+++ b/runtime/queries/jsonnet/folds.scm
diff --git a/queries/jsonnet/highlights.scm b/runtime/queries/jsonnet/highlights.scm
index 1e67baa32..1e67baa32 100644
--- a/queries/jsonnet/highlights.scm
+++ b/runtime/queries/jsonnet/highlights.scm
diff --git a/queries/janet_simple/injections.scm b/runtime/queries/jsonnet/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/janet_simple/injections.scm
+++ b/runtime/queries/jsonnet/injections.scm
diff --git a/queries/jsonnet/locals.scm b/runtime/queries/jsonnet/locals.scm
index 778077764..778077764 100644
--- a/queries/jsonnet/locals.scm
+++ b/runtime/queries/jsonnet/locals.scm
diff --git a/queries/jsx/folds.scm b/runtime/queries/jsx/folds.scm
index 93c3d9c8c..93c3d9c8c 100644
--- a/queries/jsx/folds.scm
+++ b/runtime/queries/jsx/folds.scm
diff --git a/queries/jsx/highlights.scm b/runtime/queries/jsx/highlights.scm
index 0615d253a..0615d253a 100644
--- a/queries/jsx/highlights.scm
+++ b/runtime/queries/jsx/highlights.scm
diff --git a/queries/jsx/indents.scm b/runtime/queries/jsx/indents.scm
index 812bc255d..812bc255d 100644
--- a/queries/jsx/indents.scm
+++ b/runtime/queries/jsx/indents.scm
diff --git a/queries/jsx/injections.scm b/runtime/queries/jsx/injections.scm
index 269ee3fff..269ee3fff 100644
--- a/queries/jsx/injections.scm
+++ b/runtime/queries/jsx/injections.scm
diff --git a/queries/julia/folds.scm b/runtime/queries/julia/folds.scm
index 2cbdc2815..2cbdc2815 100644
--- a/queries/julia/folds.scm
+++ b/runtime/queries/julia/folds.scm
diff --git a/queries/julia/highlights.scm b/runtime/queries/julia/highlights.scm
index 9a82c5d41..9a82c5d41 100644
--- a/queries/julia/highlights.scm
+++ b/runtime/queries/julia/highlights.scm
diff --git a/queries/julia/indents.scm b/runtime/queries/julia/indents.scm
index 7b40f876e..7b40f876e 100644
--- a/queries/julia/indents.scm
+++ b/runtime/queries/julia/indents.scm
diff --git a/queries/julia/injections.scm b/runtime/queries/julia/injections.scm
index 72d181066..72d181066 100644
--- a/queries/julia/injections.scm
+++ b/runtime/queries/julia/injections.scm
diff --git a/queries/julia/locals.scm b/runtime/queries/julia/locals.scm
index 500b7fe58..500b7fe58 100644
--- a/queries/julia/locals.scm
+++ b/runtime/queries/julia/locals.scm
diff --git a/queries/just/folds.scm b/runtime/queries/just/folds.scm
index fea3a5058..fea3a5058 100644
--- a/queries/just/folds.scm
+++ b/runtime/queries/just/folds.scm
diff --git a/queries/just/highlights.scm b/runtime/queries/just/highlights.scm
index fbbf4eece..fbbf4eece 100644
--- a/queries/just/highlights.scm
+++ b/runtime/queries/just/highlights.scm
diff --git a/queries/just/indents.scm b/runtime/queries/just/indents.scm
index 1402a0c03..1402a0c03 100644
--- a/queries/just/indents.scm
+++ b/runtime/queries/just/indents.scm
diff --git a/queries/just/injections.scm b/runtime/queries/just/injections.scm
index 90db6b725..90db6b725 100644
--- a/queries/just/injections.scm
+++ b/runtime/queries/just/injections.scm
diff --git a/queries/just/locals.scm b/runtime/queries/just/locals.scm
index 80549f35b..80549f35b 100644
--- a/queries/just/locals.scm
+++ b/runtime/queries/just/locals.scm
diff --git a/queries/kcl/folds.scm b/runtime/queries/kcl/folds.scm
index 64e9e95d1..64e9e95d1 100644
--- a/queries/kcl/folds.scm
+++ b/runtime/queries/kcl/folds.scm
diff --git a/queries/kcl/highlights.scm b/runtime/queries/kcl/highlights.scm
index 81b699ac2..81b699ac2 100644
--- a/queries/kcl/highlights.scm
+++ b/runtime/queries/kcl/highlights.scm
diff --git a/queries/kcl/injections.scm b/runtime/queries/kcl/injections.scm
index 4e04e54d3..4e04e54d3 100644
--- a/queries/kcl/injections.scm
+++ b/runtime/queries/kcl/injections.scm
diff --git a/queries/kconfig/folds.scm b/runtime/queries/kconfig/folds.scm
index 980667dfc..980667dfc 100644
--- a/queries/kconfig/folds.scm
+++ b/runtime/queries/kconfig/folds.scm
diff --git a/queries/kconfig/highlights.scm b/runtime/queries/kconfig/highlights.scm
index deb88bc00..deb88bc00 100644
--- a/queries/kconfig/highlights.scm
+++ b/runtime/queries/kconfig/highlights.scm
diff --git a/queries/kconfig/indents.scm b/runtime/queries/kconfig/indents.scm
index faa83602f..faa83602f 100644
--- a/queries/kconfig/indents.scm
+++ b/runtime/queries/kconfig/indents.scm
diff --git a/queries/jinja_inline/injections.scm b/runtime/queries/kconfig/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/jinja_inline/injections.scm
+++ b/runtime/queries/kconfig/injections.scm
diff --git a/queries/kconfig/locals.scm b/runtime/queries/kconfig/locals.scm
index 09a50fecb..09a50fecb 100644
--- a/queries/kconfig/locals.scm
+++ b/runtime/queries/kconfig/locals.scm
diff --git a/queries/kdl/folds.scm b/runtime/queries/kdl/folds.scm
index c96619b14..c96619b14 100644
--- a/queries/kdl/folds.scm
+++ b/runtime/queries/kdl/folds.scm
diff --git a/queries/kdl/highlights.scm b/runtime/queries/kdl/highlights.scm
index 7d200c85e..7d200c85e 100644
--- a/queries/kdl/highlights.scm
+++ b/runtime/queries/kdl/highlights.scm
diff --git a/queries/kdl/indents.scm b/runtime/queries/kdl/indents.scm
index 6d16efd2d..6d16efd2d 100644
--- a/queries/kdl/indents.scm
+++ b/runtime/queries/kdl/indents.scm
diff --git a/queries/kdl/injections.scm b/runtime/queries/kdl/injections.scm
index 81d7734cb..81d7734cb 100644
--- a/queries/kdl/injections.scm
+++ b/runtime/queries/kdl/injections.scm
diff --git a/queries/kdl/locals.scm b/runtime/queries/kdl/locals.scm
index 14b0af23e..14b0af23e 100644
--- a/queries/kdl/locals.scm
+++ b/runtime/queries/kdl/locals.scm
diff --git a/queries/kotlin/folds.scm b/runtime/queries/kotlin/folds.scm
index eb4becc5f..eb4becc5f 100644
--- a/queries/kotlin/folds.scm
+++ b/runtime/queries/kotlin/folds.scm
diff --git a/queries/kotlin/highlights.scm b/runtime/queries/kotlin/highlights.scm
index 8eda6ef61..8eda6ef61 100644
--- a/queries/kotlin/highlights.scm
+++ b/runtime/queries/kotlin/highlights.scm
diff --git a/queries/kotlin/injections.scm b/runtime/queries/kotlin/injections.scm
index b2bc233ff..b2bc233ff 100644
--- a/queries/kotlin/injections.scm
+++ b/runtime/queries/kotlin/injections.scm
diff --git a/queries/kotlin/locals.scm b/runtime/queries/kotlin/locals.scm
index 330803f1b..330803f1b 100644
--- a/queries/kotlin/locals.scm
+++ b/runtime/queries/kotlin/locals.scm
diff --git a/queries/koto/folds.scm b/runtime/queries/koto/folds.scm
index d20d0120b..d20d0120b 100644
--- a/queries/koto/folds.scm
+++ b/runtime/queries/koto/folds.scm
diff --git a/queries/koto/highlights.scm b/runtime/queries/koto/highlights.scm
index bd6ce8d0e..bd6ce8d0e 100644
--- a/queries/koto/highlights.scm
+++ b/runtime/queries/koto/highlights.scm
diff --git a/queries/json5/injections.scm b/runtime/queries/koto/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/json5/injections.scm
+++ b/runtime/queries/koto/injections.scm
diff --git a/queries/koto/locals.scm b/runtime/queries/koto/locals.scm
index c18487483..c18487483 100644
--- a/queries/koto/locals.scm
+++ b/runtime/queries/koto/locals.scm
diff --git a/queries/kusto/highlights.scm b/runtime/queries/kusto/highlights.scm
index 5f00f751c..5f00f751c 100644
--- a/queries/kusto/highlights.scm
+++ b/runtime/queries/kusto/highlights.scm
diff --git a/queries/jsonc/injections.scm b/runtime/queries/kusto/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/jsonc/injections.scm
+++ b/runtime/queries/kusto/injections.scm
diff --git a/queries/lalrpop/folds.scm b/runtime/queries/lalrpop/folds.scm
index beeed9ba5..beeed9ba5 100644
--- a/queries/lalrpop/folds.scm
+++ b/runtime/queries/lalrpop/folds.scm
diff --git a/queries/lalrpop/highlights.scm b/runtime/queries/lalrpop/highlights.scm
index 046d39790..046d39790 100644
--- a/queries/lalrpop/highlights.scm
+++ b/runtime/queries/lalrpop/highlights.scm
diff --git a/queries/lalrpop/injections.scm b/runtime/queries/lalrpop/injections.scm
index 17d0ace48..17d0ace48 100644
--- a/queries/lalrpop/injections.scm
+++ b/runtime/queries/lalrpop/injections.scm
diff --git a/queries/lalrpop/locals.scm b/runtime/queries/lalrpop/locals.scm
index ceeac965b..ceeac965b 100644
--- a/queries/lalrpop/locals.scm
+++ b/runtime/queries/lalrpop/locals.scm
diff --git a/queries/latex/folds.scm b/runtime/queries/latex/folds.scm
index 1ee7946b8..1ee7946b8 100644
--- a/queries/latex/folds.scm
+++ b/runtime/queries/latex/folds.scm
diff --git a/queries/latex/highlights.scm b/runtime/queries/latex/highlights.scm
index c39cd1b14..c39cd1b14 100644
--- a/queries/latex/highlights.scm
+++ b/runtime/queries/latex/highlights.scm
diff --git a/queries/latex/injections.scm b/runtime/queries/latex/injections.scm
index 53d808c1d..53d808c1d 100644
--- a/queries/latex/injections.scm
+++ b/runtime/queries/latex/injections.scm
diff --git a/queries/ledger/folds.scm b/runtime/queries/ledger/folds.scm
index 8b5736819..8b5736819 100644
--- a/queries/ledger/folds.scm
+++ b/runtime/queries/ledger/folds.scm
diff --git a/queries/ledger/highlights.scm b/runtime/queries/ledger/highlights.scm
index 5198ad888..5198ad888 100644
--- a/queries/ledger/highlights.scm
+++ b/runtime/queries/ledger/highlights.scm
diff --git a/queries/ledger/indents.scm b/runtime/queries/ledger/indents.scm
index 9697c9cfa..9697c9cfa 100644
--- a/queries/ledger/indents.scm
+++ b/runtime/queries/ledger/indents.scm
diff --git a/queries/ledger/injections.scm b/runtime/queries/ledger/injections.scm
index 35fb57eef..35fb57eef 100644
--- a/queries/ledger/injections.scm
+++ b/runtime/queries/ledger/injections.scm
diff --git a/queries/leo/highlights.scm b/runtime/queries/leo/highlights.scm
index 3d4dadd3c..3d4dadd3c 100644
--- a/queries/leo/highlights.scm
+++ b/runtime/queries/leo/highlights.scm
diff --git a/queries/leo/indents.scm b/runtime/queries/leo/indents.scm
index b2d33a59b..b2d33a59b 100644
--- a/queries/leo/indents.scm
+++ b/runtime/queries/leo/indents.scm
diff --git a/queries/jsonnet/injections.scm b/runtime/queries/leo/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/jsonnet/injections.scm
+++ b/runtime/queries/leo/injections.scm
diff --git a/queries/linkerscript/folds.scm b/runtime/queries/linkerscript/folds.scm
index 0fc77b1a7..0fc77b1a7 100644
--- a/queries/linkerscript/folds.scm
+++ b/runtime/queries/linkerscript/folds.scm
diff --git a/queries/linkerscript/highlights.scm b/runtime/queries/linkerscript/highlights.scm
index 12330169e..12330169e 100644
--- a/queries/linkerscript/highlights.scm
+++ b/runtime/queries/linkerscript/highlights.scm
diff --git a/queries/linkerscript/indents.scm b/runtime/queries/linkerscript/indents.scm
index a636ba109..a636ba109 100644
--- a/queries/linkerscript/indents.scm
+++ b/runtime/queries/linkerscript/indents.scm
diff --git a/queries/linkerscript/injections.scm b/runtime/queries/linkerscript/injections.scm
index 51e6d1f6b..51e6d1f6b 100644
--- a/queries/linkerscript/injections.scm
+++ b/runtime/queries/linkerscript/injections.scm
diff --git a/queries/linkerscript/locals.scm b/runtime/queries/linkerscript/locals.scm
index 6b7660370..6b7660370 100644
--- a/queries/linkerscript/locals.scm
+++ b/runtime/queries/linkerscript/locals.scm
diff --git a/queries/liquid/highlights.scm b/runtime/queries/liquid/highlights.scm
index 38750db41..38750db41 100644
--- a/queries/liquid/highlights.scm
+++ b/runtime/queries/liquid/highlights.scm
diff --git a/queries/liquid/injections.scm b/runtime/queries/liquid/injections.scm
index ab0ced6ae..ab0ced6ae 100644
--- a/queries/liquid/injections.scm
+++ b/runtime/queries/liquid/injections.scm
diff --git a/queries/liquidsoap/folds.scm b/runtime/queries/liquidsoap/folds.scm
index 56e4ce547..56e4ce547 100644
--- a/queries/liquidsoap/folds.scm
+++ b/runtime/queries/liquidsoap/folds.scm
diff --git a/queries/liquidsoap/highlights.scm b/runtime/queries/liquidsoap/highlights.scm
index c5608f897..c5608f897 100644
--- a/queries/liquidsoap/highlights.scm
+++ b/runtime/queries/liquidsoap/highlights.scm
diff --git a/queries/liquidsoap/indents.scm b/runtime/queries/liquidsoap/indents.scm
index 7cb5935fb..7cb5935fb 100644
--- a/queries/liquidsoap/indents.scm
+++ b/runtime/queries/liquidsoap/indents.scm
diff --git a/queries/kconfig/injections.scm b/runtime/queries/liquidsoap/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/kconfig/injections.scm
+++ b/runtime/queries/liquidsoap/injections.scm
diff --git a/queries/liquidsoap/locals.scm b/runtime/queries/liquidsoap/locals.scm
index 995294c03..995294c03 100644
--- a/queries/liquidsoap/locals.scm
+++ b/runtime/queries/liquidsoap/locals.scm
diff --git a/queries/llvm/highlights.scm b/runtime/queries/llvm/highlights.scm
index ea48272f5..ea48272f5 100644
--- a/queries/llvm/highlights.scm
+++ b/runtime/queries/llvm/highlights.scm
diff --git a/queries/koto/injections.scm b/runtime/queries/llvm/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/koto/injections.scm
+++ b/runtime/queries/llvm/injections.scm
diff --git a/queries/lua/folds.scm b/runtime/queries/lua/folds.scm
index 9dfac3abc..9dfac3abc 100644
--- a/queries/lua/folds.scm
+++ b/runtime/queries/lua/folds.scm
diff --git a/queries/lua/highlights.scm b/runtime/queries/lua/highlights.scm
index 79ab165aa..79ab165aa 100644
--- a/queries/lua/highlights.scm
+++ b/runtime/queries/lua/highlights.scm
diff --git a/queries/lua/indents.scm b/runtime/queries/lua/indents.scm
index 84303b8ab..84303b8ab 100644
--- a/queries/lua/indents.scm
+++ b/runtime/queries/lua/indents.scm
diff --git a/queries/lua/injections.scm b/runtime/queries/lua/injections.scm
index e76745f4f..e76745f4f 100644
--- a/queries/lua/injections.scm
+++ b/runtime/queries/lua/injections.scm
diff --git a/queries/lua/locals.scm b/runtime/queries/lua/locals.scm
index c4f36e8d4..c4f36e8d4 100644
--- a/queries/lua/locals.scm
+++ b/runtime/queries/lua/locals.scm
diff --git a/queries/luadoc/highlights.scm b/runtime/queries/luadoc/highlights.scm
index 1649e5d9b..1649e5d9b 100644
--- a/queries/luadoc/highlights.scm
+++ b/runtime/queries/luadoc/highlights.scm
diff --git a/queries/luap/highlights.scm b/runtime/queries/luap/highlights.scm
index 40d2bd37b..40d2bd37b 100644
--- a/queries/luap/highlights.scm
+++ b/runtime/queries/luap/highlights.scm
diff --git a/queries/luau/folds.scm b/runtime/queries/luau/folds.scm
index 8ddaf9476..8ddaf9476 100644
--- a/queries/luau/folds.scm
+++ b/runtime/queries/luau/folds.scm
diff --git a/queries/luau/highlights.scm b/runtime/queries/luau/highlights.scm
index f6f64b30c..f6f64b30c 100644
--- a/queries/luau/highlights.scm
+++ b/runtime/queries/luau/highlights.scm
diff --git a/queries/luau/indents.scm b/runtime/queries/luau/indents.scm
index f0af4dd33..f0af4dd33 100644
--- a/queries/luau/indents.scm
+++ b/runtime/queries/luau/indents.scm
diff --git a/queries/luau/injections.scm b/runtime/queries/luau/injections.scm
index 558791520..558791520 100644
--- a/queries/luau/injections.scm
+++ b/runtime/queries/luau/injections.scm
diff --git a/queries/luau/locals.scm b/runtime/queries/luau/locals.scm
index d5420b4c8..d5420b4c8 100644
--- a/queries/luau/locals.scm
+++ b/runtime/queries/luau/locals.scm
diff --git a/queries/m68k/folds.scm b/runtime/queries/m68k/folds.scm
index 1dd8eaf11..1dd8eaf11 100644
--- a/queries/m68k/folds.scm
+++ b/runtime/queries/m68k/folds.scm
diff --git a/queries/m68k/highlights.scm b/runtime/queries/m68k/highlights.scm
index 72a5504d6..72a5504d6 100644
--- a/queries/m68k/highlights.scm
+++ b/runtime/queries/m68k/highlights.scm
diff --git a/queries/kusto/injections.scm b/runtime/queries/m68k/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/kusto/injections.scm
+++ b/runtime/queries/m68k/injections.scm
diff --git a/queries/m68k/locals.scm b/runtime/queries/m68k/locals.scm
index 54e948a4b..54e948a4b 100644
--- a/queries/m68k/locals.scm
+++ b/runtime/queries/m68k/locals.scm
diff --git a/queries/make/folds.scm b/runtime/queries/make/folds.scm
index c7f87ac16..c7f87ac16 100644
--- a/queries/make/folds.scm
+++ b/runtime/queries/make/folds.scm
diff --git a/queries/make/highlights.scm b/runtime/queries/make/highlights.scm
index afdfbe336..afdfbe336 100644
--- a/queries/make/highlights.scm
+++ b/runtime/queries/make/highlights.scm
diff --git a/queries/make/injections.scm b/runtime/queries/make/injections.scm
index c9c09be5d..c9c09be5d 100644
--- a/queries/make/injections.scm
+++ b/runtime/queries/make/injections.scm
diff --git a/queries/markdown/folds.scm b/runtime/queries/markdown/folds.scm
index 2bcfd442d..2bcfd442d 100644
--- a/queries/markdown/folds.scm
+++ b/runtime/queries/markdown/folds.scm
diff --git a/queries/markdown/highlights.scm b/runtime/queries/markdown/highlights.scm
index 2a6ad1968..2a6ad1968 100644
--- a/queries/markdown/highlights.scm
+++ b/runtime/queries/markdown/highlights.scm
diff --git a/queries/markdown/indents.scm b/runtime/queries/markdown/indents.scm
index 90c52d3d0..90c52d3d0 100644
--- a/queries/markdown/indents.scm
+++ b/runtime/queries/markdown/indents.scm
diff --git a/queries/markdown/injections.scm b/runtime/queries/markdown/injections.scm
index 8ed205296..8ed205296 100644
--- a/queries/markdown/injections.scm
+++ b/runtime/queries/markdown/injections.scm
diff --git a/queries/markdown_inline/highlights.scm b/runtime/queries/markdown_inline/highlights.scm
index 5fb9e911d..5fb9e911d 100644
--- a/queries/markdown_inline/highlights.scm
+++ b/runtime/queries/markdown_inline/highlights.scm
diff --git a/queries/markdown_inline/injections.scm b/runtime/queries/markdown_inline/injections.scm
index 6448b77c1..6448b77c1 100644
--- a/queries/markdown_inline/injections.scm
+++ b/runtime/queries/markdown_inline/injections.scm
diff --git a/queries/matlab/folds.scm b/runtime/queries/matlab/folds.scm
index 83008b3d7..83008b3d7 100644
--- a/queries/matlab/folds.scm
+++ b/runtime/queries/matlab/folds.scm
diff --git a/queries/matlab/highlights.scm b/runtime/queries/matlab/highlights.scm
index d2ab6053e..d2ab6053e 100644
--- a/queries/matlab/highlights.scm
+++ b/runtime/queries/matlab/highlights.scm
diff --git a/queries/matlab/indents.scm b/runtime/queries/matlab/indents.scm
index d446f45df..d446f45df 100644
--- a/queries/matlab/indents.scm
+++ b/runtime/queries/matlab/indents.scm
diff --git a/queries/leo/injections.scm b/runtime/queries/matlab/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/leo/injections.scm
+++ b/runtime/queries/matlab/injections.scm
diff --git a/queries/matlab/locals.scm b/runtime/queries/matlab/locals.scm
index 366c82027..366c82027 100644
--- a/queries/matlab/locals.scm
+++ b/runtime/queries/matlab/locals.scm
diff --git a/queries/menhir/highlights.scm b/runtime/queries/menhir/highlights.scm
index 022fda82e..022fda82e 100644
--- a/queries/menhir/highlights.scm
+++ b/runtime/queries/menhir/highlights.scm
diff --git a/queries/menhir/injections.scm b/runtime/queries/menhir/injections.scm
index 16a3f8157..16a3f8157 100644
--- a/queries/menhir/injections.scm
+++ b/runtime/queries/menhir/injections.scm
diff --git a/queries/mermaid/folds.scm b/runtime/queries/mermaid/folds.scm
index 5f28abf5b..5f28abf5b 100644
--- a/queries/mermaid/folds.scm
+++ b/runtime/queries/mermaid/folds.scm
diff --git a/queries/mermaid/highlights.scm b/runtime/queries/mermaid/highlights.scm
index 2b7b56374..2b7b56374 100644
--- a/queries/mermaid/highlights.scm
+++ b/runtime/queries/mermaid/highlights.scm
diff --git a/queries/mermaid/indents.scm b/runtime/queries/mermaid/indents.scm
index fb95bd8de..fb95bd8de 100644
--- a/queries/mermaid/indents.scm
+++ b/runtime/queries/mermaid/indents.scm
diff --git a/queries/liquidsoap/injections.scm b/runtime/queries/mermaid/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/liquidsoap/injections.scm
+++ b/runtime/queries/mermaid/injections.scm
diff --git a/queries/meson/folds.scm b/runtime/queries/meson/folds.scm
index 386d4d306..386d4d306 100644
--- a/queries/meson/folds.scm
+++ b/runtime/queries/meson/folds.scm
diff --git a/queries/meson/highlights.scm b/runtime/queries/meson/highlights.scm
index b00c3399b..b00c3399b 100644
--- a/queries/meson/highlights.scm
+++ b/runtime/queries/meson/highlights.scm
diff --git a/queries/meson/indents.scm b/runtime/queries/meson/indents.scm
index 3e27d9200..3e27d9200 100644
--- a/queries/meson/indents.scm
+++ b/runtime/queries/meson/indents.scm
diff --git a/queries/llvm/injections.scm b/runtime/queries/meson/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/llvm/injections.scm
+++ b/runtime/queries/meson/injections.scm
diff --git a/queries/mlir/highlights.scm b/runtime/queries/mlir/highlights.scm
index 97a0b0d0b..97a0b0d0b 100644
--- a/queries/mlir/highlights.scm
+++ b/runtime/queries/mlir/highlights.scm
diff --git a/queries/m68k/injections.scm b/runtime/queries/mlir/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/m68k/injections.scm
+++ b/runtime/queries/mlir/injections.scm
diff --git a/queries/mlir/locals.scm b/runtime/queries/mlir/locals.scm
index d29351d48..d29351d48 100644
--- a/queries/mlir/locals.scm
+++ b/runtime/queries/mlir/locals.scm
diff --git a/queries/muttrc/highlights.scm b/runtime/queries/muttrc/highlights.scm
index 27754cc53..27754cc53 100644
--- a/queries/muttrc/highlights.scm
+++ b/runtime/queries/muttrc/highlights.scm
diff --git a/queries/muttrc/injections.scm b/runtime/queries/muttrc/injections.scm
index 9c16ad15a..9c16ad15a 100644
--- a/queries/muttrc/injections.scm
+++ b/runtime/queries/muttrc/injections.scm
diff --git a/queries/nasm/highlights.scm b/runtime/queries/nasm/highlights.scm
index 02506de8b..02506de8b 100644
--- a/queries/nasm/highlights.scm
+++ b/runtime/queries/nasm/highlights.scm
diff --git a/queries/matlab/injections.scm b/runtime/queries/nasm/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/matlab/injections.scm
+++ b/runtime/queries/nasm/injections.scm
diff --git a/queries/nginx/folds.scm b/runtime/queries/nginx/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/nginx/folds.scm
+++ b/runtime/queries/nginx/folds.scm
diff --git a/queries/nginx/highlights.scm b/runtime/queries/nginx/highlights.scm
index 58fcc0b14..58fcc0b14 100644
--- a/queries/nginx/highlights.scm
+++ b/runtime/queries/nginx/highlights.scm
diff --git a/queries/mermaid/injections.scm b/runtime/queries/nginx/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/mermaid/injections.scm
+++ b/runtime/queries/nginx/injections.scm
diff --git a/queries/nickel/highlights.scm b/runtime/queries/nickel/highlights.scm
index 07673d797..07673d797 100644
--- a/queries/nickel/highlights.scm
+++ b/runtime/queries/nickel/highlights.scm
diff --git a/queries/nickel/indents.scm b/runtime/queries/nickel/indents.scm
index 8c6f740d9..8c6f740d9 100644
--- a/queries/nickel/indents.scm
+++ b/runtime/queries/nickel/indents.scm
diff --git a/queries/meson/injections.scm b/runtime/queries/nickel/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/meson/injections.scm
+++ b/runtime/queries/nickel/injections.scm
diff --git a/queries/nim/folds.scm b/runtime/queries/nim/folds.scm
index fa0581a72..fa0581a72 100644
--- a/queries/nim/folds.scm
+++ b/runtime/queries/nim/folds.scm
diff --git a/queries/nim/highlights.scm b/runtime/queries/nim/highlights.scm
index 722c0abdf..722c0abdf 100644
--- a/queries/nim/highlights.scm
+++ b/runtime/queries/nim/highlights.scm
diff --git a/queries/nim/injections.scm b/runtime/queries/nim/injections.scm
index da15fd84c..da15fd84c 100644
--- a/queries/nim/injections.scm
+++ b/runtime/queries/nim/injections.scm
diff --git a/queries/nim/locals.scm b/runtime/queries/nim/locals.scm
index d79fe728e..d79fe728e 100644
--- a/queries/nim/locals.scm
+++ b/runtime/queries/nim/locals.scm
diff --git a/queries/nim_format_string/highlights.scm b/runtime/queries/nim_format_string/highlights.scm
index fde9e4ba0..fde9e4ba0 100644
--- a/queries/nim_format_string/highlights.scm
+++ b/runtime/queries/nim_format_string/highlights.scm
diff --git a/queries/nim_format_string/injections.scm b/runtime/queries/nim_format_string/injections.scm
index 3efbfb854..3efbfb854 100644
--- a/queries/nim_format_string/injections.scm
+++ b/runtime/queries/nim_format_string/injections.scm
diff --git a/queries/ninja/folds.scm b/runtime/queries/ninja/folds.scm
index 341a8b8c1..341a8b8c1 100644
--- a/queries/ninja/folds.scm
+++ b/runtime/queries/ninja/folds.scm
diff --git a/queries/ninja/highlights.scm b/runtime/queries/ninja/highlights.scm
index 8323ee9e9..8323ee9e9 100644
--- a/queries/ninja/highlights.scm
+++ b/runtime/queries/ninja/highlights.scm
diff --git a/queries/ninja/indents.scm b/runtime/queries/ninja/indents.scm
index 80344cdfb..80344cdfb 100644
--- a/queries/ninja/indents.scm
+++ b/runtime/queries/ninja/indents.scm
diff --git a/queries/mlir/injections.scm b/runtime/queries/ninja/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/mlir/injections.scm
+++ b/runtime/queries/ninja/injections.scm
diff --git a/queries/nix/folds.scm b/runtime/queries/nix/folds.scm
index a89a5b24b..a89a5b24b 100644
--- a/queries/nix/folds.scm
+++ b/runtime/queries/nix/folds.scm
diff --git a/queries/nix/highlights.scm b/runtime/queries/nix/highlights.scm
index 24e685a32..24e685a32 100644
--- a/queries/nix/highlights.scm
+++ b/runtime/queries/nix/highlights.scm
diff --git a/queries/nix/indents.scm b/runtime/queries/nix/indents.scm
index 757511b6b..757511b6b 100644
--- a/queries/nix/indents.scm
+++ b/runtime/queries/nix/indents.scm
diff --git a/queries/nix/injections.scm b/runtime/queries/nix/injections.scm
index 26ba6e2da..26ba6e2da 100644
--- a/queries/nix/injections.scm
+++ b/runtime/queries/nix/injections.scm
diff --git a/queries/nix/locals.scm b/runtime/queries/nix/locals.scm
index 61cab2309..61cab2309 100644
--- a/queries/nix/locals.scm
+++ b/runtime/queries/nix/locals.scm
diff --git a/queries/nqc/folds.scm b/runtime/queries/nqc/folds.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/nqc/folds.scm
+++ b/runtime/queries/nqc/folds.scm
diff --git a/queries/nqc/highlights.scm b/runtime/queries/nqc/highlights.scm
index 0d0b770a8..0d0b770a8 100644
--- a/queries/nqc/highlights.scm
+++ b/runtime/queries/nqc/highlights.scm
diff --git a/queries/nqc/indents.scm b/runtime/queries/nqc/indents.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/nqc/indents.scm
+++ b/runtime/queries/nqc/indents.scm
diff --git a/queries/nqc/injections.scm b/runtime/queries/nqc/injections.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/nqc/injections.scm
+++ b/runtime/queries/nqc/injections.scm
diff --git a/queries/nqc/locals.scm b/runtime/queries/nqc/locals.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/nqc/locals.scm
+++ b/runtime/queries/nqc/locals.scm
diff --git a/queries/nu/folds.scm b/runtime/queries/nu/folds.scm
index abb538050..abb538050 100644
--- a/queries/nu/folds.scm
+++ b/runtime/queries/nu/folds.scm
diff --git a/queries/nu/highlights.scm b/runtime/queries/nu/highlights.scm
index f8342fab4..f8342fab4 100644
--- a/queries/nu/highlights.scm
+++ b/runtime/queries/nu/highlights.scm
diff --git a/queries/nu/indents.scm b/runtime/queries/nu/indents.scm
index 94b3fa72e..94b3fa72e 100644
--- a/queries/nu/indents.scm
+++ b/runtime/queries/nu/indents.scm
diff --git a/queries/nu/injections.scm b/runtime/queries/nu/injections.scm
index d5e70acb5..d5e70acb5 100644
--- a/queries/nu/injections.scm
+++ b/runtime/queries/nu/injections.scm
diff --git a/queries/objc/folds.scm b/runtime/queries/objc/folds.scm
index b922f8bf8..b922f8bf8 100644
--- a/queries/objc/folds.scm
+++ b/runtime/queries/objc/folds.scm
diff --git a/queries/objc/highlights.scm b/runtime/queries/objc/highlights.scm
index 0f412404f..0f412404f 100644
--- a/queries/objc/highlights.scm
+++ b/runtime/queries/objc/highlights.scm
diff --git a/queries/objc/indents.scm b/runtime/queries/objc/indents.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/objc/indents.scm
+++ b/runtime/queries/objc/indents.scm
diff --git a/queries/objc/injections.scm b/runtime/queries/objc/injections.scm
index 359420d10..359420d10 100644
--- a/queries/objc/injections.scm
+++ b/runtime/queries/objc/injections.scm
diff --git a/queries/objc/locals.scm b/runtime/queries/objc/locals.scm
index a5a5208ca..a5a5208ca 100644
--- a/queries/objc/locals.scm
+++ b/runtime/queries/objc/locals.scm
diff --git a/queries/objdump/highlights.scm b/runtime/queries/objdump/highlights.scm
index b73e18803..b73e18803 100644
--- a/queries/objdump/highlights.scm
+++ b/runtime/queries/objdump/highlights.scm
diff --git a/queries/objdump/injections.scm b/runtime/queries/objdump/injections.scm
index 9fb52dafe..9fb52dafe 100644
--- a/queries/objdump/injections.scm
+++ b/runtime/queries/objdump/injections.scm
diff --git a/queries/ocaml/folds.scm b/runtime/queries/ocaml/folds.scm
index 1d45dbbde..1d45dbbde 100644
--- a/queries/ocaml/folds.scm
+++ b/runtime/queries/ocaml/folds.scm
diff --git a/queries/ocaml/highlights.scm b/runtime/queries/ocaml/highlights.scm
index 891ff7bd5..891ff7bd5 100644
--- a/queries/ocaml/highlights.scm
+++ b/runtime/queries/ocaml/highlights.scm
diff --git a/queries/ocaml/indents.scm b/runtime/queries/ocaml/indents.scm
index d7f05367d..d7f05367d 100644
--- a/queries/ocaml/indents.scm
+++ b/runtime/queries/ocaml/indents.scm
diff --git a/queries/nasm/injections.scm b/runtime/queries/ocaml/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/nasm/injections.scm
+++ b/runtime/queries/ocaml/injections.scm
diff --git a/queries/ocaml/locals.scm b/runtime/queries/ocaml/locals.scm
index 38d392609..38d392609 100644
--- a/queries/ocaml/locals.scm
+++ b/runtime/queries/ocaml/locals.scm
diff --git a/queries/ocaml_interface/folds.scm b/runtime/queries/ocaml_interface/folds.scm
index 6d3dfbcf2..6d3dfbcf2 100644
--- a/queries/ocaml_interface/folds.scm
+++ b/runtime/queries/ocaml_interface/folds.scm
diff --git a/queries/ocaml_interface/highlights.scm b/runtime/queries/ocaml_interface/highlights.scm
index b623e432b..b623e432b 100644
--- a/queries/ocaml_interface/highlights.scm
+++ b/runtime/queries/ocaml_interface/highlights.scm
diff --git a/queries/ocaml_interface/indents.scm b/runtime/queries/ocaml_interface/indents.scm
index 6d3dfbcf2..6d3dfbcf2 100644
--- a/queries/ocaml_interface/indents.scm
+++ b/runtime/queries/ocaml_interface/indents.scm
diff --git a/queries/ocaml_interface/injections.scm b/runtime/queries/ocaml_interface/injections.scm
index 6d3dfbcf2..6d3dfbcf2 100644
--- a/queries/ocaml_interface/injections.scm
+++ b/runtime/queries/ocaml_interface/injections.scm
diff --git a/queries/ocaml_interface/locals.scm b/runtime/queries/ocaml_interface/locals.scm
index 6d3dfbcf2..6d3dfbcf2 100644
--- a/queries/ocaml_interface/locals.scm
+++ b/runtime/queries/ocaml_interface/locals.scm
diff --git a/queries/ocamllex/highlights.scm b/runtime/queries/ocamllex/highlights.scm
index 2556aa4c2..2556aa4c2 100644
--- a/queries/ocamllex/highlights.scm
+++ b/runtime/queries/ocamllex/highlights.scm
diff --git a/queries/ocamllex/injections.scm b/runtime/queries/ocamllex/injections.scm
index ecc577d40..ecc577d40 100644
--- a/queries/ocamllex/injections.scm
+++ b/runtime/queries/ocamllex/injections.scm
diff --git a/queries/odin/folds.scm b/runtime/queries/odin/folds.scm
index 5367cb5f2..5367cb5f2 100644
--- a/queries/odin/folds.scm
+++ b/runtime/queries/odin/folds.scm
diff --git a/queries/odin/highlights.scm b/runtime/queries/odin/highlights.scm
index b7e2176a8..b7e2176a8 100644
--- a/queries/odin/highlights.scm
+++ b/runtime/queries/odin/highlights.scm
diff --git a/queries/odin/indents.scm b/runtime/queries/odin/indents.scm
index 9c8632978..9c8632978 100644
--- a/queries/odin/indents.scm
+++ b/runtime/queries/odin/indents.scm
diff --git a/queries/nginx/injections.scm b/runtime/queries/odin/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/nginx/injections.scm
+++ b/runtime/queries/odin/injections.scm
diff --git a/queries/odin/locals.scm b/runtime/queries/odin/locals.scm
index 3e794b2f6..3e794b2f6 100644
--- a/queries/odin/locals.scm
+++ b/runtime/queries/odin/locals.scm
diff --git a/queries/pascal/folds.scm b/runtime/queries/pascal/folds.scm
index 8fcde3ac0..8fcde3ac0 100644
--- a/queries/pascal/folds.scm
+++ b/runtime/queries/pascal/folds.scm
diff --git a/queries/pascal/highlights.scm b/runtime/queries/pascal/highlights.scm
index d6014ee1d..d6014ee1d 100644
--- a/queries/pascal/highlights.scm
+++ b/runtime/queries/pascal/highlights.scm
diff --git a/queries/pascal/indents.scm b/runtime/queries/pascal/indents.scm
index 879e7b86f..879e7b86f 100644
--- a/queries/pascal/indents.scm
+++ b/runtime/queries/pascal/indents.scm
diff --git a/queries/pascal/injections.scm b/runtime/queries/pascal/injections.scm
index 1f6e475c8..1f6e475c8 100644
--- a/queries/pascal/injections.scm
+++ b/runtime/queries/pascal/injections.scm
diff --git a/queries/pascal/locals.scm b/runtime/queries/pascal/locals.scm
index d74d54ad4..d74d54ad4 100644
--- a/queries/pascal/locals.scm
+++ b/runtime/queries/pascal/locals.scm
diff --git a/queries/passwd/highlights.scm b/runtime/queries/passwd/highlights.scm
index 51bb8fc5f..51bb8fc5f 100644
--- a/queries/passwd/highlights.scm
+++ b/runtime/queries/passwd/highlights.scm
diff --git a/queries/pem/folds.scm b/runtime/queries/pem/folds.scm
index f0cdabd26..f0cdabd26 100644
--- a/queries/pem/folds.scm
+++ b/runtime/queries/pem/folds.scm
diff --git a/queries/pem/highlights.scm b/runtime/queries/pem/highlights.scm
index b8dbb0f11..b8dbb0f11 100644
--- a/queries/pem/highlights.scm
+++ b/runtime/queries/pem/highlights.scm
diff --git a/queries/nickel/injections.scm b/runtime/queries/pem/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/nickel/injections.scm
+++ b/runtime/queries/pem/injections.scm
diff --git a/queries/perl/folds.scm b/runtime/queries/perl/folds.scm
index a457a0a50..a457a0a50 100644
--- a/queries/perl/folds.scm
+++ b/runtime/queries/perl/folds.scm
diff --git a/queries/perl/highlights.scm b/runtime/queries/perl/highlights.scm
index d52baab44..d52baab44 100644
--- a/queries/perl/highlights.scm
+++ b/runtime/queries/perl/highlights.scm
diff --git a/queries/perl/injections.scm b/runtime/queries/perl/injections.scm
index ec11e9013..ec11e9013 100644
--- a/queries/perl/injections.scm
+++ b/runtime/queries/perl/injections.scm
diff --git a/queries/php/folds.scm b/runtime/queries/php/folds.scm
index f32463888..f32463888 100644
--- a/queries/php/folds.scm
+++ b/runtime/queries/php/folds.scm
diff --git a/queries/php/highlights.scm b/runtime/queries/php/highlights.scm
index f32463888..f32463888 100644
--- a/queries/php/highlights.scm
+++ b/runtime/queries/php/highlights.scm
diff --git a/queries/php/indents.scm b/runtime/queries/php/indents.scm
index f32463888..f32463888 100644
--- a/queries/php/indents.scm
+++ b/runtime/queries/php/indents.scm
diff --git a/queries/php/injections.scm b/runtime/queries/php/injections.scm
index 3ccbb2bb4..3ccbb2bb4 100644
--- a/queries/php/injections.scm
+++ b/runtime/queries/php/injections.scm
diff --git a/queries/php/locals.scm b/runtime/queries/php/locals.scm
index f32463888..f32463888 100644
--- a/queries/php/locals.scm
+++ b/runtime/queries/php/locals.scm
diff --git a/queries/php_only/folds.scm b/runtime/queries/php_only/folds.scm
index 43453b174..43453b174 100644
--- a/queries/php_only/folds.scm
+++ b/runtime/queries/php_only/folds.scm
diff --git a/queries/php_only/highlights.scm b/runtime/queries/php_only/highlights.scm
index 2d473dd0c..2d473dd0c 100644
--- a/queries/php_only/highlights.scm
+++ b/runtime/queries/php_only/highlights.scm
diff --git a/queries/php_only/indents.scm b/runtime/queries/php_only/indents.scm
index 1755d4285..1755d4285 100644
--- a/queries/php_only/indents.scm
+++ b/runtime/queries/php_only/indents.scm
diff --git a/queries/php_only/injections.scm b/runtime/queries/php_only/injections.scm
index 368177643..368177643 100644
--- a/queries/php_only/injections.scm
+++ b/runtime/queries/php_only/injections.scm
diff --git a/queries/php_only/locals.scm b/runtime/queries/php_only/locals.scm
index 6739b383d..6739b383d 100644
--- a/queries/php_only/locals.scm
+++ b/runtime/queries/php_only/locals.scm
diff --git a/queries/phpdoc/highlights.scm b/runtime/queries/phpdoc/highlights.scm
index 3ebe4a66e..3ebe4a66e 100644
--- a/queries/phpdoc/highlights.scm
+++ b/runtime/queries/phpdoc/highlights.scm
diff --git a/queries/pioasm/highlights.scm b/runtime/queries/pioasm/highlights.scm
index 325005928..325005928 100644
--- a/queries/pioasm/highlights.scm
+++ b/runtime/queries/pioasm/highlights.scm
diff --git a/queries/pioasm/injections.scm b/runtime/queries/pioasm/injections.scm
index 84d17cf2d..84d17cf2d 100644
--- a/queries/pioasm/injections.scm
+++ b/runtime/queries/pioasm/injections.scm
diff --git a/queries/po/folds.scm b/runtime/queries/po/folds.scm
index fd1fb1ebf..fd1fb1ebf 100644
--- a/queries/po/folds.scm
+++ b/runtime/queries/po/folds.scm
diff --git a/queries/po/highlights.scm b/runtime/queries/po/highlights.scm
index 0cc92e72a..0cc92e72a 100644
--- a/queries/po/highlights.scm
+++ b/runtime/queries/po/highlights.scm
diff --git a/queries/ninja/injections.scm b/runtime/queries/po/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/ninja/injections.scm
+++ b/runtime/queries/po/injections.scm
diff --git a/queries/pod/highlights.scm b/runtime/queries/pod/highlights.scm
index 8252ac1ba..8252ac1ba 100644
--- a/queries/pod/highlights.scm
+++ b/runtime/queries/pod/highlights.scm
diff --git a/queries/poe_filter/folds.scm b/runtime/queries/poe_filter/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/poe_filter/folds.scm
+++ b/runtime/queries/poe_filter/folds.scm
diff --git a/queries/poe_filter/highlights.scm b/runtime/queries/poe_filter/highlights.scm
index b0c715ac9..b0c715ac9 100644
--- a/queries/poe_filter/highlights.scm
+++ b/runtime/queries/poe_filter/highlights.scm
diff --git a/queries/poe_filter/indents.scm b/runtime/queries/poe_filter/indents.scm
index 78b7a2ed1..78b7a2ed1 100644
--- a/queries/poe_filter/indents.scm
+++ b/runtime/queries/poe_filter/indents.scm
diff --git a/queries/ocaml/injections.scm b/runtime/queries/poe_filter/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/ocaml/injections.scm
+++ b/runtime/queries/poe_filter/injections.scm
diff --git a/queries/pony/folds.scm b/runtime/queries/pony/folds.scm
index 95b76eb69..95b76eb69 100644
--- a/queries/pony/folds.scm
+++ b/runtime/queries/pony/folds.scm
diff --git a/queries/pony/highlights.scm b/runtime/queries/pony/highlights.scm
index f3d4b5dca..f3d4b5dca 100644
--- a/queries/pony/highlights.scm
+++ b/runtime/queries/pony/highlights.scm
diff --git a/queries/pony/indents.scm b/runtime/queries/pony/indents.scm
index 3bddd29de..3bddd29de 100644
--- a/queries/pony/indents.scm
+++ b/runtime/queries/pony/indents.scm
diff --git a/queries/pony/injections.scm b/runtime/queries/pony/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/pony/injections.scm
+++ b/runtime/queries/pony/injections.scm
diff --git a/queries/pony/locals.scm b/runtime/queries/pony/locals.scm
index a27e501a3..a27e501a3 100644
--- a/queries/pony/locals.scm
+++ b/runtime/queries/pony/locals.scm
diff --git a/queries/powershell/folds.scm b/runtime/queries/powershell/folds.scm
index d87e3f688..d87e3f688 100644
--- a/queries/powershell/folds.scm
+++ b/runtime/queries/powershell/folds.scm
diff --git a/queries/powershell/highlights.scm b/runtime/queries/powershell/highlights.scm
index 6081e8f1b..6081e8f1b 100644
--- a/queries/powershell/highlights.scm
+++ b/runtime/queries/powershell/highlights.scm
diff --git a/queries/powershell/indents.scm b/runtime/queries/powershell/indents.scm
index 3be2ed161..3be2ed161 100644
--- a/queries/powershell/indents.scm
+++ b/runtime/queries/powershell/indents.scm
diff --git a/queries/powershell/injections.scm b/runtime/queries/powershell/injections.scm
index 677e8b267..677e8b267 100644
--- a/queries/powershell/injections.scm
+++ b/runtime/queries/powershell/injections.scm
diff --git a/queries/powershell/locals.scm b/runtime/queries/powershell/locals.scm
index e98410992..e98410992 100644
--- a/queries/powershell/locals.scm
+++ b/runtime/queries/powershell/locals.scm
diff --git a/queries/printf/highlights.scm b/runtime/queries/printf/highlights.scm
index db5ef9a3f..db5ef9a3f 100644
--- a/queries/printf/highlights.scm
+++ b/runtime/queries/printf/highlights.scm
diff --git a/queries/prisma/folds.scm b/runtime/queries/prisma/folds.scm
index 73be36016..73be36016 100644
--- a/queries/prisma/folds.scm
+++ b/runtime/queries/prisma/folds.scm
diff --git a/queries/prisma/highlights.scm b/runtime/queries/prisma/highlights.scm
index 9d2d1934e..9d2d1934e 100644
--- a/queries/prisma/highlights.scm
+++ b/runtime/queries/prisma/highlights.scm
diff --git a/queries/prisma/injections.scm b/runtime/queries/prisma/injections.scm
index ac427dd68..ac427dd68 100644
--- a/queries/prisma/injections.scm
+++ b/runtime/queries/prisma/injections.scm
diff --git a/queries/problog/folds.scm b/runtime/queries/problog/folds.scm
index 768718207..768718207 100644
--- a/queries/problog/folds.scm
+++ b/runtime/queries/problog/folds.scm
diff --git a/queries/problog/highlights.scm b/runtime/queries/problog/highlights.scm
index de1715662..de1715662 100644
--- a/queries/problog/highlights.scm
+++ b/runtime/queries/problog/highlights.scm
diff --git a/queries/problog/indents.scm b/runtime/queries/problog/indents.scm
index 768718207..768718207 100644
--- a/queries/problog/indents.scm
+++ b/runtime/queries/problog/indents.scm
diff --git a/queries/problog/injections.scm b/runtime/queries/problog/injections.scm
index 768718207..768718207 100644
--- a/queries/problog/injections.scm
+++ b/runtime/queries/problog/injections.scm
diff --git a/queries/prolog/folds.scm b/runtime/queries/prolog/folds.scm
index 70a401511..70a401511 100644
--- a/queries/prolog/folds.scm
+++ b/runtime/queries/prolog/folds.scm
diff --git a/queries/prolog/highlights.scm b/runtime/queries/prolog/highlights.scm
index fc89b6fef..fc89b6fef 100644
--- a/queries/prolog/highlights.scm
+++ b/runtime/queries/prolog/highlights.scm
diff --git a/queries/prolog/indents.scm b/runtime/queries/prolog/indents.scm
index a7f9b0383..a7f9b0383 100644
--- a/queries/prolog/indents.scm
+++ b/runtime/queries/prolog/indents.scm
diff --git a/queries/odin/injections.scm b/runtime/queries/prolog/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/odin/injections.scm
+++ b/runtime/queries/prolog/injections.scm
diff --git a/queries/promql/highlights.scm b/runtime/queries/promql/highlights.scm
index a99fcdd05..a99fcdd05 100644
--- a/queries/promql/highlights.scm
+++ b/runtime/queries/promql/highlights.scm
diff --git a/queries/promql/injections.scm b/runtime/queries/promql/injections.scm
index 791aba3d8..791aba3d8 100644
--- a/queries/promql/injections.scm
+++ b/runtime/queries/promql/injections.scm
diff --git a/queries/properties/highlights.scm b/runtime/queries/properties/highlights.scm
index b9390be8c..b9390be8c 100644
--- a/queries/properties/highlights.scm
+++ b/runtime/queries/properties/highlights.scm
diff --git a/queries/pem/injections.scm b/runtime/queries/properties/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/pem/injections.scm
+++ b/runtime/queries/properties/injections.scm
diff --git a/queries/properties/locals.scm b/runtime/queries/properties/locals.scm
index 91a3b9a86..91a3b9a86 100644
--- a/queries/properties/locals.scm
+++ b/runtime/queries/properties/locals.scm
diff --git a/queries/proto/folds.scm b/runtime/queries/proto/folds.scm
index 645ac1819..645ac1819 100644
--- a/queries/proto/folds.scm
+++ b/runtime/queries/proto/folds.scm
diff --git a/queries/proto/highlights.scm b/runtime/queries/proto/highlights.scm
index 51f44a754..51f44a754 100644
--- a/queries/proto/highlights.scm
+++ b/runtime/queries/proto/highlights.scm
diff --git a/queries/proto/indents.scm b/runtime/queries/proto/indents.scm
index 4307b2a19..4307b2a19 100644
--- a/queries/proto/indents.scm
+++ b/runtime/queries/proto/indents.scm
diff --git a/queries/po/injections.scm b/runtime/queries/proto/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/po/injections.scm
+++ b/runtime/queries/proto/injections.scm
diff --git a/queries/prql/highlights.scm b/runtime/queries/prql/highlights.scm
index d24777dc0..d24777dc0 100644
--- a/queries/prql/highlights.scm
+++ b/runtime/queries/prql/highlights.scm
diff --git a/queries/prql/injections.scm b/runtime/queries/prql/injections.scm
index e6cbeda35..e6cbeda35 100644
--- a/queries/prql/injections.scm
+++ b/runtime/queries/prql/injections.scm
diff --git a/queries/psv/highlights.scm b/runtime/queries/psv/highlights.scm
index b7303fe0b..b7303fe0b 100644
--- a/queries/psv/highlights.scm
+++ b/runtime/queries/psv/highlights.scm
diff --git a/queries/pug/highlights.scm b/runtime/queries/pug/highlights.scm
index e32cb21e1..e32cb21e1 100644
--- a/queries/pug/highlights.scm
+++ b/runtime/queries/pug/highlights.scm
diff --git a/queries/pug/injections.scm b/runtime/queries/pug/injections.scm
index 0c01e47eb..0c01e47eb 100644
--- a/queries/pug/injections.scm
+++ b/runtime/queries/pug/injections.scm
diff --git a/queries/puppet/folds.scm b/runtime/queries/puppet/folds.scm
index 78800fe4c..78800fe4c 100644
--- a/queries/puppet/folds.scm
+++ b/runtime/queries/puppet/folds.scm
diff --git a/queries/puppet/highlights.scm b/runtime/queries/puppet/highlights.scm
index 10621930f..10621930f 100644
--- a/queries/puppet/highlights.scm
+++ b/runtime/queries/puppet/highlights.scm
diff --git a/queries/puppet/indents.scm b/runtime/queries/puppet/indents.scm
index 71c882f33..71c882f33 100644
--- a/queries/puppet/indents.scm
+++ b/runtime/queries/puppet/indents.scm
diff --git a/queries/puppet/injections.scm b/runtime/queries/puppet/injections.scm
index caa10a2b0..caa10a2b0 100644
--- a/queries/puppet/injections.scm
+++ b/runtime/queries/puppet/injections.scm
diff --git a/queries/puppet/locals.scm b/runtime/queries/puppet/locals.scm
index f145fffbc..f145fffbc 100644
--- a/queries/puppet/locals.scm
+++ b/runtime/queries/puppet/locals.scm
diff --git a/queries/purescript/highlights.scm b/runtime/queries/purescript/highlights.scm
index 02426b0ab..02426b0ab 100644
--- a/queries/purescript/highlights.scm
+++ b/runtime/queries/purescript/highlights.scm
diff --git a/queries/poe_filter/injections.scm b/runtime/queries/purescript/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/poe_filter/injections.scm
+++ b/runtime/queries/purescript/injections.scm
diff --git a/queries/purescript/locals.scm b/runtime/queries/purescript/locals.scm
index 16265231d..16265231d 100644
--- a/queries/purescript/locals.scm
+++ b/runtime/queries/purescript/locals.scm
diff --git a/queries/pymanifest/highlights.scm b/runtime/queries/pymanifest/highlights.scm
index 11d8b605f..11d8b605f 100644
--- a/queries/pymanifest/highlights.scm
+++ b/runtime/queries/pymanifest/highlights.scm
diff --git a/queries/prolog/injections.scm b/runtime/queries/pymanifest/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/prolog/injections.scm
+++ b/runtime/queries/pymanifest/injections.scm
diff --git a/queries/python/folds.scm b/runtime/queries/python/folds.scm
index ecb9352d7..ecb9352d7 100644
--- a/queries/python/folds.scm
+++ b/runtime/queries/python/folds.scm
diff --git a/queries/python/highlights.scm b/runtime/queries/python/highlights.scm
index 00250de1b..00250de1b 100644
--- a/queries/python/highlights.scm
+++ b/runtime/queries/python/highlights.scm
diff --git a/queries/python/indents.scm b/runtime/queries/python/indents.scm
index 2414812a7..2414812a7 100644
--- a/queries/python/indents.scm
+++ b/runtime/queries/python/indents.scm
diff --git a/queries/python/injections.scm b/runtime/queries/python/injections.scm
index bbc924be4..bbc924be4 100644
--- a/queries/python/injections.scm
+++ b/runtime/queries/python/injections.scm
diff --git a/queries/python/locals.scm b/runtime/queries/python/locals.scm
index b012e9eee..b012e9eee 100644
--- a/queries/python/locals.scm
+++ b/runtime/queries/python/locals.scm
diff --git a/queries/ql/folds.scm b/runtime/queries/ql/folds.scm
index eb7f27273..eb7f27273 100644
--- a/queries/ql/folds.scm
+++ b/runtime/queries/ql/folds.scm
diff --git a/queries/ql/highlights.scm b/runtime/queries/ql/highlights.scm
index f42812068..f42812068 100644
--- a/queries/ql/highlights.scm
+++ b/runtime/queries/ql/highlights.scm
diff --git a/queries/ql/indents.scm b/runtime/queries/ql/indents.scm
index 1a4a1bdea..1a4a1bdea 100644
--- a/queries/ql/indents.scm
+++ b/runtime/queries/ql/indents.scm
diff --git a/queries/ql/injections.scm b/runtime/queries/ql/injections.scm
index 090116c89..090116c89 100644
--- a/queries/ql/injections.scm
+++ b/runtime/queries/ql/injections.scm
diff --git a/queries/ql/locals.scm b/runtime/queries/ql/locals.scm
index 239420151..239420151 100644
--- a/queries/ql/locals.scm
+++ b/runtime/queries/ql/locals.scm
diff --git a/queries/qmldir/highlights.scm b/runtime/queries/qmldir/highlights.scm
index 780dbb3d4..780dbb3d4 100644
--- a/queries/qmldir/highlights.scm
+++ b/runtime/queries/qmldir/highlights.scm
diff --git a/queries/properties/injections.scm b/runtime/queries/qmldir/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/properties/injections.scm
+++ b/runtime/queries/qmldir/injections.scm
diff --git a/queries/qmljs/folds.scm b/runtime/queries/qmljs/folds.scm
index 9b917993e..9b917993e 100644
--- a/queries/qmljs/folds.scm
+++ b/runtime/queries/qmljs/folds.scm
diff --git a/queries/qmljs/highlights.scm b/runtime/queries/qmljs/highlights.scm
index 27f332028..27f332028 100644
--- a/queries/qmljs/highlights.scm
+++ b/runtime/queries/qmljs/highlights.scm
diff --git a/queries/qmljs/injections.scm b/runtime/queries/qmljs/injections.scm
index 04328f099..04328f099 100644
--- a/queries/qmljs/injections.scm
+++ b/runtime/queries/qmljs/injections.scm
diff --git a/queries/query/folds.scm b/runtime/queries/query/folds.scm
index 47dd96512..47dd96512 100644
--- a/queries/query/folds.scm
+++ b/runtime/queries/query/folds.scm
diff --git a/queries/query/highlights.scm b/runtime/queries/query/highlights.scm
index cbd192a8f..cbd192a8f 100644
--- a/queries/query/highlights.scm
+++ b/runtime/queries/query/highlights.scm
diff --git a/queries/query/indents.scm b/runtime/queries/query/indents.scm
index 5cea97e1e..5cea97e1e 100644
--- a/queries/query/indents.scm
+++ b/runtime/queries/query/indents.scm
diff --git a/queries/query/injections.scm b/runtime/queries/query/injections.scm
index 759f9b2e2..759f9b2e2 100644
--- a/queries/query/injections.scm
+++ b/runtime/queries/query/injections.scm
diff --git a/queries/query/locals.scm b/runtime/queries/query/locals.scm
index eca196aba..eca196aba 100644
--- a/queries/query/locals.scm
+++ b/runtime/queries/query/locals.scm
diff --git a/queries/r/highlights.scm b/runtime/queries/r/highlights.scm
index c849dd838..c849dd838 100644
--- a/queries/r/highlights.scm
+++ b/runtime/queries/r/highlights.scm
diff --git a/queries/r/indents.scm b/runtime/queries/r/indents.scm
index 79dbe5167..79dbe5167 100644
--- a/queries/r/indents.scm
+++ b/runtime/queries/r/indents.scm
diff --git a/queries/proto/injections.scm b/runtime/queries/r/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/proto/injections.scm
+++ b/runtime/queries/r/injections.scm
diff --git a/queries/r/locals.scm b/runtime/queries/r/locals.scm
index 3377552c8..3377552c8 100644
--- a/queries/r/locals.scm
+++ b/runtime/queries/r/locals.scm
diff --git a/queries/racket/folds.scm b/runtime/queries/racket/folds.scm
index 115809a77..115809a77 100644
--- a/queries/racket/folds.scm
+++ b/runtime/queries/racket/folds.scm
diff --git a/queries/racket/highlights.scm b/runtime/queries/racket/highlights.scm
index 9e3066743..9e3066743 100644
--- a/queries/racket/highlights.scm
+++ b/runtime/queries/racket/highlights.scm
diff --git a/queries/racket/injections.scm b/runtime/queries/racket/injections.scm
index dc8982053..dc8982053 100644
--- a/queries/racket/injections.scm
+++ b/runtime/queries/racket/injections.scm
diff --git a/queries/ralph/highlights.scm b/runtime/queries/ralph/highlights.scm
index e56ffa5a2..e56ffa5a2 100644
--- a/queries/ralph/highlights.scm
+++ b/runtime/queries/ralph/highlights.scm
diff --git a/queries/ralph/injections.scm b/runtime/queries/ralph/injections.scm
index 36849c873..36849c873 100644
--- a/queries/ralph/injections.scm
+++ b/runtime/queries/ralph/injections.scm
diff --git a/queries/rasi/folds.scm b/runtime/queries/rasi/folds.scm
index 2fd6c9fa7..2fd6c9fa7 100644
--- a/queries/rasi/folds.scm
+++ b/runtime/queries/rasi/folds.scm
diff --git a/queries/rasi/highlights.scm b/runtime/queries/rasi/highlights.scm
index d095cef63..d095cef63 100644
--- a/queries/rasi/highlights.scm
+++ b/runtime/queries/rasi/highlights.scm
diff --git a/queries/rasi/indents.scm b/runtime/queries/rasi/indents.scm
index 849d8aeac..849d8aeac 100644
--- a/queries/rasi/indents.scm
+++ b/runtime/queries/rasi/indents.scm
diff --git a/queries/purescript/injections.scm b/runtime/queries/rasi/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/purescript/injections.scm
+++ b/runtime/queries/rasi/injections.scm
diff --git a/queries/rasi/locals.scm b/runtime/queries/rasi/locals.scm
index 9210de6ea..9210de6ea 100644
--- a/queries/rasi/locals.scm
+++ b/runtime/queries/rasi/locals.scm
diff --git a/queries/razor/folds.scm b/runtime/queries/razor/folds.scm
index f026cb8ec..f026cb8ec 100644
--- a/queries/razor/folds.scm
+++ b/runtime/queries/razor/folds.scm
diff --git a/queries/razor/highlights.scm b/runtime/queries/razor/highlights.scm
index 2050bde9c..2050bde9c 100644
--- a/queries/razor/highlights.scm
+++ b/runtime/queries/razor/highlights.scm
diff --git a/queries/razor/injections.scm b/runtime/queries/razor/injections.scm
index f73839bd6..f73839bd6 100644
--- a/queries/razor/injections.scm
+++ b/runtime/queries/razor/injections.scm
diff --git a/queries/rbs/folds.scm b/runtime/queries/rbs/folds.scm
index ff8e7c588..ff8e7c588 100644
--- a/queries/rbs/folds.scm
+++ b/runtime/queries/rbs/folds.scm
diff --git a/queries/rbs/highlights.scm b/runtime/queries/rbs/highlights.scm
index 9de9c427d..9de9c427d 100644
--- a/queries/rbs/highlights.scm
+++ b/runtime/queries/rbs/highlights.scm
diff --git a/queries/rbs/indents.scm b/runtime/queries/rbs/indents.scm
index f6da5b10b..f6da5b10b 100644
--- a/queries/rbs/indents.scm
+++ b/runtime/queries/rbs/indents.scm
diff --git a/queries/pymanifest/injections.scm b/runtime/queries/rbs/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/pymanifest/injections.scm
+++ b/runtime/queries/rbs/injections.scm
diff --git a/queries/re2c/folds.scm b/runtime/queries/re2c/folds.scm
index b4cf5f24e..b4cf5f24e 100644
--- a/queries/re2c/folds.scm
+++ b/runtime/queries/re2c/folds.scm
diff --git a/queries/re2c/highlights.scm b/runtime/queries/re2c/highlights.scm
index c89c30745..c89c30745 100644
--- a/queries/re2c/highlights.scm
+++ b/runtime/queries/re2c/highlights.scm
diff --git a/queries/re2c/indents.scm b/runtime/queries/re2c/indents.scm
index 31ccf2a0f..31ccf2a0f 100644
--- a/queries/re2c/indents.scm
+++ b/runtime/queries/re2c/indents.scm
diff --git a/queries/re2c/injections.scm b/runtime/queries/re2c/injections.scm
index f0cb1a989..f0cb1a989 100644
--- a/queries/re2c/injections.scm
+++ b/runtime/queries/re2c/injections.scm
diff --git a/queries/re2c/locals.scm b/runtime/queries/re2c/locals.scm
index eea1ede89..eea1ede89 100644
--- a/queries/re2c/locals.scm
+++ b/runtime/queries/re2c/locals.scm
diff --git a/queries/readline/folds.scm b/runtime/queries/readline/folds.scm
index 57c9bc7da..57c9bc7da 100644
--- a/queries/readline/folds.scm
+++ b/runtime/queries/readline/folds.scm
diff --git a/queries/readline/highlights.scm b/runtime/queries/readline/highlights.scm
index 570e55b3d..570e55b3d 100644
--- a/queries/readline/highlights.scm
+++ b/runtime/queries/readline/highlights.scm
diff --git a/queries/readline/indents.scm b/runtime/queries/readline/indents.scm
index d7dc67421..d7dc67421 100644
--- a/queries/readline/indents.scm
+++ b/runtime/queries/readline/indents.scm
diff --git a/queries/qmldir/injections.scm b/runtime/queries/readline/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/qmldir/injections.scm
+++ b/runtime/queries/readline/injections.scm
diff --git a/queries/regex/highlights.scm b/runtime/queries/regex/highlights.scm
index 350d1d0f3..350d1d0f3 100644
--- a/queries/regex/highlights.scm
+++ b/runtime/queries/regex/highlights.scm
diff --git a/queries/rego/highlights.scm b/runtime/queries/rego/highlights.scm
index 3cc32949d..3cc32949d 100644
--- a/queries/rego/highlights.scm
+++ b/runtime/queries/rego/highlights.scm
diff --git a/queries/r/injections.scm b/runtime/queries/rego/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/r/injections.scm
+++ b/runtime/queries/rego/injections.scm
diff --git a/queries/requirements/highlights.scm b/runtime/queries/requirements/highlights.scm
index a04922a26..a04922a26 100644
--- a/queries/requirements/highlights.scm
+++ b/runtime/queries/requirements/highlights.scm
diff --git a/queries/rasi/injections.scm b/runtime/queries/requirements/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/rasi/injections.scm
+++ b/runtime/queries/requirements/injections.scm
diff --git a/queries/rescript/folds.scm b/runtime/queries/rescript/folds.scm
index 4e658a57c..4e658a57c 100644
--- a/queries/rescript/folds.scm
+++ b/runtime/queries/rescript/folds.scm
diff --git a/queries/rescript/highlights.scm b/runtime/queries/rescript/highlights.scm
index e7cba9be8..e7cba9be8 100644
--- a/queries/rescript/highlights.scm
+++ b/runtime/queries/rescript/highlights.scm
diff --git a/queries/rescript/indents.scm b/runtime/queries/rescript/indents.scm
index 0b635dd4d..0b635dd4d 100644
--- a/queries/rescript/indents.scm
+++ b/runtime/queries/rescript/indents.scm
diff --git a/queries/rescript/injections.scm b/runtime/queries/rescript/injections.scm
index 434404bef..434404bef 100644
--- a/queries/rescript/injections.scm
+++ b/runtime/queries/rescript/injections.scm
diff --git a/queries/rescript/locals.scm b/runtime/queries/rescript/locals.scm
index 10a663bd7..10a663bd7 100644
--- a/queries/rescript/locals.scm
+++ b/runtime/queries/rescript/locals.scm
diff --git a/queries/rnoweb/folds.scm b/runtime/queries/rnoweb/folds.scm
index 893758ccd..893758ccd 100644
--- a/queries/rnoweb/folds.scm
+++ b/runtime/queries/rnoweb/folds.scm
diff --git a/queries/rnoweb/highlights.scm b/runtime/queries/rnoweb/highlights.scm
index 81afaf101..81afaf101 100644
--- a/queries/rnoweb/highlights.scm
+++ b/runtime/queries/rnoweb/highlights.scm
diff --git a/queries/rnoweb/injections.scm b/runtime/queries/rnoweb/injections.scm
index 123cfb8a3..123cfb8a3 100644
--- a/queries/rnoweb/injections.scm
+++ b/runtime/queries/rnoweb/injections.scm
diff --git a/queries/robot/folds.scm b/runtime/queries/robot/folds.scm
index 948f8a17d..948f8a17d 100644
--- a/queries/robot/folds.scm
+++ b/runtime/queries/robot/folds.scm
diff --git a/queries/robot/highlights.scm b/runtime/queries/robot/highlights.scm
index a9c545b8a..a9c545b8a 100644
--- a/queries/robot/highlights.scm
+++ b/runtime/queries/robot/highlights.scm
diff --git a/queries/robot/indents.scm b/runtime/queries/robot/indents.scm
index 457fbff66..457fbff66 100644
--- a/queries/robot/indents.scm
+++ b/runtime/queries/robot/indents.scm
diff --git a/queries/robot/injections.scm b/runtime/queries/robot/injections.scm
index 56e37005e..56e37005e 100644
--- a/queries/robot/injections.scm
+++ b/runtime/queries/robot/injections.scm
diff --git a/queries/robots/highlights.scm b/runtime/queries/robots/highlights.scm
index a2c55c74f..a2c55c74f 100644
--- a/queries/robots/highlights.scm
+++ b/runtime/queries/robots/highlights.scm
diff --git a/queries/rbs/injections.scm b/runtime/queries/robots/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/rbs/injections.scm
+++ b/runtime/queries/robots/injections.scm
diff --git a/queries/roc/highlights.scm b/runtime/queries/roc/highlights.scm
index 4993017dc..4993017dc 100644
--- a/queries/roc/highlights.scm
+++ b/runtime/queries/roc/highlights.scm
diff --git a/queries/roc/indents.scm b/runtime/queries/roc/indents.scm
index 9a08f2074..9a08f2074 100644
--- a/queries/roc/indents.scm
+++ b/runtime/queries/roc/indents.scm
diff --git a/queries/roc/injections.scm b/runtime/queries/roc/injections.scm
index 5bc7576f8..5bc7576f8 100644
--- a/queries/roc/injections.scm
+++ b/runtime/queries/roc/injections.scm
diff --git a/queries/roc/locals.scm b/runtime/queries/roc/locals.scm
index 29f04e990..29f04e990 100644
--- a/queries/roc/locals.scm
+++ b/runtime/queries/roc/locals.scm
diff --git a/queries/ron/folds.scm b/runtime/queries/ron/folds.scm
index ae79583ea..ae79583ea 100644
--- a/queries/ron/folds.scm
+++ b/runtime/queries/ron/folds.scm
diff --git a/queries/ron/highlights.scm b/runtime/queries/ron/highlights.scm
index 96507323b..96507323b 100644
--- a/queries/ron/highlights.scm
+++ b/runtime/queries/ron/highlights.scm
diff --git a/queries/ron/indents.scm b/runtime/queries/ron/indents.scm
index 689d01fac..689d01fac 100644
--- a/queries/ron/indents.scm
+++ b/runtime/queries/ron/indents.scm
diff --git a/queries/ron/injections.scm b/runtime/queries/ron/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/ron/injections.scm
+++ b/runtime/queries/ron/injections.scm
diff --git a/queries/ron/locals.scm b/runtime/queries/ron/locals.scm
index 81e38d5ed..81e38d5ed 100644
--- a/queries/ron/locals.scm
+++ b/runtime/queries/ron/locals.scm
diff --git a/queries/rst/highlights.scm b/runtime/queries/rst/highlights.scm
index 21e3825c0..21e3825c0 100644
--- a/queries/rst/highlights.scm
+++ b/runtime/queries/rst/highlights.scm
diff --git a/queries/rst/injections.scm b/runtime/queries/rst/injections.scm
index 7178de9da..7178de9da 100644
--- a/queries/rst/injections.scm
+++ b/runtime/queries/rst/injections.scm
diff --git a/queries/rst/locals.scm b/runtime/queries/rst/locals.scm
index ce4235b43..ce4235b43 100644
--- a/queries/rst/locals.scm
+++ b/runtime/queries/rst/locals.scm
diff --git a/queries/ruby/folds.scm b/runtime/queries/ruby/folds.scm
index 3a497b31b..3a497b31b 100644
--- a/queries/ruby/folds.scm
+++ b/runtime/queries/ruby/folds.scm
diff --git a/queries/ruby/highlights.scm b/runtime/queries/ruby/highlights.scm
index 8de0251b1..a1a2c250d 100644
--- a/queries/ruby/highlights.scm
+++ b/runtime/queries/ruby/highlights.scm
@@ -170,9 +170,6 @@
(keyword_parameter
(identifier) @variable.parameter)
-; TODO: Re-enable this once it is supported
-; ((identifier) @function
-; (#is-not? local))
; Literals
[
(string_content)
diff --git a/queries/ruby/indents.scm b/runtime/queries/ruby/indents.scm
index b76732922..b76732922 100644
--- a/queries/ruby/indents.scm
+++ b/runtime/queries/ruby/indents.scm
diff --git a/queries/ruby/injections.scm b/runtime/queries/ruby/injections.scm
index 12b2c32a5..12b2c32a5 100644
--- a/queries/ruby/injections.scm
+++ b/runtime/queries/ruby/injections.scm
diff --git a/queries/ruby/locals.scm b/runtime/queries/ruby/locals.scm
index 29a67e2ba..29a67e2ba 100644
--- a/queries/ruby/locals.scm
+++ b/runtime/queries/ruby/locals.scm
diff --git a/queries/runescript/highlights.scm b/runtime/queries/runescript/highlights.scm
index d0c9432bd..d0c9432bd 100644
--- a/queries/runescript/highlights.scm
+++ b/runtime/queries/runescript/highlights.scm
diff --git a/queries/readline/injections.scm b/runtime/queries/runescript/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/readline/injections.scm
+++ b/runtime/queries/runescript/injections.scm
diff --git a/queries/rust/folds.scm b/runtime/queries/rust/folds.scm
index 9237b6f7b..9237b6f7b 100644
--- a/queries/rust/folds.scm
+++ b/runtime/queries/rust/folds.scm
diff --git a/queries/rust/highlights.scm b/runtime/queries/rust/highlights.scm
index de9d09684..de9d09684 100644
--- a/queries/rust/highlights.scm
+++ b/runtime/queries/rust/highlights.scm
diff --git a/queries/rust/indents.scm b/runtime/queries/rust/indents.scm
index 9fe337d5c..9fe337d5c 100644
--- a/queries/rust/indents.scm
+++ b/runtime/queries/rust/indents.scm
diff --git a/queries/rust/injections.scm b/runtime/queries/rust/injections.scm
index 7bffd1fc9..7bffd1fc9 100644
--- a/queries/rust/injections.scm
+++ b/runtime/queries/rust/injections.scm
diff --git a/queries/rust/locals.scm b/runtime/queries/rust/locals.scm
index 718d5f24a..718d5f24a 100644
--- a/queries/rust/locals.scm
+++ b/runtime/queries/rust/locals.scm
diff --git a/queries/scala/folds.scm b/runtime/queries/scala/folds.scm
index b0f08188e..b0f08188e 100644
--- a/queries/scala/folds.scm
+++ b/runtime/queries/scala/folds.scm
diff --git a/queries/scala/highlights.scm b/runtime/queries/scala/highlights.scm
index f85c502a4..f85c502a4 100644
--- a/queries/scala/highlights.scm
+++ b/runtime/queries/scala/highlights.scm
diff --git a/queries/rego/injections.scm b/runtime/queries/scala/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/rego/injections.scm
+++ b/runtime/queries/scala/injections.scm
diff --git a/queries/scala/locals.scm b/runtime/queries/scala/locals.scm
index 7128a4984..7128a4984 100644
--- a/queries/scala/locals.scm
+++ b/runtime/queries/scala/locals.scm
diff --git a/queries/scfg/highlights.scm b/runtime/queries/scfg/highlights.scm
index 058f3e3d4..058f3e3d4 100644
--- a/queries/scfg/highlights.scm
+++ b/runtime/queries/scfg/highlights.scm
diff --git a/queries/requirements/injections.scm b/runtime/queries/scfg/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/requirements/injections.scm
+++ b/runtime/queries/scfg/injections.scm
diff --git a/queries/scheme/folds.scm b/runtime/queries/scheme/folds.scm
index 115809a77..115809a77 100644
--- a/queries/scheme/folds.scm
+++ b/runtime/queries/scheme/folds.scm
diff --git a/queries/scheme/highlights.scm b/runtime/queries/scheme/highlights.scm
index 3d41e4951..3d41e4951 100644
--- a/queries/scheme/highlights.scm
+++ b/runtime/queries/scheme/highlights.scm
diff --git a/queries/robots/injections.scm b/runtime/queries/scheme/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/robots/injections.scm
+++ b/runtime/queries/scheme/injections.scm
diff --git a/queries/scss/folds.scm b/runtime/queries/scss/folds.scm
index cbe41875e..cbe41875e 100644
--- a/queries/scss/folds.scm
+++ b/runtime/queries/scss/folds.scm
diff --git a/queries/scss/highlights.scm b/runtime/queries/scss/highlights.scm
index 726256f8e..726256f8e 100644
--- a/queries/scss/highlights.scm
+++ b/runtime/queries/scss/highlights.scm
diff --git a/queries/scss/indents.scm b/runtime/queries/scss/indents.scm
index 3d54a0467..3d54a0467 100644
--- a/queries/scss/indents.scm
+++ b/runtime/queries/scss/indents.scm
diff --git a/queries/scss/injections.scm b/runtime/queries/scss/injections.scm
index c3a252a79..c3a252a79 100644
--- a/queries/scss/injections.scm
+++ b/runtime/queries/scss/injections.scm
diff --git a/queries/sflog/highlights.scm b/runtime/queries/sflog/highlights.scm
index 8eeee5d24..8eeee5d24 100644
--- a/queries/sflog/highlights.scm
+++ b/runtime/queries/sflog/highlights.scm
diff --git a/queries/slang/folds.scm b/runtime/queries/slang/folds.scm
index e0ae6853e..e0ae6853e 100644
--- a/queries/slang/folds.scm
+++ b/runtime/queries/slang/folds.scm
diff --git a/queries/slang/highlights.scm b/runtime/queries/slang/highlights.scm
index 166964c62..166964c62 100644
--- a/queries/slang/highlights.scm
+++ b/runtime/queries/slang/highlights.scm
diff --git a/queries/slang/indents.scm b/runtime/queries/slang/indents.scm
index 6175ac5bc..6175ac5bc 100644
--- a/queries/slang/indents.scm
+++ b/runtime/queries/slang/indents.scm
diff --git a/queries/slang/injections.scm b/runtime/queries/slang/injections.scm
index 2fd39cba0..2fd39cba0 100644
--- a/queries/slang/injections.scm
+++ b/runtime/queries/slang/injections.scm
diff --git a/queries/slang/locals.scm b/runtime/queries/slang/locals.scm
index 647bd1fef..647bd1fef 100644
--- a/queries/slang/locals.scm
+++ b/runtime/queries/slang/locals.scm
diff --git a/queries/slim/folds.scm b/runtime/queries/slim/folds.scm
index aabc67617..aabc67617 100644
--- a/queries/slim/folds.scm
+++ b/runtime/queries/slim/folds.scm
diff --git a/queries/slim/highlights.scm b/runtime/queries/slim/highlights.scm
index e219932f6..e219932f6 100644
--- a/queries/slim/highlights.scm
+++ b/runtime/queries/slim/highlights.scm
diff --git a/queries/slim/indents.scm b/runtime/queries/slim/indents.scm
index a06a75867..a06a75867 100644
--- a/queries/slim/indents.scm
+++ b/runtime/queries/slim/indents.scm
diff --git a/queries/slim/injections.scm b/runtime/queries/slim/injections.scm
index 3bee13931..3bee13931 100644
--- a/queries/slim/injections.scm
+++ b/runtime/queries/slim/injections.scm
diff --git a/queries/slim/locals.scm b/runtime/queries/slim/locals.scm
index e9f0b0079..e9f0b0079 100644
--- a/queries/slim/locals.scm
+++ b/runtime/queries/slim/locals.scm
diff --git a/queries/slint/folds.scm b/runtime/queries/slint/folds.scm
index 4c5b1307a..4c5b1307a 100644
--- a/queries/slint/folds.scm
+++ b/runtime/queries/slint/folds.scm
diff --git a/queries/slint/highlights.scm b/runtime/queries/slint/highlights.scm
index 1b56b1c0d..1b56b1c0d 100644
--- a/queries/slint/highlights.scm
+++ b/runtime/queries/slint/highlights.scm
diff --git a/queries/slint/indents.scm b/runtime/queries/slint/indents.scm
index d6bdeacde..d6bdeacde 100644
--- a/queries/slint/indents.scm
+++ b/runtime/queries/slint/indents.scm
diff --git a/queries/runescript/injections.scm b/runtime/queries/slint/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/runescript/injections.scm
+++ b/runtime/queries/slint/injections.scm
diff --git a/queries/slint/locals.scm b/runtime/queries/slint/locals.scm
index 7e895a6b5..7e895a6b5 100644
--- a/queries/slint/locals.scm
+++ b/runtime/queries/slint/locals.scm
diff --git a/queries/smali/folds.scm b/runtime/queries/smali/folds.scm
index c2062e5ef..c2062e5ef 100644
--- a/queries/smali/folds.scm
+++ b/runtime/queries/smali/folds.scm
diff --git a/queries/smali/highlights.scm b/runtime/queries/smali/highlights.scm
index 161b732b2..161b732b2 100644
--- a/queries/smali/highlights.scm
+++ b/runtime/queries/smali/highlights.scm
diff --git a/queries/smali/indents.scm b/runtime/queries/smali/indents.scm
index b4f37ddb4..b4f37ddb4 100644
--- a/queries/smali/indents.scm
+++ b/runtime/queries/smali/indents.scm
diff --git a/queries/scfg/injections.scm b/runtime/queries/smali/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/scfg/injections.scm
+++ b/runtime/queries/smali/injections.scm
diff --git a/queries/smali/locals.scm b/runtime/queries/smali/locals.scm
index a34b799ba..a34b799ba 100644
--- a/queries/smali/locals.scm
+++ b/runtime/queries/smali/locals.scm
diff --git a/queries/smithy/highlights.scm b/runtime/queries/smithy/highlights.scm
index 14e1f20fd..14e1f20fd 100644
--- a/queries/smithy/highlights.scm
+++ b/runtime/queries/smithy/highlights.scm
diff --git a/queries/smithy/injections.scm b/runtime/queries/smithy/injections.scm
index cb85ecaa1..cb85ecaa1 100644
--- a/queries/smithy/injections.scm
+++ b/runtime/queries/smithy/injections.scm
diff --git a/queries/snakemake/folds.scm b/runtime/queries/snakemake/folds.scm
index d154f3cde..d154f3cde 100644
--- a/queries/snakemake/folds.scm
+++ b/runtime/queries/snakemake/folds.scm
diff --git a/queries/snakemake/highlights.scm b/runtime/queries/snakemake/highlights.scm
index 8781b405c..8781b405c 100644
--- a/queries/snakemake/highlights.scm
+++ b/runtime/queries/snakemake/highlights.scm
diff --git a/queries/snakemake/indents.scm b/runtime/queries/snakemake/indents.scm
index 140b7fb3c..140b7fb3c 100644
--- a/queries/snakemake/indents.scm
+++ b/runtime/queries/snakemake/indents.scm
diff --git a/queries/snakemake/injections.scm b/runtime/queries/snakemake/injections.scm
index fa56daabb..fa56daabb 100644
--- a/queries/snakemake/injections.scm
+++ b/runtime/queries/snakemake/injections.scm
diff --git a/queries/snakemake/locals.scm b/runtime/queries/snakemake/locals.scm
index 219f23347..219f23347 100644
--- a/queries/snakemake/locals.scm
+++ b/runtime/queries/snakemake/locals.scm
diff --git a/queries/solidity/folds.scm b/runtime/queries/solidity/folds.scm
index 7e3cbdec9..7e3cbdec9 100644
--- a/queries/solidity/folds.scm
+++ b/runtime/queries/solidity/folds.scm
diff --git a/queries/solidity/highlights.scm b/runtime/queries/solidity/highlights.scm
index ca6988edb..ca6988edb 100644
--- a/queries/solidity/highlights.scm
+++ b/runtime/queries/solidity/highlights.scm
diff --git a/queries/scheme/injections.scm b/runtime/queries/solidity/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/scheme/injections.scm
+++ b/runtime/queries/solidity/injections.scm
diff --git a/queries/soql/highlights.scm b/runtime/queries/soql/highlights.scm
index 11e9d582a..11e9d582a 100644
--- a/queries/soql/highlights.scm
+++ b/runtime/queries/soql/highlights.scm
diff --git a/queries/sosl/highlights.scm b/runtime/queries/sosl/highlights.scm
index f3b77be3b..f3b77be3b 100644
--- a/queries/sosl/highlights.scm
+++ b/runtime/queries/sosl/highlights.scm
diff --git a/queries/sourcepawn/highlights.scm b/runtime/queries/sourcepawn/highlights.scm
index 21cbb9733..21cbb9733 100644
--- a/queries/sourcepawn/highlights.scm
+++ b/runtime/queries/sourcepawn/highlights.scm
diff --git a/queries/sourcepawn/injections.scm b/runtime/queries/sourcepawn/injections.scm
index c579ffad8..c579ffad8 100644
--- a/queries/sourcepawn/injections.scm
+++ b/runtime/queries/sourcepawn/injections.scm
diff --git a/queries/sourcepawn/locals.scm b/runtime/queries/sourcepawn/locals.scm
index 39d6fb516..39d6fb516 100644
--- a/queries/sourcepawn/locals.scm
+++ b/runtime/queries/sourcepawn/locals.scm
diff --git a/queries/sparql/folds.scm b/runtime/queries/sparql/folds.scm
index 2b93a7bc7..2b93a7bc7 100644
--- a/queries/sparql/folds.scm
+++ b/runtime/queries/sparql/folds.scm
diff --git a/queries/sparql/highlights.scm b/runtime/queries/sparql/highlights.scm
index 19c0257ca..19c0257ca 100644
--- a/queries/sparql/highlights.scm
+++ b/runtime/queries/sparql/highlights.scm
diff --git a/queries/sparql/indents.scm b/runtime/queries/sparql/indents.scm
index e070546df..e070546df 100644
--- a/queries/sparql/indents.scm
+++ b/runtime/queries/sparql/indents.scm
diff --git a/queries/sparql/injections.scm b/runtime/queries/sparql/injections.scm
index bce9a19ee..bce9a19ee 100644
--- a/queries/sparql/injections.scm
+++ b/runtime/queries/sparql/injections.scm
diff --git a/queries/sparql/locals.scm b/runtime/queries/sparql/locals.scm
index cbb2bb252..cbb2bb252 100644
--- a/queries/sparql/locals.scm
+++ b/runtime/queries/sparql/locals.scm
diff --git a/queries/sql/folds.scm b/runtime/queries/sql/folds.scm
index 07f2282d0..07f2282d0 100644
--- a/queries/sql/folds.scm
+++ b/runtime/queries/sql/folds.scm
diff --git a/queries/sql/highlights.scm b/runtime/queries/sql/highlights.scm
index 67eef18ae..67eef18ae 100644
--- a/queries/sql/highlights.scm
+++ b/runtime/queries/sql/highlights.scm
diff --git a/queries/sql/indents.scm b/runtime/queries/sql/indents.scm
index 34ae079dd..34ae079dd 100644
--- a/queries/sql/indents.scm
+++ b/runtime/queries/sql/indents.scm
diff --git a/queries/sql/injections.scm b/runtime/queries/sql/injections.scm
index 602997440..602997440 100644
--- a/queries/sql/injections.scm
+++ b/runtime/queries/sql/injections.scm
diff --git a/queries/squirrel/folds.scm b/runtime/queries/squirrel/folds.scm
index c2903cc66..c2903cc66 100644
--- a/queries/squirrel/folds.scm
+++ b/runtime/queries/squirrel/folds.scm
diff --git a/queries/squirrel/highlights.scm b/runtime/queries/squirrel/highlights.scm
index 03acacadc..03acacadc 100644
--- a/queries/squirrel/highlights.scm
+++ b/runtime/queries/squirrel/highlights.scm
diff --git a/queries/squirrel/indents.scm b/runtime/queries/squirrel/indents.scm
index 00245d6ae..00245d6ae 100644
--- a/queries/squirrel/indents.scm
+++ b/runtime/queries/squirrel/indents.scm
diff --git a/queries/squirrel/injections.scm b/runtime/queries/squirrel/injections.scm
index 578a9eeca..578a9eeca 100644
--- a/queries/squirrel/injections.scm
+++ b/runtime/queries/squirrel/injections.scm
diff --git a/queries/squirrel/locals.scm b/runtime/queries/squirrel/locals.scm
index e5fce7d57..e5fce7d57 100644
--- a/queries/squirrel/locals.scm
+++ b/runtime/queries/squirrel/locals.scm
diff --git a/queries/ssh_config/folds.scm b/runtime/queries/ssh_config/folds.scm
index 659835657..659835657 100644
--- a/queries/ssh_config/folds.scm
+++ b/runtime/queries/ssh_config/folds.scm
diff --git a/queries/ssh_config/highlights.scm b/runtime/queries/ssh_config/highlights.scm
index b58360b69..b58360b69 100644
--- a/queries/ssh_config/highlights.scm
+++ b/runtime/queries/ssh_config/highlights.scm
diff --git a/queries/ssh_config/indents.scm b/runtime/queries/ssh_config/indents.scm
index 760707f17..760707f17 100644
--- a/queries/ssh_config/indents.scm
+++ b/runtime/queries/ssh_config/indents.scm
diff --git a/queries/ssh_config/injections.scm b/runtime/queries/ssh_config/injections.scm
index d1b24be61..d1b24be61 100644
--- a/queries/ssh_config/injections.scm
+++ b/runtime/queries/ssh_config/injections.scm
diff --git a/queries/ssh_config/locals.scm b/runtime/queries/ssh_config/locals.scm
index a3309a9a6..a3309a9a6 100644
--- a/queries/ssh_config/locals.scm
+++ b/runtime/queries/ssh_config/locals.scm
diff --git a/queries/starlark/folds.scm b/runtime/queries/starlark/folds.scm
index 0c9d2a260..0c9d2a260 100644
--- a/queries/starlark/folds.scm
+++ b/runtime/queries/starlark/folds.scm
diff --git a/queries/starlark/highlights.scm b/runtime/queries/starlark/highlights.scm
index fe3dce89b..fe3dce89b 100644
--- a/queries/starlark/highlights.scm
+++ b/runtime/queries/starlark/highlights.scm
diff --git a/queries/starlark/indents.scm b/runtime/queries/starlark/indents.scm
index 1aeb9f60e..1aeb9f60e 100644
--- a/queries/starlark/indents.scm
+++ b/runtime/queries/starlark/indents.scm
diff --git a/queries/starlark/injections.scm b/runtime/queries/starlark/injections.scm
index 2b60646e2..2b60646e2 100644
--- a/queries/starlark/injections.scm
+++ b/runtime/queries/starlark/injections.scm
diff --git a/queries/starlark/locals.scm b/runtime/queries/starlark/locals.scm
index 82ec0b5d2..82ec0b5d2 100644
--- a/queries/starlark/locals.scm
+++ b/runtime/queries/starlark/locals.scm
diff --git a/queries/strace/highlights.scm b/runtime/queries/strace/highlights.scm
index 70a14fd2d..70a14fd2d 100644
--- a/queries/strace/highlights.scm
+++ b/runtime/queries/strace/highlights.scm
diff --git a/queries/slint/injections.scm b/runtime/queries/strace/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/slint/injections.scm
+++ b/runtime/queries/strace/injections.scm
diff --git a/queries/styled/folds.scm b/runtime/queries/styled/folds.scm
index cbe41875e..cbe41875e 100644
--- a/queries/styled/folds.scm
+++ b/runtime/queries/styled/folds.scm
diff --git a/queries/styled/highlights.scm b/runtime/queries/styled/highlights.scm
index cbe41875e..cbe41875e 100644
--- a/queries/styled/highlights.scm
+++ b/runtime/queries/styled/highlights.scm
diff --git a/queries/styled/indents.scm b/runtime/queries/styled/indents.scm
index cbe41875e..cbe41875e 100644
--- a/queries/styled/indents.scm
+++ b/runtime/queries/styled/indents.scm
diff --git a/queries/styled/injections.scm b/runtime/queries/styled/injections.scm
index cbe41875e..cbe41875e 100644
--- a/queries/styled/injections.scm
+++ b/runtime/queries/styled/injections.scm
diff --git a/queries/supercollider/folds.scm b/runtime/queries/supercollider/folds.scm
index 2f5f1043a..2f5f1043a 100644
--- a/queries/supercollider/folds.scm
+++ b/runtime/queries/supercollider/folds.scm
diff --git a/queries/supercollider/highlights.scm b/runtime/queries/supercollider/highlights.scm
index c56bce69a..c56bce69a 100644
--- a/queries/supercollider/highlights.scm
+++ b/runtime/queries/supercollider/highlights.scm
diff --git a/queries/supercollider/indents.scm b/runtime/queries/supercollider/indents.scm
index c0cffab3c..c0cffab3c 100644
--- a/queries/supercollider/indents.scm
+++ b/runtime/queries/supercollider/indents.scm
diff --git a/queries/supercollider/injections.scm b/runtime/queries/supercollider/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/supercollider/injections.scm
+++ b/runtime/queries/supercollider/injections.scm
diff --git a/queries/supercollider/locals.scm b/runtime/queries/supercollider/locals.scm
index 066bbf9ab..066bbf9ab 100644
--- a/queries/supercollider/locals.scm
+++ b/runtime/queries/supercollider/locals.scm
diff --git a/queries/superhtml/highlights.scm b/runtime/queries/superhtml/highlights.scm
index cbf366d1c..cbf366d1c 100644
--- a/queries/superhtml/highlights.scm
+++ b/runtime/queries/superhtml/highlights.scm
diff --git a/queries/superhtml/injections.scm b/runtime/queries/superhtml/injections.scm
index 138fe7c23..138fe7c23 100644
--- a/queries/superhtml/injections.scm
+++ b/runtime/queries/superhtml/injections.scm
diff --git a/queries/surface/folds.scm b/runtime/queries/surface/folds.scm
index 994f12e1e..994f12e1e 100644
--- a/queries/surface/folds.scm
+++ b/runtime/queries/surface/folds.scm
diff --git a/queries/surface/highlights.scm b/runtime/queries/surface/highlights.scm
index b874b8c1d..b874b8c1d 100644
--- a/queries/surface/highlights.scm
+++ b/runtime/queries/surface/highlights.scm
diff --git a/queries/surface/indents.scm b/runtime/queries/surface/indents.scm
index 1df9fe6fd..1df9fe6fd 100644
--- a/queries/surface/indents.scm
+++ b/runtime/queries/surface/indents.scm
diff --git a/queries/surface/injections.scm b/runtime/queries/surface/injections.scm
index 72cab5e80..72cab5e80 100644
--- a/queries/surface/injections.scm
+++ b/runtime/queries/surface/injections.scm
diff --git a/queries/svelte/folds.scm b/runtime/queries/svelte/folds.scm
index 6440301af..6440301af 100644
--- a/queries/svelte/folds.scm
+++ b/runtime/queries/svelte/folds.scm
diff --git a/queries/svelte/highlights.scm b/runtime/queries/svelte/highlights.scm
index dc98290dd..dc98290dd 100644
--- a/queries/svelte/highlights.scm
+++ b/runtime/queries/svelte/highlights.scm
diff --git a/queries/svelte/indents.scm b/runtime/queries/svelte/indents.scm
index 0c67647d7..0c67647d7 100644
--- a/queries/svelte/indents.scm
+++ b/runtime/queries/svelte/indents.scm
diff --git a/queries/svelte/injections.scm b/runtime/queries/svelte/injections.scm
index f20ae66c8..f20ae66c8 100644
--- a/queries/svelte/injections.scm
+++ b/runtime/queries/svelte/injections.scm
diff --git a/queries/svelte/locals.scm b/runtime/queries/svelte/locals.scm
index 1f2129cf9..1f2129cf9 100644
--- a/queries/svelte/locals.scm
+++ b/runtime/queries/svelte/locals.scm
diff --git a/queries/sway/folds.scm b/runtime/queries/sway/folds.scm
index ba8474aa2..ba8474aa2 100644
--- a/queries/sway/folds.scm
+++ b/runtime/queries/sway/folds.scm
diff --git a/queries/sway/highlights.scm b/runtime/queries/sway/highlights.scm
index e408464fe..e408464fe 100644
--- a/queries/sway/highlights.scm
+++ b/runtime/queries/sway/highlights.scm
diff --git a/queries/sway/indents.scm b/runtime/queries/sway/indents.scm
index 151d8b20b..151d8b20b 100644
--- a/queries/sway/indents.scm
+++ b/runtime/queries/sway/indents.scm
diff --git a/queries/sway/injections.scm b/runtime/queries/sway/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/sway/injections.scm
+++ b/runtime/queries/sway/injections.scm
diff --git a/queries/sway/locals.scm b/runtime/queries/sway/locals.scm
index 5c2ade83a..5c2ade83a 100644
--- a/queries/sway/locals.scm
+++ b/runtime/queries/sway/locals.scm
diff --git a/queries/swift/folds.scm b/runtime/queries/swift/folds.scm
index cfbc6d0b1..cfbc6d0b1 100644
--- a/queries/swift/folds.scm
+++ b/runtime/queries/swift/folds.scm
diff --git a/queries/swift/highlights.scm b/runtime/queries/swift/highlights.scm
index 5c52ee9d6..5c52ee9d6 100644
--- a/queries/swift/highlights.scm
+++ b/runtime/queries/swift/highlights.scm
diff --git a/queries/swift/indents.scm b/runtime/queries/swift/indents.scm
index 2366c3bd6..2366c3bd6 100644
--- a/queries/swift/indents.scm
+++ b/runtime/queries/swift/indents.scm
diff --git a/queries/swift/injections.scm b/runtime/queries/swift/injections.scm
index 19aae904e..19aae904e 100644
--- a/queries/swift/injections.scm
+++ b/runtime/queries/swift/injections.scm
diff --git a/queries/swift/locals.scm b/runtime/queries/swift/locals.scm
index dc8a62e9e..dc8a62e9e 100644
--- a/queries/swift/locals.scm
+++ b/runtime/queries/swift/locals.scm
diff --git a/queries/sxhkdrc/folds.scm b/runtime/queries/sxhkdrc/folds.scm
index c6634aaef..c6634aaef 100644
--- a/queries/sxhkdrc/folds.scm
+++ b/runtime/queries/sxhkdrc/folds.scm
diff --git a/queries/sxhkdrc/highlights.scm b/runtime/queries/sxhkdrc/highlights.scm
index 3f633a73d..3f633a73d 100644
--- a/queries/sxhkdrc/highlights.scm
+++ b/runtime/queries/sxhkdrc/highlights.scm
diff --git a/queries/sxhkdrc/injections.scm b/runtime/queries/sxhkdrc/injections.scm
index d962c7a84..d962c7a84 100644
--- a/queries/sxhkdrc/injections.scm
+++ b/runtime/queries/sxhkdrc/injections.scm
diff --git a/queries/systemtap/folds.scm b/runtime/queries/systemtap/folds.scm
index 58bb03e51..58bb03e51 100644
--- a/queries/systemtap/folds.scm
+++ b/runtime/queries/systemtap/folds.scm
diff --git a/queries/systemtap/highlights.scm b/runtime/queries/systemtap/highlights.scm
index d1348dc91..d1348dc91 100644
--- a/queries/systemtap/highlights.scm
+++ b/runtime/queries/systemtap/highlights.scm
diff --git a/queries/systemtap/injections.scm b/runtime/queries/systemtap/injections.scm
index 591df6012..591df6012 100644
--- a/queries/systemtap/injections.scm
+++ b/runtime/queries/systemtap/injections.scm
diff --git a/queries/systemtap/locals.scm b/runtime/queries/systemtap/locals.scm
index 15056808c..15056808c 100644
--- a/queries/systemtap/locals.scm
+++ b/runtime/queries/systemtap/locals.scm
diff --git a/queries/t32/folds.scm b/runtime/queries/t32/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/t32/folds.scm
+++ b/runtime/queries/t32/folds.scm
diff --git a/queries/t32/highlights.scm b/runtime/queries/t32/highlights.scm
index 9211a49d2..9211a49d2 100644
--- a/queries/t32/highlights.scm
+++ b/runtime/queries/t32/highlights.scm
diff --git a/queries/t32/indents.scm b/runtime/queries/t32/indents.scm
index 01d5f3967..01d5f3967 100644
--- a/queries/t32/indents.scm
+++ b/runtime/queries/t32/indents.scm
diff --git a/queries/smali/injections.scm b/runtime/queries/t32/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/smali/injections.scm
+++ b/runtime/queries/t32/injections.scm
diff --git a/queries/t32/locals.scm b/runtime/queries/t32/locals.scm
index 91bf7660e..91bf7660e 100644
--- a/queries/t32/locals.scm
+++ b/runtime/queries/t32/locals.scm
diff --git a/queries/tablegen/folds.scm b/runtime/queries/tablegen/folds.scm
index 0e95ca527..0e95ca527 100644
--- a/queries/tablegen/folds.scm
+++ b/runtime/queries/tablegen/folds.scm
diff --git a/queries/tablegen/highlights.scm b/runtime/queries/tablegen/highlights.scm
index c2f63b093..c2f63b093 100644
--- a/queries/tablegen/highlights.scm
+++ b/runtime/queries/tablegen/highlights.scm
diff --git a/queries/tablegen/indents.scm b/runtime/queries/tablegen/indents.scm
index 16748edf1..16748edf1 100644
--- a/queries/tablegen/indents.scm
+++ b/runtime/queries/tablegen/indents.scm
diff --git a/queries/tablegen/injections.scm b/runtime/queries/tablegen/injections.scm
index 99f7919b6..99f7919b6 100644
--- a/queries/tablegen/injections.scm
+++ b/runtime/queries/tablegen/injections.scm
diff --git a/queries/tablegen/locals.scm b/runtime/queries/tablegen/locals.scm
index c73100193..c73100193 100644
--- a/queries/tablegen/locals.scm
+++ b/runtime/queries/tablegen/locals.scm
diff --git a/queries/tact/folds.scm b/runtime/queries/tact/folds.scm
index adade3f1c..adade3f1c 100644
--- a/queries/tact/folds.scm
+++ b/runtime/queries/tact/folds.scm
diff --git a/queries/tact/highlights.scm b/runtime/queries/tact/highlights.scm
index 345ca299c..345ca299c 100644
--- a/queries/tact/highlights.scm
+++ b/runtime/queries/tact/highlights.scm
diff --git a/queries/tact/indents.scm b/runtime/queries/tact/indents.scm
index 1d05d4d82..1d05d4d82 100644
--- a/queries/tact/indents.scm
+++ b/runtime/queries/tact/indents.scm
diff --git a/queries/strace/injections.scm b/runtime/queries/tact/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/strace/injections.scm
+++ b/runtime/queries/tact/injections.scm
diff --git a/queries/tact/locals.scm b/runtime/queries/tact/locals.scm
index 547ee42c8..547ee42c8 100644
--- a/queries/tact/locals.scm
+++ b/runtime/queries/tact/locals.scm
diff --git a/queries/tcl/folds.scm b/runtime/queries/tcl/folds.scm
index 9084c662c..9084c662c 100644
--- a/queries/tcl/folds.scm
+++ b/runtime/queries/tcl/folds.scm
diff --git a/queries/tcl/highlights.scm b/runtime/queries/tcl/highlights.scm
index c5f1f4c36..c5f1f4c36 100644
--- a/queries/tcl/highlights.scm
+++ b/runtime/queries/tcl/highlights.scm
diff --git a/queries/tcl/indents.scm b/runtime/queries/tcl/indents.scm
index bc0355372..bc0355372 100644
--- a/queries/tcl/indents.scm
+++ b/runtime/queries/tcl/indents.scm
diff --git a/queries/t32/injections.scm b/runtime/queries/tcl/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/t32/injections.scm
+++ b/runtime/queries/tcl/injections.scm
diff --git a/queries/teal/folds.scm b/runtime/queries/teal/folds.scm
index 27755de20..27755de20 100644
--- a/queries/teal/folds.scm
+++ b/runtime/queries/teal/folds.scm
diff --git a/queries/teal/highlights.scm b/runtime/queries/teal/highlights.scm
index e58d588bb..e58d588bb 100644
--- a/queries/teal/highlights.scm
+++ b/runtime/queries/teal/highlights.scm
diff --git a/queries/teal/indents.scm b/runtime/queries/teal/indents.scm
index 77b269cd9..77b269cd9 100644
--- a/queries/teal/indents.scm
+++ b/runtime/queries/teal/indents.scm
diff --git a/queries/teal/injections.scm b/runtime/queries/teal/injections.scm
index decb4831c..decb4831c 100644
--- a/queries/teal/injections.scm
+++ b/runtime/queries/teal/injections.scm
diff --git a/queries/teal/locals.scm b/runtime/queries/teal/locals.scm
index c2386c632..c2386c632 100644
--- a/queries/teal/locals.scm
+++ b/runtime/queries/teal/locals.scm
diff --git a/queries/templ/folds.scm b/runtime/queries/templ/folds.scm
index adbbb103f..adbbb103f 100644
--- a/queries/templ/folds.scm
+++ b/runtime/queries/templ/folds.scm
diff --git a/queries/templ/highlights.scm b/runtime/queries/templ/highlights.scm
index 034c91d5b..034c91d5b 100644
--- a/queries/templ/highlights.scm
+++ b/runtime/queries/templ/highlights.scm
diff --git a/queries/templ/injections.scm b/runtime/queries/templ/injections.scm
index b9cf5a06a..b9cf5a06a 100644
--- a/queries/templ/injections.scm
+++ b/runtime/queries/templ/injections.scm
diff --git a/queries/tera/highlights.scm b/runtime/queries/tera/highlights.scm
index f41ad826f..f41ad826f 100644
--- a/queries/tera/highlights.scm
+++ b/runtime/queries/tera/highlights.scm
diff --git a/queries/tera/injections.scm b/runtime/queries/tera/injections.scm
index 394142081..394142081 100644
--- a/queries/tera/injections.scm
+++ b/runtime/queries/tera/injections.scm
diff --git a/queries/terraform/folds.scm b/runtime/queries/terraform/folds.scm
index 0e5ffc2db..0e5ffc2db 100644
--- a/queries/terraform/folds.scm
+++ b/runtime/queries/terraform/folds.scm
diff --git a/queries/terraform/highlights.scm b/runtime/queries/terraform/highlights.scm
index a6bf83cdb..a6bf83cdb 100644
--- a/queries/terraform/highlights.scm
+++ b/runtime/queries/terraform/highlights.scm
diff --git a/queries/terraform/indents.scm b/runtime/queries/terraform/indents.scm
index 0e5ffc2db..0e5ffc2db 100644
--- a/queries/terraform/indents.scm
+++ b/runtime/queries/terraform/indents.scm
diff --git a/queries/terraform/injections.scm b/runtime/queries/terraform/injections.scm
index 0e5ffc2db..0e5ffc2db 100644
--- a/queries/terraform/injections.scm
+++ b/runtime/queries/terraform/injections.scm
diff --git a/queries/textproto/folds.scm b/runtime/queries/textproto/folds.scm
index f6eeead9a..f6eeead9a 100644
--- a/queries/textproto/folds.scm
+++ b/runtime/queries/textproto/folds.scm
diff --git a/queries/textproto/highlights.scm b/runtime/queries/textproto/highlights.scm
index 527af0398..527af0398 100644
--- a/queries/textproto/highlights.scm
+++ b/runtime/queries/textproto/highlights.scm
diff --git a/queries/textproto/indents.scm b/runtime/queries/textproto/indents.scm
index 155299e39..155299e39 100644
--- a/queries/textproto/indents.scm
+++ b/runtime/queries/textproto/indents.scm
diff --git a/queries/tact/injections.scm b/runtime/queries/textproto/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/tact/injections.scm
+++ b/runtime/queries/textproto/injections.scm
diff --git a/queries/thrift/folds.scm b/runtime/queries/thrift/folds.scm
index 62880f98c..62880f98c 100644
--- a/queries/thrift/folds.scm
+++ b/runtime/queries/thrift/folds.scm
diff --git a/queries/thrift/highlights.scm b/runtime/queries/thrift/highlights.scm
index 96136d7b5..96136d7b5 100644
--- a/queries/thrift/highlights.scm
+++ b/runtime/queries/thrift/highlights.scm
diff --git a/queries/thrift/indents.scm b/runtime/queries/thrift/indents.scm
index db49c0712..db49c0712 100644
--- a/queries/thrift/indents.scm
+++ b/runtime/queries/thrift/indents.scm
diff --git a/queries/tcl/injections.scm b/runtime/queries/thrift/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/tcl/injections.scm
+++ b/runtime/queries/thrift/injections.scm
diff --git a/queries/thrift/locals.scm b/runtime/queries/thrift/locals.scm
index 49f25bdde..49f25bdde 100644
--- a/queries/thrift/locals.scm
+++ b/runtime/queries/thrift/locals.scm
diff --git a/queries/tiger/folds.scm b/runtime/queries/tiger/folds.scm
index 3b076bc18..3b076bc18 100644
--- a/queries/tiger/folds.scm
+++ b/runtime/queries/tiger/folds.scm
diff --git a/queries/tiger/highlights.scm b/runtime/queries/tiger/highlights.scm
index cbb1f2310..cbb1f2310 100644
--- a/queries/tiger/highlights.scm
+++ b/runtime/queries/tiger/highlights.scm
diff --git a/queries/tiger/indents.scm b/runtime/queries/tiger/indents.scm
index 686bfde16..686bfde16 100644
--- a/queries/tiger/indents.scm
+++ b/runtime/queries/tiger/indents.scm
diff --git a/queries/tiger/injections.scm b/runtime/queries/tiger/injections.scm
index 9735c5935..9735c5935 100644
--- a/queries/tiger/injections.scm
+++ b/runtime/queries/tiger/injections.scm
diff --git a/queries/tiger/locals.scm b/runtime/queries/tiger/locals.scm
index cd8dcd65f..cd8dcd65f 100644
--- a/queries/tiger/locals.scm
+++ b/runtime/queries/tiger/locals.scm
diff --git a/queries/tlaplus/folds.scm b/runtime/queries/tlaplus/folds.scm
index 2ca0168c0..2ca0168c0 100644
--- a/queries/tlaplus/folds.scm
+++ b/runtime/queries/tlaplus/folds.scm
diff --git a/queries/tlaplus/highlights.scm b/runtime/queries/tlaplus/highlights.scm
index 2eca927e7..2eca927e7 100644
--- a/queries/tlaplus/highlights.scm
+++ b/runtime/queries/tlaplus/highlights.scm
diff --git a/queries/tlaplus/injections.scm b/runtime/queries/tlaplus/injections.scm
index fbeff500b..fbeff500b 100644
--- a/queries/tlaplus/injections.scm
+++ b/runtime/queries/tlaplus/injections.scm
diff --git a/queries/tlaplus/locals.scm b/runtime/queries/tlaplus/locals.scm
index e105351ef..e105351ef 100644
--- a/queries/tlaplus/locals.scm
+++ b/runtime/queries/tlaplus/locals.scm
diff --git a/queries/tmux/highlights.scm b/runtime/queries/tmux/highlights.scm
index 50da7d7d8..50da7d7d8 100644
--- a/queries/tmux/highlights.scm
+++ b/runtime/queries/tmux/highlights.scm
diff --git a/queries/tmux/injections.scm b/runtime/queries/tmux/injections.scm
index 5bf6e27d2..5bf6e27d2 100644
--- a/queries/tmux/injections.scm
+++ b/runtime/queries/tmux/injections.scm
diff --git a/queries/todotxt/highlights.scm b/runtime/queries/todotxt/highlights.scm
index 1da096201..1da096201 100644
--- a/queries/todotxt/highlights.scm
+++ b/runtime/queries/todotxt/highlights.scm
diff --git a/queries/toml/folds.scm b/runtime/queries/toml/folds.scm
index a58aae4ca..a58aae4ca 100644
--- a/queries/toml/folds.scm
+++ b/runtime/queries/toml/folds.scm
diff --git a/queries/toml/highlights.scm b/runtime/queries/toml/highlights.scm
index f4eaf3f77..f4eaf3f77 100644
--- a/queries/toml/highlights.scm
+++ b/runtime/queries/toml/highlights.scm
diff --git a/queries/toml/indents.scm b/runtime/queries/toml/indents.scm
index a2391a4bd..a2391a4bd 100644
--- a/queries/toml/indents.scm
+++ b/runtime/queries/toml/indents.scm
diff --git a/queries/textproto/injections.scm b/runtime/queries/toml/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/textproto/injections.scm
+++ b/runtime/queries/toml/injections.scm
diff --git a/queries/toml/locals.scm b/runtime/queries/toml/locals.scm
index 2ca4e5404..2ca4e5404 100644
--- a/queries/toml/locals.scm
+++ b/runtime/queries/toml/locals.scm
diff --git a/queries/tsv/highlights.scm b/runtime/queries/tsv/highlights.scm
index f00f13da3..f00f13da3 100644
--- a/queries/tsv/highlights.scm
+++ b/runtime/queries/tsv/highlights.scm
diff --git a/queries/tsx/folds.scm b/runtime/queries/tsx/folds.scm
index 07391231c..07391231c 100644
--- a/queries/tsx/folds.scm
+++ b/runtime/queries/tsx/folds.scm
diff --git a/queries/tsx/highlights.scm b/runtime/queries/tsx/highlights.scm
index 07391231c..07391231c 100644
--- a/queries/tsx/highlights.scm
+++ b/runtime/queries/tsx/highlights.scm
diff --git a/queries/tsx/indents.scm b/runtime/queries/tsx/indents.scm
index 07391231c..07391231c 100644
--- a/queries/tsx/indents.scm
+++ b/runtime/queries/tsx/indents.scm
diff --git a/queries/tsx/injections.scm b/runtime/queries/tsx/injections.scm
index b6d9b28bf..b6d9b28bf 100644
--- a/queries/tsx/injections.scm
+++ b/runtime/queries/tsx/injections.scm
diff --git a/queries/tsx/locals.scm b/runtime/queries/tsx/locals.scm
index 07391231c..07391231c 100644
--- a/queries/tsx/locals.scm
+++ b/runtime/queries/tsx/locals.scm
diff --git a/queries/turtle/folds.scm b/runtime/queries/turtle/folds.scm
index f932a3731..f932a3731 100644
--- a/queries/turtle/folds.scm
+++ b/runtime/queries/turtle/folds.scm
diff --git a/queries/turtle/highlights.scm b/runtime/queries/turtle/highlights.scm
index 30d1f4513..30d1f4513 100644
--- a/queries/turtle/highlights.scm
+++ b/runtime/queries/turtle/highlights.scm
diff --git a/queries/turtle/indents.scm b/runtime/queries/turtle/indents.scm
index a60105667..a60105667 100644
--- a/queries/turtle/indents.scm
+++ b/runtime/queries/turtle/indents.scm
diff --git a/queries/thrift/injections.scm b/runtime/queries/turtle/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/thrift/injections.scm
+++ b/runtime/queries/turtle/injections.scm
diff --git a/queries/turtle/locals.scm b/runtime/queries/turtle/locals.scm
index 0e251e2fa..0e251e2fa 100644
--- a/queries/turtle/locals.scm
+++ b/runtime/queries/turtle/locals.scm
diff --git a/queries/twig/highlights.scm b/runtime/queries/twig/highlights.scm
index 435fdc0f1..435fdc0f1 100644
--- a/queries/twig/highlights.scm
+++ b/runtime/queries/twig/highlights.scm
diff --git a/queries/twig/injections.scm b/runtime/queries/twig/injections.scm
index 3fd93feb7..3fd93feb7 100644
--- a/queries/twig/injections.scm
+++ b/runtime/queries/twig/injections.scm
diff --git a/queries/typescript/folds.scm b/runtime/queries/typescript/folds.scm
index df0b8942a..df0b8942a 100644
--- a/queries/typescript/folds.scm
+++ b/runtime/queries/typescript/folds.scm
diff --git a/queries/typescript/highlights.scm b/runtime/queries/typescript/highlights.scm
index 2fb13d800..2fb13d800 100644
--- a/queries/typescript/highlights.scm
+++ b/runtime/queries/typescript/highlights.scm
diff --git a/queries/typescript/indents.scm b/runtime/queries/typescript/indents.scm
index 9a269ba75..9a269ba75 100644
--- a/queries/typescript/indents.scm
+++ b/runtime/queries/typescript/indents.scm
diff --git a/queries/typescript/injections.scm b/runtime/queries/typescript/injections.scm
index 04328f099..04328f099 100644
--- a/queries/typescript/injections.scm
+++ b/runtime/queries/typescript/injections.scm
diff --git a/queries/typescript/locals.scm b/runtime/queries/typescript/locals.scm
index b89d9a0c0..b89d9a0c0 100644
--- a/queries/typescript/locals.scm
+++ b/runtime/queries/typescript/locals.scm
diff --git a/queries/typespec/highlights.scm b/runtime/queries/typespec/highlights.scm
index 68c67c0d1..68c67c0d1 100644
--- a/queries/typespec/highlights.scm
+++ b/runtime/queries/typespec/highlights.scm
diff --git a/queries/typespec/indents.scm b/runtime/queries/typespec/indents.scm
index aee01f35a..aee01f35a 100644
--- a/queries/typespec/indents.scm
+++ b/runtime/queries/typespec/indents.scm
diff --git a/queries/typespec/injections.scm b/runtime/queries/typespec/injections.scm
index 81d7734cb..81d7734cb 100644
--- a/queries/typespec/injections.scm
+++ b/runtime/queries/typespec/injections.scm
diff --git a/queries/typoscript/folds.scm b/runtime/queries/typoscript/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/typoscript/folds.scm
+++ b/runtime/queries/typoscript/folds.scm
diff --git a/queries/typoscript/highlights.scm b/runtime/queries/typoscript/highlights.scm
index 63327f178..63327f178 100644
--- a/queries/typoscript/highlights.scm
+++ b/runtime/queries/typoscript/highlights.scm
diff --git a/queries/typoscript/indents.scm b/runtime/queries/typoscript/indents.scm
index 4f5fb4797..4f5fb4797 100644
--- a/queries/typoscript/indents.scm
+++ b/runtime/queries/typoscript/indents.scm
diff --git a/queries/toml/injections.scm b/runtime/queries/typoscript/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/toml/injections.scm
+++ b/runtime/queries/typoscript/injections.scm
diff --git a/queries/typst/folds.scm b/runtime/queries/typst/folds.scm
index ef0ec7956..ef0ec7956 100644
--- a/queries/typst/folds.scm
+++ b/runtime/queries/typst/folds.scm
diff --git a/queries/typst/highlights.scm b/runtime/queries/typst/highlights.scm
index a0dcc1b89..a0dcc1b89 100644
--- a/queries/typst/highlights.scm
+++ b/runtime/queries/typst/highlights.scm
diff --git a/queries/typst/indents.scm b/runtime/queries/typst/indents.scm
index d43c586c1..d43c586c1 100644
--- a/queries/typst/indents.scm
+++ b/runtime/queries/typst/indents.scm
diff --git a/queries/turtle/injections.scm b/runtime/queries/typst/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/turtle/injections.scm
+++ b/runtime/queries/typst/injections.scm
diff --git a/queries/udev/highlights.scm b/runtime/queries/udev/highlights.scm
index f95238d70..f95238d70 100644
--- a/queries/udev/highlights.scm
+++ b/runtime/queries/udev/highlights.scm
diff --git a/queries/udev/injections.scm b/runtime/queries/udev/injections.scm
index 1718349c6..1718349c6 100644
--- a/queries/udev/injections.scm
+++ b/runtime/queries/udev/injections.scm
diff --git a/queries/udev/locals.scm b/runtime/queries/udev/locals.scm
index e1a2f65d2..e1a2f65d2 100644
--- a/queries/udev/locals.scm
+++ b/runtime/queries/udev/locals.scm
diff --git a/queries/ungrammar/folds.scm b/runtime/queries/ungrammar/folds.scm
index 206c4bed8..206c4bed8 100644
--- a/queries/ungrammar/folds.scm
+++ b/runtime/queries/ungrammar/folds.scm
diff --git a/queries/ungrammar/highlights.scm b/runtime/queries/ungrammar/highlights.scm
index 4ed523c9b..4ed523c9b 100644
--- a/queries/ungrammar/highlights.scm
+++ b/runtime/queries/ungrammar/highlights.scm
diff --git a/queries/ungrammar/indents.scm b/runtime/queries/ungrammar/indents.scm
index a5ececdbe..a5ececdbe 100644
--- a/queries/ungrammar/indents.scm
+++ b/runtime/queries/ungrammar/indents.scm
diff --git a/queries/typoscript/injections.scm b/runtime/queries/ungrammar/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/typoscript/injections.scm
+++ b/runtime/queries/ungrammar/injections.scm
diff --git a/queries/ungrammar/locals.scm b/runtime/queries/ungrammar/locals.scm
index 0f745bd14..0f745bd14 100644
--- a/queries/ungrammar/locals.scm
+++ b/runtime/queries/ungrammar/locals.scm
diff --git a/queries/unison/folds.scm b/runtime/queries/unison/folds.scm
index 3bfc585c3..3bfc585c3 100644
--- a/queries/unison/folds.scm
+++ b/runtime/queries/unison/folds.scm
diff --git a/queries/unison/highlights.scm b/runtime/queries/unison/highlights.scm
index 5fa721046..5fa721046 100644
--- a/queries/unison/highlights.scm
+++ b/runtime/queries/unison/highlights.scm
diff --git a/queries/ungrammar/injections.scm b/runtime/queries/unison/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/ungrammar/injections.scm
+++ b/runtime/queries/unison/injections.scm
diff --git a/queries/usd/folds.scm b/runtime/queries/usd/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/usd/folds.scm
+++ b/runtime/queries/usd/folds.scm
diff --git a/queries/usd/highlights.scm b/runtime/queries/usd/highlights.scm
index d6c2a3668..d6c2a3668 100644
--- a/queries/usd/highlights.scm
+++ b/runtime/queries/usd/highlights.scm
diff --git a/queries/usd/indents.scm b/runtime/queries/usd/indents.scm
index 217d12d3f..217d12d3f 100644
--- a/queries/usd/indents.scm
+++ b/runtime/queries/usd/indents.scm
diff --git a/queries/usd/injections.scm b/runtime/queries/usd/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/usd/injections.scm
+++ b/runtime/queries/usd/injections.scm
diff --git a/queries/usd/locals.scm b/runtime/queries/usd/locals.scm
index 89eb171d1..89eb171d1 100644
--- a/queries/usd/locals.scm
+++ b/runtime/queries/usd/locals.scm
diff --git a/queries/uxntal/folds.scm b/runtime/queries/uxntal/folds.scm
index 9e3f27db0..9e3f27db0 100644
--- a/queries/uxntal/folds.scm
+++ b/runtime/queries/uxntal/folds.scm
diff --git a/queries/uxntal/highlights.scm b/runtime/queries/uxntal/highlights.scm
index 962b6d7b9..962b6d7b9 100644
--- a/queries/uxntal/highlights.scm
+++ b/runtime/queries/uxntal/highlights.scm
diff --git a/queries/uxntal/indents.scm b/runtime/queries/uxntal/indents.scm
index b795b89ea..b795b89ea 100644
--- a/queries/uxntal/indents.scm
+++ b/runtime/queries/uxntal/indents.scm
diff --git a/queries/uxntal/injections.scm b/runtime/queries/uxntal/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/uxntal/injections.scm
+++ b/runtime/queries/uxntal/injections.scm
diff --git a/queries/uxntal/locals.scm b/runtime/queries/uxntal/locals.scm
index 41fbb5b66..41fbb5b66 100644
--- a/queries/uxntal/locals.scm
+++ b/runtime/queries/uxntal/locals.scm
diff --git a/queries/v/folds.scm b/runtime/queries/v/folds.scm
index 952b6bbe9..952b6bbe9 100644
--- a/queries/v/folds.scm
+++ b/runtime/queries/v/folds.scm
diff --git a/queries/v/highlights.scm b/runtime/queries/v/highlights.scm
index 982f3dbd5..982f3dbd5 100644
--- a/queries/v/highlights.scm
+++ b/runtime/queries/v/highlights.scm
diff --git a/queries/v/indents.scm b/runtime/queries/v/indents.scm
index bf090efae..bf090efae 100644
--- a/queries/v/indents.scm
+++ b/runtime/queries/v/indents.scm
diff --git a/queries/v/injections.scm b/runtime/queries/v/injections.scm
index 2d7618b3e..2d7618b3e 100644
--- a/queries/v/injections.scm
+++ b/runtime/queries/v/injections.scm
diff --git a/queries/v/locals.scm b/runtime/queries/v/locals.scm
index a3423f696..a3423f696 100644
--- a/queries/v/locals.scm
+++ b/runtime/queries/v/locals.scm
diff --git a/queries/vala/folds.scm b/runtime/queries/vala/folds.scm
index a334e609c..a334e609c 100644
--- a/queries/vala/folds.scm
+++ b/runtime/queries/vala/folds.scm
diff --git a/queries/vala/highlights.scm b/runtime/queries/vala/highlights.scm
index 0ba11caa1..0ba11caa1 100644
--- a/queries/vala/highlights.scm
+++ b/runtime/queries/vala/highlights.scm
diff --git a/queries/vala/injections.scm b/runtime/queries/vala/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/vala/injections.scm
+++ b/runtime/queries/vala/injections.scm
diff --git a/queries/vento/highlights.scm b/runtime/queries/vento/highlights.scm
index 9d35b2f66..9d35b2f66 100644
--- a/queries/vento/highlights.scm
+++ b/runtime/queries/vento/highlights.scm
diff --git a/queries/vento/injections.scm b/runtime/queries/vento/injections.scm
index 66023c7f8..66023c7f8 100644
--- a/queries/vento/injections.scm
+++ b/runtime/queries/vento/injections.scm
diff --git a/queries/verilog/folds.scm b/runtime/queries/verilog/folds.scm
index ea52476a4..ea52476a4 100644
--- a/queries/verilog/folds.scm
+++ b/runtime/queries/verilog/folds.scm
diff --git a/queries/verilog/highlights.scm b/runtime/queries/verilog/highlights.scm
index 1e004ef76..1e004ef76 100644
--- a/queries/verilog/highlights.scm
+++ b/runtime/queries/verilog/highlights.scm
diff --git a/queries/vhs/injections.scm b/runtime/queries/verilog/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/vhs/injections.scm
+++ b/runtime/queries/verilog/injections.scm
diff --git a/queries/vhdl/folds.scm b/runtime/queries/vhdl/folds.scm
index 9fc6deafe..9fc6deafe 100644
--- a/queries/vhdl/folds.scm
+++ b/runtime/queries/vhdl/folds.scm
diff --git a/queries/vhdl/highlights.scm b/runtime/queries/vhdl/highlights.scm
index 681dc2664..681dc2664 100644
--- a/queries/vhdl/highlights.scm
+++ b/runtime/queries/vhdl/highlights.scm
diff --git a/queries/vhdl/injections.scm b/runtime/queries/vhdl/injections.scm
index 5cbc06cb4..5cbc06cb4 100644
--- a/queries/vhdl/injections.scm
+++ b/runtime/queries/vhdl/injections.scm
diff --git a/queries/vhs/highlights.scm b/runtime/queries/vhs/highlights.scm
index 469fdd139..469fdd139 100644
--- a/queries/vhs/highlights.scm
+++ b/runtime/queries/vhs/highlights.scm
diff --git a/queries/wit/injections.scm b/runtime/queries/vhs/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/wit/injections.scm
+++ b/runtime/queries/vhs/injections.scm
diff --git a/queries/vim/folds.scm b/runtime/queries/vim/folds.scm
index 0a1fb695f..0a1fb695f 100644
--- a/queries/vim/folds.scm
+++ b/runtime/queries/vim/folds.scm
diff --git a/queries/vim/highlights.scm b/runtime/queries/vim/highlights.scm
index df7b3cf48..df7b3cf48 100644
--- a/queries/vim/highlights.scm
+++ b/runtime/queries/vim/highlights.scm
diff --git a/queries/vim/injections.scm b/runtime/queries/vim/injections.scm
index 30d11cbb4..30d11cbb4 100644
--- a/queries/vim/injections.scm
+++ b/runtime/queries/vim/injections.scm
diff --git a/queries/vim/locals.scm b/runtime/queries/vim/locals.scm
index 870647279..870647279 100644
--- a/queries/vim/locals.scm
+++ b/runtime/queries/vim/locals.scm
diff --git a/queries/vimdoc/highlights.scm b/runtime/queries/vimdoc/highlights.scm
index 829a643ae..829a643ae 100644
--- a/queries/vimdoc/highlights.scm
+++ b/runtime/queries/vimdoc/highlights.scm
diff --git a/queries/vimdoc/injections.scm b/runtime/queries/vimdoc/injections.scm
index 3b8fbf0f3..3b8fbf0f3 100644
--- a/queries/vimdoc/injections.scm
+++ b/runtime/queries/vimdoc/injections.scm
diff --git a/queries/vrl/folds.scm b/runtime/queries/vrl/folds.scm
index 6c6d587de..6c6d587de 100644
--- a/queries/vrl/folds.scm
+++ b/runtime/queries/vrl/folds.scm
diff --git a/queries/vrl/highlights.scm b/runtime/queries/vrl/highlights.scm
index f74d6dd55..f74d6dd55 100644
--- a/queries/vrl/highlights.scm
+++ b/runtime/queries/vrl/highlights.scm
diff --git a/queries/vrl/indents.scm b/runtime/queries/vrl/indents.scm
index 1fc1249e0..1fc1249e0 100644
--- a/queries/vrl/indents.scm
+++ b/runtime/queries/vrl/indents.scm
diff --git a/queries/vrl/injections.scm b/runtime/queries/vrl/injections.scm
index 5aaf9bcd2..5aaf9bcd2 100644
--- a/queries/vrl/injections.scm
+++ b/runtime/queries/vrl/injections.scm
diff --git a/queries/vrl/locals.scm b/runtime/queries/vrl/locals.scm
index 786da98c5..786da98c5 100644
--- a/queries/vrl/locals.scm
+++ b/runtime/queries/vrl/locals.scm
diff --git a/queries/vue/folds.scm b/runtime/queries/vue/folds.scm
index 314256e4e..314256e4e 100644
--- a/queries/vue/folds.scm
+++ b/runtime/queries/vue/folds.scm
diff --git a/queries/vue/highlights.scm b/runtime/queries/vue/highlights.scm
index 64195c346..64195c346 100644
--- a/queries/vue/highlights.scm
+++ b/runtime/queries/vue/highlights.scm
diff --git a/queries/vue/indents.scm b/runtime/queries/vue/indents.scm
index 6b377f323..6b377f323 100644
--- a/queries/vue/indents.scm
+++ b/runtime/queries/vue/indents.scm
diff --git a/queries/vue/injections.scm b/runtime/queries/vue/injections.scm
index 586964011..586964011 100644
--- a/queries/vue/injections.scm
+++ b/runtime/queries/vue/injections.scm
diff --git a/queries/wgsl/folds.scm b/runtime/queries/wgsl/folds.scm
index 60b526c53..60b526c53 100644
--- a/queries/wgsl/folds.scm
+++ b/runtime/queries/wgsl/folds.scm
diff --git a/queries/wgsl/highlights.scm b/runtime/queries/wgsl/highlights.scm
index 854ffe921..854ffe921 100644
--- a/queries/wgsl/highlights.scm
+++ b/runtime/queries/wgsl/highlights.scm
diff --git a/queries/wgsl/indents.scm b/runtime/queries/wgsl/indents.scm
index 579c665bc..579c665bc 100644
--- a/queries/wgsl/indents.scm
+++ b/runtime/queries/wgsl/indents.scm
diff --git a/queries/wgsl/injections.scm b/runtime/queries/wgsl/injections.scm
index 3cd6aac8e..3cd6aac8e 100644
--- a/queries/wgsl/injections.scm
+++ b/runtime/queries/wgsl/injections.scm
diff --git a/queries/wgsl_bevy/folds.scm b/runtime/queries/wgsl_bevy/folds.scm
index bb371406d..bb371406d 100644
--- a/queries/wgsl_bevy/folds.scm
+++ b/runtime/queries/wgsl_bevy/folds.scm
diff --git a/queries/wgsl_bevy/highlights.scm b/runtime/queries/wgsl_bevy/highlights.scm
index 2a6a9740c..2a6a9740c 100644
--- a/queries/wgsl_bevy/highlights.scm
+++ b/runtime/queries/wgsl_bevy/highlights.scm
diff --git a/queries/wgsl_bevy/indents.scm b/runtime/queries/wgsl_bevy/indents.scm
index 381321877..381321877 100644
--- a/queries/wgsl_bevy/indents.scm
+++ b/runtime/queries/wgsl_bevy/indents.scm
diff --git a/queries/wing/folds.scm b/runtime/queries/wing/folds.scm
index 0acd8adeb..0acd8adeb 100644
--- a/queries/wing/folds.scm
+++ b/runtime/queries/wing/folds.scm
diff --git a/queries/wing/highlights.scm b/runtime/queries/wing/highlights.scm
index 31e914f07..31e914f07 100644
--- a/queries/wing/highlights.scm
+++ b/runtime/queries/wing/highlights.scm
diff --git a/queries/wing/injections.scm b/runtime/queries/wing/injections.scm
index bd3fdaec5..bd3fdaec5 100644
--- a/queries/wing/injections.scm
+++ b/runtime/queries/wing/injections.scm
diff --git a/queries/wing/locals.scm b/runtime/queries/wing/locals.scm
index 9a860c5f2..9a860c5f2 100644
--- a/queries/wing/locals.scm
+++ b/runtime/queries/wing/locals.scm
diff --git a/queries/wit/folds.scm b/runtime/queries/wit/folds.scm
index 7f84ddd2e..7f84ddd2e 100644
--- a/queries/wit/folds.scm
+++ b/runtime/queries/wit/folds.scm
diff --git a/queries/wit/highlights.scm b/runtime/queries/wit/highlights.scm
index 1f4b01cce..1f4b01cce 100644
--- a/queries/wit/highlights.scm
+++ b/runtime/queries/wit/highlights.scm
diff --git a/queries/xcompose/injections.scm b/runtime/queries/wit/injections.scm
index 2f0e58eb6..2f0e58eb6 100644
--- a/queries/xcompose/injections.scm
+++ b/runtime/queries/wit/injections.scm
diff --git a/queries/xcompose/highlights.scm b/runtime/queries/xcompose/highlights.scm
index 2afab42f9..2afab42f9 100644
--- a/queries/xcompose/highlights.scm
+++ b/runtime/queries/xcompose/highlights.scm
diff --git a/queries/typst/injections.scm b/runtime/queries/xcompose/injections.scm
index 344c6a308..2f0e58eb6 100644
--- a/queries/typst/injections.scm
+++ b/runtime/queries/xcompose/injections.scm
@@ -1,6 +1,2 @@
((comment) @injection.content
(#set! injection.language "comment"))
-
-(raw_blck
- (ident) @injection.language
- (blob) @injection.content)
diff --git a/queries/xcompose/locals.scm b/runtime/queries/xcompose/locals.scm
index 9b6f359bf..9b6f359bf 100644
--- a/queries/xcompose/locals.scm
+++ b/runtime/queries/xcompose/locals.scm
diff --git a/queries/xml/folds.scm b/runtime/queries/xml/folds.scm
index 494e8c00a..494e8c00a 100644
--- a/queries/xml/folds.scm
+++ b/runtime/queries/xml/folds.scm
diff --git a/queries/xml/highlights.scm b/runtime/queries/xml/highlights.scm
index 85e6e9bb4..85e6e9bb4 100644
--- a/queries/xml/highlights.scm
+++ b/runtime/queries/xml/highlights.scm
diff --git a/queries/xml/indents.scm b/runtime/queries/xml/indents.scm
index 803c6e8a1..803c6e8a1 100644
--- a/queries/xml/indents.scm
+++ b/runtime/queries/xml/indents.scm
diff --git a/queries/xml/injections.scm b/runtime/queries/xml/injections.scm
index 02e99f02d..02e99f02d 100644
--- a/queries/xml/injections.scm
+++ b/runtime/queries/xml/injections.scm
diff --git a/queries/xml/locals.scm b/runtime/queries/xml/locals.scm
index 2806b530c..2806b530c 100644
--- a/queries/xml/locals.scm
+++ b/runtime/queries/xml/locals.scm
diff --git a/queries/xresources/folds.scm b/runtime/queries/xresources/folds.scm
index 9cc7d5cec..9cc7d5cec 100644
--- a/queries/xresources/folds.scm
+++ b/runtime/queries/xresources/folds.scm
diff --git a/queries/xresources/highlights.scm b/runtime/queries/xresources/highlights.scm
index 4bf394788..4bf394788 100644
--- a/queries/xresources/highlights.scm
+++ b/runtime/queries/xresources/highlights.scm
diff --git a/queries/xresources/injections.scm b/runtime/queries/xresources/injections.scm
index 1f12a2148..1f12a2148 100644
--- a/queries/xresources/injections.scm
+++ b/runtime/queries/xresources/injections.scm
diff --git a/queries/xresources/locals.scm b/runtime/queries/xresources/locals.scm
index a7f932418..a7f932418 100644
--- a/queries/xresources/locals.scm
+++ b/runtime/queries/xresources/locals.scm
diff --git a/queries/yaml/folds.scm b/runtime/queries/yaml/folds.scm
index c426afb87..c426afb87 100644
--- a/queries/yaml/folds.scm
+++ b/runtime/queries/yaml/folds.scm
diff --git a/queries/yaml/highlights.scm b/runtime/queries/yaml/highlights.scm
index 9aed59ce4..9aed59ce4 100644
--- a/queries/yaml/highlights.scm
+++ b/runtime/queries/yaml/highlights.scm
diff --git a/queries/yaml/indents.scm b/runtime/queries/yaml/indents.scm
index f7146d316..f7146d316 100644
--- a/queries/yaml/indents.scm
+++ b/runtime/queries/yaml/indents.scm
diff --git a/queries/yaml/injections.scm b/runtime/queries/yaml/injections.scm
index 143af1924..143af1924 100644
--- a/queries/yaml/injections.scm
+++ b/runtime/queries/yaml/injections.scm
diff --git a/queries/yaml/locals.scm b/runtime/queries/yaml/locals.scm
index f7c79e082..f7c79e082 100644
--- a/queries/yaml/locals.scm
+++ b/runtime/queries/yaml/locals.scm
diff --git a/queries/yang/folds.scm b/runtime/queries/yang/folds.scm
index fd7d23999..fd7d23999 100644
--- a/queries/yang/folds.scm
+++ b/runtime/queries/yang/folds.scm
diff --git a/queries/yang/highlights.scm b/runtime/queries/yang/highlights.scm
index 1fb588af1..1fb588af1 100644
--- a/queries/yang/highlights.scm
+++ b/runtime/queries/yang/highlights.scm
diff --git a/queries/yang/indents.scm b/runtime/queries/yang/indents.scm
index cc4b3caee..cc4b3caee 100644
--- a/queries/yang/indents.scm
+++ b/runtime/queries/yang/indents.scm
diff --git a/queries/yang/injections.scm b/runtime/queries/yang/injections.scm
index 4219eb30a..4219eb30a 100644
--- a/queries/yang/injections.scm
+++ b/runtime/queries/yang/injections.scm
diff --git a/queries/yuck/folds.scm b/runtime/queries/yuck/folds.scm
index bad5a07c9..bad5a07c9 100644
--- a/queries/yuck/folds.scm
+++ b/runtime/queries/yuck/folds.scm
diff --git a/queries/yuck/highlights.scm b/runtime/queries/yuck/highlights.scm
index 7b9a9d203..7b9a9d203 100644
--- a/queries/yuck/highlights.scm
+++ b/runtime/queries/yuck/highlights.scm
diff --git a/queries/yuck/indents.scm b/runtime/queries/yuck/indents.scm
index 515795021..515795021 100644
--- a/queries/yuck/indents.scm
+++ b/runtime/queries/yuck/indents.scm
diff --git a/queries/yuck/injections.scm b/runtime/queries/yuck/injections.scm
index 298a8d070..298a8d070 100644
--- a/queries/yuck/injections.scm
+++ b/runtime/queries/yuck/injections.scm
diff --git a/queries/yuck/locals.scm b/runtime/queries/yuck/locals.scm
index 9f40b2082..9f40b2082 100644
--- a/queries/yuck/locals.scm
+++ b/runtime/queries/yuck/locals.scm
diff --git a/queries/zathurarc/highlights.scm b/runtime/queries/zathurarc/highlights.scm
index 04daa190a..04daa190a 100644
--- a/queries/zathurarc/highlights.scm
+++ b/runtime/queries/zathurarc/highlights.scm
diff --git a/queries/zathurarc/injections.scm b/runtime/queries/zathurarc/injections.scm
index 8e45396b7..8e45396b7 100644
--- a/queries/zathurarc/injections.scm
+++ b/runtime/queries/zathurarc/injections.scm
diff --git a/queries/zig/folds.scm b/runtime/queries/zig/folds.scm
index 6be5c62ba..6be5c62ba 100644
--- a/queries/zig/folds.scm
+++ b/runtime/queries/zig/folds.scm
diff --git a/queries/zig/highlights.scm b/runtime/queries/zig/highlights.scm
index 1f9006781..1f9006781 100644
--- a/queries/zig/highlights.scm
+++ b/runtime/queries/zig/highlights.scm
diff --git a/queries/zig/indents.scm b/runtime/queries/zig/indents.scm
index 11ff9ca16..11ff9ca16 100644
--- a/queries/zig/indents.scm
+++ b/runtime/queries/zig/indents.scm
diff --git a/queries/zig/injections.scm b/runtime/queries/zig/injections.scm
index 48a1b44c9..48a1b44c9 100644
--- a/queries/zig/injections.scm
+++ b/runtime/queries/zig/injections.scm
diff --git a/queries/zig/locals.scm b/runtime/queries/zig/locals.scm
index b9e63441d..b9e63441d 100644
--- a/queries/zig/locals.scm
+++ b/runtime/queries/zig/locals.scm
diff --git a/queries/ziggy/highlights.scm b/runtime/queries/ziggy/highlights.scm
index 27f6c9a48..27f6c9a48 100644
--- a/queries/ziggy/highlights.scm
+++ b/runtime/queries/ziggy/highlights.scm
diff --git a/queries/ziggy/indents.scm b/runtime/queries/ziggy/indents.scm
index 223bde81a..223bde81a 100644
--- a/queries/ziggy/indents.scm
+++ b/runtime/queries/ziggy/indents.scm
diff --git a/queries/ziggy_schema/highlights.scm b/runtime/queries/ziggy_schema/highlights.scm
index 4e1770127..4e1770127 100644
--- a/queries/ziggy_schema/highlights.scm
+++ b/runtime/queries/ziggy_schema/highlights.scm
diff --git a/queries/ziggy_schema/indents.scm b/runtime/queries/ziggy_schema/indents.scm
index 6f7f7b87c..6f7f7b87c 100644
--- a/queries/ziggy_schema/indents.scm
+++ b/runtime/queries/ziggy_schema/indents.scm
diff --git a/scripts/check-queries.lua b/scripts/check-queries.lua
index f3b45ea1a..f5d6d463b 100755
--- a/scripts/check-queries.lua
+++ b/scripts/check-queries.lua
@@ -1,36 +1,35 @@
#!/usr/bin/env -S nvim -l
-vim.opt.rtp:prepend "./"
+vim.opt.runtimepath:append('.')
-- Equivalent to print(), but this will ensure consistent output regardless of
-- operating system.
local function io_print(text)
if not text then
- text = ""
+ text = ''
end
- io.write(text, "\n")
+ io.write(text, '\n')
end
local function extract_captures()
- local lines = vim.fn.readfile "CONTRIBUTING.md"
local captures = {}
local current_query
- for _, line in ipairs(lines) do
- if vim.startswith(line, "### ") then
- current_query = vim.fn.tolower(line:sub(5))
- elseif vim.startswith(line, "@") and current_query then
+ for line in io.lines('CONTRIBUTING.md') do
+ if vim.startswith(line, '### ') then
+ current_query = line:sub(5):lower()
+ elseif vim.startswith(line, '@') and current_query then
if not captures[current_query] then
captures[current_query] = {}
end
- table.insert(captures[current_query], vim.split(line:sub(2), " ", true)[1])
+ table.insert(captures[current_query], vim.split(line:sub(2), ' ', true)[1])
end
end
-- Complete captures for injections.
- local parsers = vim.tbl_keys(require("nvim-treesitter.parsers").list)
+ local parsers = vim.tbl_keys(require('nvim-treesitter.parsers').configs)
for _, lang in pairs(parsers) do
- table.insert(captures["injections"], lang)
+ table.insert(captures['injections'], lang)
end
return captures
@@ -38,36 +37,38 @@ end
local function do_check()
local timings = {}
- local queries = require "nvim-treesitter.query"
- local parsers = #_G.arg > 0 and { unpack(_G.arg) } or require("nvim-treesitter.info").installed_parsers()
- local query_types = queries.built_in_query_groups
+ local parsers = require('nvim-treesitter.config').installed_parsers()
+ local query_types = require('nvim-treesitter.health').bundled_queries
local captures = extract_captures()
local errors = {}
- io_print "::group::Check parsers"
+ io_print('::group::Check parsers')
for _, lang in pairs(parsers) do
timings[lang] = {}
for _, query_type in pairs(query_types) do
local before = vim.loop.hrtime()
- local ok, query = pcall(queries.get_query, lang, query_type)
+ local ok, query = pcall(vim.treesitter.query.get, lang, query_type)
local after = vim.loop.hrtime()
local duration = after - before
table.insert(timings, { duration = duration, lang = lang, query_type = query_type })
- io_print("Checking " .. lang .. " " .. query_type .. string.format(" (%.02fms)", duration * 1e-6))
+ io_print(
+ 'Checking ' .. lang .. ' ' .. query_type .. string.format(' (%.02fms)', duration * 1e-6)
+ )
if not ok then
- local err_msg = lang .. " (" .. query_type .. "): " .. query
+ local err_msg = lang .. ' (' .. query_type .. '): ' .. query
errors[#errors + 1] = err_msg
else
if query then
for _, capture in ipairs(query.captures) do
local is_valid = (
- vim.startswith(capture, "_") -- Helpers.
- or vim.tbl_contains(captures[query_type], capture)
+ vim.startswith(capture, '_') -- Helpers.
+ or vim.list_contains(captures[query_type], capture)
)
if not is_valid then
- local error = string.format("(x) Invalid capture @%s in %s for %s.", capture, query_type, lang)
+ local error =
+ string.format('(x) Invalid capture @%s in %s for %s.', capture, query_type, lang)
errors[#errors + 1] = error
end
end
@@ -76,10 +77,10 @@ local function do_check()
end
end
- io_print "::endgroup::"
+ io_print('::endgroup::')
if #errors > 0 then
- io_print "\nCheck failed!\nErrors:"
+ io_print('\nCheck failed!\nErrors:')
for _, err in ipairs(errors) do
print(err)
end
@@ -89,35 +90,42 @@ local function do_check()
end
local ok, result = pcall(do_check)
-local allowed_to_fail = vim.split(vim.env.ALLOWED_INSTALLATION_FAILURES or "", ",", true)
+local allowed_to_fail = vim.split(vim.env.ALLOWED_INSTALLATION_FAILURES or '', ',', true)
-for k, v in pairs(require("nvim-treesitter.parsers").get_parser_configs()) do
- if not require("nvim-treesitter.parsers").has_parser(k) then
+for k, v in pairs(require('nvim-treesitter.parsers').configs) do
+ if #vim.api.nvim_get_runtime_file('parser/' .. k .. '.*', false) == 0 then
-- On CI all parsers that can be installed from C files should be installed
if
vim.env.CI
and not v.install_info.requires_generate_from_grammar
- and not vim.tbl_contains(allowed_to_fail, k)
+ and not vim.list_contains(allowed_to_fail, k)
then
- io_print("Error: parser for " .. k .. " is not installed")
- vim.cmd "cq"
+ io_print('Error: parser for ' .. k .. ' is not installed')
+ vim.cmd('cq')
else
- io_print("Warning: parser for " .. k .. " is not installed")
+ io_print('Warning: parser for ' .. k .. ' is not installed')
end
end
end
if ok then
- io_print "::group::Timings"
+ io_print('::group::Timings')
table.sort(result, function(a, b)
return a.duration < b.duration
end)
for i, val in ipairs(result) do
- io_print(string.format("%i. %.02fms %s %s", #result - i + 1, val.duration * 1e-6, val.lang, val.query_type))
+ io_print(
+ string.format(
+ '%i. %.02fms %s %s',
+ #result - i + 1,
+ val.duration * 1e-6,
+ val.lang,
+ val.query_type
+ )
+ )
end
- io_print "::endgroup::"
- io_print "Check successful!"
- vim.cmd "q"
+ io_print('::endgroup::')
+ io_print('Check successful!')
else
- vim.cmd "cq"
+ vim.cmd('cq')
end
diff --git a/scripts/ci-install.sh b/scripts/ci-install.sh
index 5ab8887de..100cfde27 100755
--- a/scripts/ci-install.sh
+++ b/scripts/ci-install.sh
@@ -2,6 +2,8 @@
set -e
+NVIM_TAG=${NVIM_TAG-nightly}
+
os=$(uname -s)
if [[ $os == Linux ]]; then
wget https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim-linux-x86_64.tar.gz
@@ -18,7 +20,7 @@ elif [[ $os == Darwin ]]; then
mkdir -p ~/.local/share/nvim/site/pack/nvim-treesitter/start
ln -s "$PWD" ~/.local/share/nvim/site/pack/nvim-treesitter/start
else
- curl -L https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim-win64.zip -o nvim-win64.zip
+ curl -L "https://github.com/neovim/neovim/releases/download/${NVIM_TAG}/nvim-win64.zip" -o nvim-win64.zip
unzip nvim-win64
mkdir -p ~/AppData/Local/nvim/pack/nvim-treesitter/start
mkdir -p ~/AppData/Local/nvim-data
diff --git a/scripts/format-queries.lua b/scripts/format-queries.lua
index 0839760d2..8639daf2b 100755
--- a/scripts/format-queries.lua
+++ b/scripts/format-queries.lua
@@ -6,16 +6,16 @@ local get_node_text = ts.get_node_text
---@type string[]
local files
-local arg = _G.arg[1] or "."
-if arg:match ".*%.scm$" then
+local arg = _G.arg[1] or '.'
+if arg:match('.*%.scm$') then
files = { arg }
else
- files = vim.fn.split(vim.fn.glob(arg .. "/**/*.scm"))
+ files = vim.fn.split(vim.fn.glob(arg .. '/**/*.scm'))
end
-ts.query.add_predicate("kind-eq?", function(match, _, _, pred)
+ts.query.add_predicate('kind-eq?', function(match, _, _, pred)
local cap = match[pred[2]]
- local node = type(cap) == "table" and cap[1] or cap
+ local node = type(cap) == 'table' and cap[1] or cap
if not node then
return true
end
@@ -24,9 +24,9 @@ ts.query.add_predicate("kind-eq?", function(match, _, _, pred)
return vim.tbl_contains(types, node:type())
end, true)
-ts.query.add_predicate("is-start-of-line?", function(match, _, _, pred)
+ts.query.add_predicate('is-start-of-line?', function(match, _, _, pred)
local cap = match[pred[2]]
- local node = type(cap) == "table" and cap[1] or cap
+ local node = type(cap) == 'table' and cap[1] or cap
if not node then
return true
end
@@ -35,7 +35,7 @@ ts.query.add_predicate("is-start-of-line?", function(match, _, _, pred)
end)
--- Control the indent here. Change to \t if uses tab instead
-local indent_str = " "
+local indent_str = ' '
local indent_width_plus_one = 3
local textwidth = 100
@@ -328,7 +328,7 @@ local function append_lines(lines, lines_to_append)
for i = 1, #lines_to_append, 1 do
lines[#lines] = lines[#lines] .. lines_to_append[i]
if i ~= #lines_to_append then
- lines[#lines + 1] = ""
+ lines[#lines + 1] = ''
end
end
end
@@ -347,16 +347,17 @@ local function iter(bufnr, node, lines, q, level)
apply_newline = false
lines[#lines + 1] = string.rep(indent_str, level)
end
- if q["format.ignore"][id] then
- local text = vim.split(get_node_text(child, bufnr):gsub("\r\n?", "\n"), "\n", { trimempty = true })
+ if q['format.ignore'][id] then
+ local text =
+ vim.split(get_node_text(child, bufnr):gsub('\r\n?', '\n'), '\n', { trimempty = true })
append_lines(lines, text)
- elseif not q["format.remove"][id] then
- if not q["format.cancel-prepend"][id] then
- if q["format.prepend-newline"][id] then
+ elseif not q['format.remove'][id] then
+ if not q['format.cancel-prepend'][id] then
+ if q['format.prepend-newline'][id] then
lines[#lines + 1] = string.rep(indent_str, level)
- elseif q["format.prepend-space"][id] then
- if not q["format.prepend-space"][id]["conditional-newline"] then
- lines[#lines] = lines[#lines] .. " "
+ elseif q['format.prepend-space'][id] then
+ if not q['format.prepend-space'][id]['conditional-newline'] then
+ lines[#lines] = lines[#lines] .. ' '
elseif child:byte_length() + 1 + #lines[#lines] > textwidth then
lines[#lines + 1] = string.rep(indent_str, level)
else
@@ -365,43 +366,47 @@ local function iter(bufnr, node, lines, q, level)
local _, _, byte_start = child:start()
local _, _, byte_end = node:end_()
if
- q["format.prepend-space"][id]["lookahead-newline"]
+ q['format.prepend-space'][id]['lookahead-newline']
and (byte_end - byte_start) + #lines[#lines] > textwidth
then
lines[#lines + 1] = string.rep(indent_str, level)
else
- lines[#lines] = lines[#lines] .. " "
+ lines[#lines] = lines[#lines] .. ' '
end
end
end
end
- if q["format.replace"][id] then
- append_lines(lines, vim.split(q["format.replace"][id].text, "\n", { trimempty = true }))
+ if q['format.replace'][id] then
+ append_lines(lines, vim.split(q['format.replace'][id].text, '\n', { trimempty = true }))
elseif
child:named_child_count() == 0
-- Workaround to preserve string content
- or child:type() == "string"
+ or child:type() == 'string'
then
append_lines(
lines,
- vim.split(string.gsub(get_node_text(child, bufnr), "\r\n?", "\n"), "\n+", { trimempty = true })
+ vim.split(
+ string.gsub(get_node_text(child, bufnr), '\r\n?', '\n'),
+ '\n+',
+ { trimempty = true }
+ )
)
else
iter(bufnr, child, lines, q, level)
end
- if q["format.indent.begin"][id] then
+ if q['format.indent.begin'][id] then
level = level + 1
apply_newline = true
- elseif q["format.indent.dedent"][id] then
+ elseif q['format.indent.dedent'][id] then
lines[#lines] = string.sub(lines[#lines], indent_width_plus_one)
end
end
- if q["format.cancel-append"][id] then
+ if q['format.cancel-append'][id] then
apply_newline = false
- elseif q["format.append-newline"][id] then
+ elseif q['format.append-newline'][id] then
apply_newline = true
- elseif q["format.append-space"][id] then
- lines[#lines] = lines[#lines] .. " "
+ elseif q['format.append-space'][id] then
+ lines[#lines] = lines[#lines] .. ' '
end
end
end
@@ -409,7 +414,7 @@ end
---@param bufnr integer
---@param queries string
local function format(bufnr, queries)
- local lines = { "" }
+ local lines = { '' }
-- stylua: ignore
local map = {
['format.ignore'] = {}, -- Ignore the node and its children
@@ -424,11 +429,12 @@ local function format(bufnr, queries)
['format.replace'] = {}, -- Dedicated capture used to store results of `(#gsub!)`
['format.remove'] = {}, -- Do not add the syntax node to the result, i.e. brackets [], parens ()
}
- local root = ts.get_parser(bufnr, "query"):parse(true)[1]:root()
- local query = ts.query.parse("query", queries)
+ local root = ts.get_parser(bufnr, 'query'):parse(true)[1]:root()
+ local query = ts.query.parse('query', queries)
for id, node, metadata in query:iter_captures(root, bufnr) do
- if query.captures[id]:sub(1, 1) ~= "_" then
- map[query.captures[id]][node:id()] = metadata and (metadata[id] and metadata[id] or metadata) or {}
+ if query.captures[id]:sub(1, 1) ~= '_' then
+ map[query.captures[id]][node:id()] = metadata and (metadata[id] and metadata[id] or metadata)
+ or {}
end
end
@@ -443,4 +449,4 @@ for _, file in ipairs(files) do
format(buf, format_queries)
end
-vim.cmd "silent wa!"
+vim.cmd('silent wa!')
diff --git a/scripts/minimal_init.lua b/scripts/minimal_init.lua
index f7a7ee590..c826ddbf2 100644
--- a/scripts/minimal_init.lua
+++ b/scripts/minimal_init.lua
@@ -1,25 +1,25 @@
-vim.opt.runtimepath:append "."
-vim.cmd.runtime { "plugin/plenary.vim", bang = true }
-vim.cmd.runtime { "plugin/nvim-treesitter.lua", bang = true }
+vim.opt.runtimepath:append('.')
+vim.cmd.runtime({ 'plugin/plenary.vim', bang = true })
+vim.cmd.runtime({ 'plugin/nvim-treesitter.lua', bang = true })
+vim.cmd.runtime({ 'plugin/query_predicates.lua', bang = true })
-vim.filetype.add {
+vim.filetype.add({
extension = {
- conf = "hocon",
- cmm = "t32",
- hurl = "hurl",
- ncl = "nickel",
- tig = "tiger",
- usd = "usd",
- usda = "usd",
- wgsl = "wgsl",
- w = "wing",
+ conf = 'hocon',
+ cmm = 't32',
+ ncl = 'nickel',
+ tig = 'tiger',
+ w = 'wing',
},
-}
+})
vim.o.swapfile = false
vim.bo.swapfile = false
-require("nvim-treesitter.configs").setup {
- indent = { enable = true },
- highlight = { enable = true },
-}
+require('nvim-treesitter').setup()
+vim.api.nvim_create_autocmd('FileType', {
+ callback = function(args)
+ pcall(vim.treesitter.start)
+ vim.bo[args.buffer].indentexpr = 'v:lua.require"nvim-treesitter".indentexpr()'
+ end,
+})
diff --git a/scripts/update-lockfile.sh b/scripts/update-lockfile.sh
index 22460d14b..d950b321a 100755
--- a/scripts/update-lockfile.sh
+++ b/scripts/update-lockfile.sh
@@ -1,18 +1,20 @@
#!/usr/bin/env bash
make_ignored() {
- if [[ -n $1 ]]; then
+ if [ -n "$1" ]
+ then
while read -r lang; do
- if [[ $lang != "$1" ]]; then
- printf '%s,' "$lang"
+ if [ "$lang" != "$1" ]
+ then
+ printf "%s," "$lang"
fi
- done < <(jq -r 'keys[]' lockfile.json)
+ done < <(jq 'keys|@sh' -c lockfile.json)
fi
}
-SKIP_LOCKFILE_UPDATE_FOR_LANGS="$(make_ignored "$1")" \
- nvim --headless -c 'luafile ./scripts/write-lockfile.lua' +q
+TO_IGNORE=$(make_ignored $1)
+SKIP_LOCKFILE_UPDATE_FOR_LANGS="$TO_IGNORE" nvim -l ./scripts/write-lockfile.lua
# Pretty print
cp lockfile.json /tmp/lockfile.json
-jq --sort-keys > lockfile.json < /tmp/lockfile.json
+cat /tmp/lockfile.json | jq --sort-keys > lockfile.json
diff --git a/scripts/update-readme.lua b/scripts/update-readme.lua
index 251a64af4..825d84037 100755
--- a/scripts/update-readme.lua
+++ b/scripts/update-readme.lua
@@ -1,59 +1,85 @@
#!/usr/bin/env -S nvim -l
+vim.opt.runtimepath:append('.')
---@class Parser
---@field name string
---@field parser ParserInfo
-local parsers = require("nvim-treesitter.parsers").get_parser_configs()
+local parsers = require('nvim-treesitter.parsers').configs
local sorted_parsers = {}
-
for k, v in pairs(parsers) do
table.insert(sorted_parsers, { name = k, parser = v })
end
-
----@param a Parser
----@param b Parser
table.sort(sorted_parsers, function(a, b)
return a.name < b.name
end)
-local generated_text = ""
+local tiers = require('nvim-treesitter.parsers').tiers
----@param v Parser
-for _, v in ipairs(sorted_parsers) do
- local link = "[" .. (v.parser.readme_name or v.name) .. "](" .. v.parser.install_info.url .. ")"
+local generated_text = [[
+Language | Tier | Queries | CLI | NPM | Maintainer
+-------- |:----:|:-------:|:---:|:---:| ----------
+]]
+local footnotes = ''
- if v.parser.maintainers then
- generated_text = generated_text
- .. "- [x] "
- .. link
- .. " ("
- .. (v.parser.experimental and "experimental, " or "")
- .. "maintained by "
- .. table.concat(v.parser.maintainers, ", ")
- .. ")\n"
- else
- generated_text = generated_text .. "- [ ] " .. link .. (v.parser.experimental and " (experimental)" or "") .. "\n"
+for _, v in ipairs(sorted_parsers) do
+ local p = v.parser
+ -- language
+ generated_text = generated_text
+ .. '['
+ .. v.name
+ .. ']('
+ .. p.install_info.url
+ .. ')'
+ .. (p.readme_note and '[^' .. v.name .. ']' or '')
+ .. ' | '
+ if p.readme_note then
+ footnotes = footnotes .. '[^' .. v.name .. ']: ' .. p.readme_note .. '\n'
end
-end
-print(generated_text)
-print "\n"
+ -- tier
+ generated_text = generated_text .. (p.tier and tiers[p.tier] or '') .. ' | '
+
+ -- queries
+ generated_text = generated_text
+ .. '`'
+ .. (vim.loop.fs_stat('runtime/queries/' .. v.name .. '/highlights.scm') and 'H' or ' ')
+ .. (vim.loop.fs_stat('runtime/queries/' .. v.name .. '/folds.scm') and 'F' or ' ')
+ .. (vim.loop.fs_stat('runtime/queries/' .. v.name .. '/indents.scm') and 'I' or ' ')
+ .. (vim.loop.fs_stat('runtime/queries/' .. v.name .. '/injections.scm') and 'J' or ' ')
+ .. '` | '
-local readme_text = table.concat(vim.fn.readfile "README.md", "\n")
+ -- CLI
+ generated_text = generated_text
+ .. (p.install_info.requires_generate_from_grammar and '✓' or '')
+ .. ' | '
+
+ -- NPM
+ generated_text = generated_text .. (p.install_info.generate_requires_npm and '✓' or '') .. ' | '
+
+ -- Maintainer
+ generated_text = generated_text
+ .. (p.maintainers and table.concat(p.maintainers, ', ') or '')
+ .. '\n'
+end
+generated_text = generated_text .. footnotes
+
+local readme = assert(io.open('SUPPORTED_LANGUAGES.md', 'r'))
+local readme_text = readme:read('*a')
+readme:close()
local new_readme_text = string.gsub(
readme_text,
- "<!%-%-parserinfo%-%->.*<!%-%-parserinfo%-%->",
- "<!--parserinfo-->\n" .. generated_text .. "<!--parserinfo-->"
+ '<!%-%-parserinfo%-%->.*<!%-%-parserinfo%-%->',
+ '<!--parserinfo-->\n' .. generated_text .. '<!--parserinfo-->'
)
-vim.fn.writefile(vim.fn.split(new_readme_text, "\n"), "README.md")
+
+readme = assert(io.open('SUPPORTED_LANGUAGES.md', 'w'))
+readme:write(new_readme_text)
+readme:close()
if string.find(readme_text, generated_text, 1, true) then
- print "README.md is up-to-date!"
- vim.cmd "q"
+ print('README.md is up-to-date\n')
else
- print "New README.md was written. Please commit that change! Old text was: "
- print(string.sub(readme_text, string.find(readme_text, "<!%-%-parserinfo%-%->.*<!%-%-parserinfo%-%->")))
- vim.cmd "cq"
+ print('New README.md was written\n')
end
diff --git a/scripts/write-lockfile.lua b/scripts/write-lockfile.lua
index 7a7606c51..a264af83c 100755
--- a/scripts/write-lockfile.lua
+++ b/scripts/write-lockfile.lua
@@ -1,14 +1,52 @@
#!/usr/bin/env -S nvim -l
+vim.opt.runtimepath:append('.')
----@type string|any[]
-local skip_langs = vim.fn.getenv "SKIP_LOCKFILE_UPDATE_FOR_LANGS"
+-- Load previous lockfile
+local filename = require('nvim-treesitter.utils').get_package_path('lockfile.json')
+local file = assert(io.open(filename, 'r'))
+local lockfile = vim.json.decode(file:read('*a'))
+file:close()
-if skip_langs == vim.NIL then
- skip_langs = {}
-else
- ---@diagnostic disable-next-line: param-type-mismatch
- skip_langs = vim.fn.split(skip_langs, ",")
+---@type string?
+local skip_lang_string = os.getenv('SKIP_LOCKFILE_UPDATE_FOR_LANGS')
+local skip_langs = skip_lang_string and vim.split(skip_lang_string, ',') or {}
+vim.print('Skipping languages: ', skip_langs)
+
+local sorted_parsers = {}
+local configs = require('nvim-treesitter.parsers').configs
+for k, v in pairs(configs) do
+ table.insert(sorted_parsers, { name = k, parser = v })
+end
+table.sort(sorted_parsers, function(a, b)
+ return a.name < b.name
+end)
+
+-- check for new revisions
+for _, v in ipairs(sorted_parsers) do
+ if skip_langs and not vim.list_contains(skip_langs, v.name) then
+ local sha ---@type string
+ 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 }
+ print(v.name .. ': ' .. sha)
+ else
+ print('Skipping ' .. v.name)
+ end
end
+vim.print(lockfile)
-require("nvim-treesitter.install").write_lockfile("verbose", skip_langs)
-vim.cmd "q"
+-- write new lockfile
+file = assert(io.open(filename, 'w'))
+file:write(vim.json.encode(lockfile))
+file:close()
diff --git a/tests/indent/algorithm_spec.lua b/tests/indent/algorithm_spec.lua
index faf7998ec..d93521040 100644
--- a/tests/indent/algorithm_spec.lua
+++ b/tests/indent/algorithm_spec.lua
@@ -1,18 +1,34 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-- local XFAIL = require("tests.indent.common").XFAIL
-local runner = Runner:new(it, "tests/indent/algorithm", {
+local runner = Runner:new(it, 'tests/indent/algorithm', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = true,
})
-describe("test indent algorithm: ", function()
- describe("new line:", function()
- runner:new_line("trailing.py", { on_line = 1, text = "x: str", indent = 4 }, "indent next line, ignore comment")
- runner:new_line("trailing.py", { on_line = 4, text = "pass", indent = 8 }, "indent next line, ignore comment")
- runner:new_line("trailing.py", { on_line = 6, text = "pass", indent = 4 }, "indent next line, ignore whitespace")
- runner:new_line("trailing_whitespace.html", { on_line = 9, text = "x", indent = 8 }, "not ignore @indent.end")
+describe('test indent algorithm: ', function()
+ describe('new line:', function()
+ runner:new_line(
+ 'trailing.py',
+ { on_line = 1, text = 'x: str', indent = 4 },
+ 'indent next line, ignore comment'
+ )
+ runner:new_line(
+ 'trailing.py',
+ { on_line = 4, text = 'pass', indent = 8 },
+ 'indent next line, ignore comment'
+ )
+ runner:new_line(
+ 'trailing.py',
+ { on_line = 6, text = 'pass', indent = 4 },
+ 'indent next line, ignore whitespace'
+ )
+ runner:new_line(
+ 'trailing_whitespace.html',
+ { on_line = 9, text = 'x', indent = 8 },
+ 'not ignore @indent.end'
+ )
end)
end)
diff --git a/tests/indent/angular_spec.lua b/tests/indent/angular_spec.lua
index 2090420ce..3ead248b7 100644
--- a/tests/indent/angular_spec.lua
+++ b/tests/indent/angular_spec.lua
@@ -1,18 +1,18 @@
-local Runner = require("tests.indent.common").Runner
-local runner = Runner:new(it, "tests/indent/angular", {
+local Runner = require('tests.indent.common').Runner
+local runner = Runner:new(it, 'tests/indent/angular', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
- filetype = "htmlangular",
+ filetype = 'htmlangular',
})
-describe("indent HTML Angular:", function()
- describe("whole file:", function()
- runner:whole_file "."
+describe('indent HTML Angular:', function()
+ describe('whole file:', function()
+ runner:whole_file('.')
end)
- describe("new line:", function()
- for _, info in ipairs {
+ describe('new line:', function()
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
@@ -25,11 +25,11 @@ describe("indent HTML Angular:", function()
{ 12, 6 },
{ 13, 4 },
{ 14, 2 },
- } do
- runner:new_line("if-else.html", { on_line = info[1], text = "//", indent = info[2] })
+ }) do
+ runner:new_line('if-else.html', { on_line = info[1], text = '//', indent = info[2] })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 4 },
{ 3, 6 },
@@ -39,21 +39,21 @@ describe("indent HTML Angular:", function()
{ 9, 6 },
{ 10, 6 },
{ 12, 2 },
- } do
- runner:new_line("switch-case.html", { on_line = info[1], text = "//", indent = info[2] })
+ }) do
+ runner:new_line('switch-case.html', { on_line = info[1], text = '//', indent = info[2] })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
{ 4, 2 },
{ 5, 0 },
- } do
- runner:new_line("for.html", { on_line = info[1], text = "//", indent = info[2] })
+ }) do
+ runner:new_line('for.html', { on_line = info[1], text = '//', indent = info[2] })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
@@ -63,8 +63,8 @@ describe("indent HTML Angular:", function()
{ 7, 2 },
{ 8, 2 },
{ 9, 0 },
- } do
- runner:new_line("defer.html", { on_line = info[1], text = "//", indent = info[2] })
+ }) do
+ runner:new_line('defer.html', { on_line = info[1], text = '//', indent = info[2] })
end
end)
end)
diff --git a/tests/indent/c_spec.lua b/tests/indent/c_spec.lua
index 4e2826a54..528933599 100644
--- a/tests/indent/c_spec.lua
+++ b/tests/indent/c_spec.lua
@@ -1,58 +1,63 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-local runner = Runner:new(it, "tests/indent/c", {
+local runner = Runner:new(it, 'tests/indent/c', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
-describe("indent C:", function()
- describe("whole file:", function()
- runner:whole_file(".", {
+describe('indent C:', function()
+ describe('whole file:', function()
+ runner:whole_file('.', {
expected_failures = {
- "./preproc_func.c",
- "./unfinished_comment.c",
+ './preproc_func.c',
+ './unfinished_comment.c',
},
})
end)
- describe("new line:", function()
- runner:new_line("array.c", { on_line = 2, text = "0,", indent = 4 })
- runner:new_line("compound_lit.c", { on_line = 7, text = ".z = 5,", indent = 8 })
- runner:new_line("cond.c", { on_line = 3, text = "x++;", indent = 8 })
- runner:new_line("cond.c", { on_line = 6, text = "x++;", indent = 8 })
- runner:new_line("cond.c", { on_line = 8, text = "x++;", indent = 8 })
- runner:new_line("cond.c", { on_line = 9, text = "x++;", indent = 4 })
- runner:new_line("expr.c", { on_line = 10, text = "2 *", indent = 8 })
- runner:new_line("func.c", { on_line = 17, text = "int z,", indent = 4 })
- runner:new_line("label.c", { on_line = 3, text = "normal:", indent = 0 })
- runner:new_line("loop.c", { on_line = 3, text = "x++;", indent = 8 })
- runner:new_line("preproc_cond.c", { on_line = 5, text = "x++;", indent = 4 })
- runner:new_line("preproc_func.c", { on_line = 3, text = "x++; \\", indent = 8 }, "expected failure", XFAIL)
- runner:new_line("string.c", { on_line = 1, text = "brave new \\", indent = 0 })
- runner:new_line("string.c", { on_line = 4, text = '"brave new "', indent = 4 })
- runner:new_line("struct.c", { on_line = 4, text = "int y;", indent = 8 })
- runner:new_line("switch.c", { on_line = 3, text = "x++;", indent = 12 })
- runner:new_line("ternary.c", { on_line = 4, text = ": (x == 0) : 0", indent = 8 })
- runner:new_line("issue-1568.c", { on_line = 4, text = "x++;", indent = 8 })
- runner:new_line("issue-2086.c", { on_line = 3, text = "}", indent = 0 })
- runner:new_line("issue-4079.c", { on_line = 2, text = "return;", indent = 8 })
- runner:new_line("issue-4079.c", { on_line = 2, text = "{", indent = 4 })
- runner:new_line("issue-4079.c", { on_line = 6, text = "{", indent = 4 })
- runner:new_line("issue-4117.c", { on_line = 3, text = "else", indent = 4 })
+ describe('new line:', function()
+ runner:new_line('array.c', { on_line = 2, text = '0,', indent = 4 })
+ runner:new_line('compound_lit.c', { on_line = 7, text = '.z = 5,', indent = 8 })
+ runner:new_line('cond.c', { on_line = 3, text = 'x++;', indent = 8 })
+ runner:new_line('cond.c', { on_line = 6, text = 'x++;', indent = 8 })
+ runner:new_line('cond.c', { on_line = 8, text = 'x++;', indent = 8 })
+ runner:new_line('cond.c', { on_line = 9, text = 'x++;', indent = 4 })
+ runner:new_line('expr.c', { on_line = 10, text = '2 *', indent = 8 })
+ runner:new_line('func.c', { on_line = 17, text = 'int z,', indent = 4 })
+ runner:new_line('label.c', { on_line = 3, text = 'normal:', indent = 0 })
+ runner:new_line('loop.c', { on_line = 3, text = 'x++;', indent = 8 })
+ runner:new_line('preproc_cond.c', { on_line = 5, text = 'x++;', indent = 4 })
+ runner:new_line(
+ 'preproc_func.c',
+ { on_line = 3, text = 'x++; \\', indent = 8 },
+ 'expected failure',
+ XFAIL
+ )
+ runner:new_line('string.c', { on_line = 1, text = 'brave new \\', indent = 0 })
+ runner:new_line('string.c', { on_line = 4, text = '"brave new "', indent = 4 })
+ runner:new_line('struct.c', { on_line = 4, text = 'int y;', indent = 8 })
+ runner:new_line('switch.c', { on_line = 3, text = 'x++;', indent = 12 })
+ runner:new_line('ternary.c', { on_line = 4, text = ': (x == 0) : 0', indent = 8 })
+ runner:new_line('issue-1568.c', { on_line = 4, text = 'x++;', indent = 8 })
+ runner:new_line('issue-2086.c', { on_line = 3, text = '}', indent = 0 })
+ runner:new_line('issue-4079.c', { on_line = 2, text = 'return;', indent = 8 })
+ runner:new_line('issue-4079.c', { on_line = 2, text = '{', indent = 4 })
+ runner:new_line('issue-4079.c', { on_line = 6, text = '{', indent = 4 })
+ runner:new_line('issue-4117.c', { on_line = 3, text = 'else', indent = 4 })
-- the line after inserted one will be left with wrong indent but we only care about the inserted one
- for _, line in ipairs { 2, 4, 7, 10 } do
- runner:new_line("no_braces.c", { on_line = line, text = "x++;", indent = 8 })
+ for _, line in ipairs({ 2, 4, 7, 10 }) do
+ runner:new_line('no_braces.c', { on_line = line, text = 'x++;', indent = 8 })
end
- for _, line in ipairs { 2, 5, 7, 10, 12, 14, 20, 22, 25, 27, 28, 33 } do
- runner:new_line("if_else.c", { on_line = line, text = "x++;", indent = 8 })
+ for _, line in ipairs({ 2, 5, 7, 10, 12, 14, 20, 22, 25, 27, 28, 33 }) do
+ runner:new_line('if_else.c', { on_line = line, text = 'x++;', indent = 8 })
end
- for _, line in ipairs { 3, 6, 8, 13, 15, 20, 23 } do
- runner:new_line("if_else.c", { on_line = line, text = "else", indent = 4 })
+ for _, line in ipairs({ 3, 6, 8, 13, 15, 20, 23 }) do
+ runner:new_line('if_else.c', { on_line = line, text = 'else', indent = 4 })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 36, 12 },
{ 37, 16 },
{ 38, 12 },
@@ -66,15 +71,15 @@ describe("indent C:", function()
{ 52, 8 },
{ 53, 12 },
{ 54, 12 },
- } do
- runner:new_line("if_else.c", { on_line = info[1], text = "x++;", indent = info[2] })
+ }) do
+ runner:new_line('if_else.c', { on_line = info[1], text = 'x++;', indent = info[2] })
end
-- dedent braces on new line
- for _, line in ipairs { 10, 12, 14 } do
- runner:new_line("if_else.c", { on_line = line, text = "{}", indent = 4 })
+ for _, line in ipairs({ 10, 12, 14 }) do
+ runner:new_line('if_else.c', { on_line = line, text = '{}', indent = 4 })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 8, 0 },
{ 10, 0 },
{ 13, 4 },
@@ -86,8 +91,8 @@ describe("indent C:", function()
{ 20, 8 },
{ 21, 8 },
{ 22, 4 },
- } do
- runner:new_line("issue-4525.c", { on_line = info[1], text = "x++;", indent = info[2] })
+ }) do
+ runner:new_line('issue-4525.c', { on_line = info[1], text = 'x++;', indent = info[2] })
end
end)
end)
diff --git a/tests/indent/capnp_spec.lua b/tests/indent/capnp_spec.lua
index 7c8418b06..d5dd8c5fd 100644
--- a/tests/indent/capnp_spec.lua
+++ b/tests/indent/capnp_spec.lua
@@ -1,30 +1,30 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/capnp", {
+local run = Runner:new(it, 'tests/indent/capnp', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
})
describe("indent Cap'n Proto:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("test.capnp", { on_line = 31, text = "foo @0;", indent = 2 })
- run:new_line("test.capnp", { on_line = 96, text = "boolField = true,", indent = 4 })
- run:new_line("test.capnp", { on_line = 340, text = "grault @7 :UInt64;", indent = 8 })
- run:new_line("test.capnp", {
+ describe('new line:', function()
+ run:new_line('test.capnp', { on_line = 31, text = 'foo @0;', indent = 2 })
+ run:new_line('test.capnp', { on_line = 96, text = 'boolField = true,', indent = 4 })
+ run:new_line('test.capnp', { on_line = 340, text = 'grault @7 :UInt64;', indent = 8 })
+ run:new_line('test.capnp', {
on_line = 573,
- text = "call @0 Inner2(Text) -> (qux :Qux, gen :TestGenerics(TestAllTypes, TestAnyPointer));",
+ text = 'call @0 Inner2(Text) -> (qux :Qux, gen :TestGenerics(TestAllTypes, TestAnyPointer));',
indent = 4,
})
- run:new_line("test.capnp", { on_line = 617, text = "foo @0 :Foo;", indent = 4 })
- run:new_line("test.capnp", { on_line = 654, text = "foo = (int16Field = 123),", indent = 4 })
- run:new_line("test.capnp", { on_line = 695, text = 'textField = "nested",', indent = 6 })
- run:new_line("test.capnp", { on_line = 970, text = "testTailCaller @4;", indent = 4 })
+ run:new_line('test.capnp', { on_line = 617, text = 'foo @0 :Foo;', indent = 4 })
+ run:new_line('test.capnp', { on_line = 654, text = 'foo = (int16Field = 123),', indent = 4 })
+ run:new_line('test.capnp', { on_line = 695, text = 'textField = "nested",', indent = 6 })
+ run:new_line('test.capnp', { on_line = 970, text = 'testTailCaller @4;', indent = 4 })
end)
end)
diff --git a/tests/indent/common.lua b/tests/indent/common.lua
index 6cfedafff..5c291070e 100644
--- a/tests/indent/common.lua
+++ b/tests/indent/common.lua
@@ -1,11 +1,11 @@
local M = {}
-local assert = require "luassert"
-local say = require "say"
-local scan_dir = require("plenary.scandir").scan_dir
-local Path = require "plenary.path"
+local assert = require('luassert')
+local say = require('say')
+local scan_dir = require('plenary.scandir').scan_dir
+local Path = require('plenary.path')
-M.XFAIL = "xfail"
+M.XFAIL = 'xfail'
local function same_indent(state, arguments)
local before = arguments[1]
@@ -14,11 +14,11 @@ local function same_indent(state, arguments)
local ok = true
local errors = { before = {}, after = {} }
for line = 1, #before do
- if #string.match(before[line], "^%s*") ~= #string.match(after[line], "^%s*") then
+ if #string.match(before[line], '^%s*') ~= #string.match(after[line], '^%s*') then
if before[line] and after[line] then
-- store the actual indentation length for each line
- errors.before[line] = #string.match(before[line], "^%s*")
- errors.after[line] = #string.match(after[line], "^%s*")
+ errors.before[line] = #string.match(before[line], '^%s*')
+ errors.after[line] = #string.match(after[line], '^%s*')
end
ok = false
end
@@ -42,39 +42,39 @@ local function format_indent(arg, fmtargs)
end
width = width + 3
- local header_fmt = "%8s %2s%-" .. tostring(width + 1) .. "s %s"
- local fmt = "%8s %2s |%-" .. tostring(width) .. "s |%s"
+ local header_fmt = '%8s %2s%-' .. tostring(width + 1) .. 's %s'
+ local fmt = '%8s %2s |%-' .. tostring(width) .. 's |%s'
- local output = { header_fmt:format("", "", "Found:", "Expected:") }
+ local output = { header_fmt:format('', '', 'Found:', 'Expected:') }
for i, line in ipairs(arg) do
if fmtargs.errors.before[i] then
- local indents = string.format("%d vs %d", fmtargs.errors.after[i], fmtargs.errors.before[i])
- table.insert(output, fmt:format(indents, "=>", fmtargs.other[i], line))
+ local indents = string.format('%d vs %d', fmtargs.errors.after[i], fmtargs.errors.before[i])
+ table.insert(output, fmt:format(indents, '=>', fmtargs.other[i], line))
else
- table.insert(output, fmt:format("", "", fmtargs.other[i], line))
+ table.insert(output, fmt:format('', '', fmtargs.other[i], line))
end
end
- return table.concat(output, "\n")
+ return table.concat(output, '\n')
end
-say:set_namespace "en"
-say:set("assertion.same_indent.positive", "Incorrect indentation\n%s")
-say:set("assertion.same_indent.negative", "Incorrect indentation\n%s")
+say:set_namespace('en')
+say:set('assertion.same_indent.positive', 'Incorrect indentation\n%s')
+say:set('assertion.same_indent.negative', 'Incorrect indentation\n%s')
assert:register(
- "assertion",
- "same_indent",
+ 'assertion',
+ 'same_indent',
same_indent,
- "assertion.same_indent.positive",
- "assert.same_indent.negative"
+ 'assertion.same_indent.positive',
+ 'assert.same_indent.negative'
)
-- Custom assertion better suited for indentation diffs
local function compare_indent(before, after, xfail)
assert:add_formatter(format_indent)
if xfail then
- io.stdout:write "Warning! Known failure of this test! Please help to fix it! "
+ io.stdout:write('Warning! Known failure of this test! Please help to fix it! ')
assert.is_not.same_indent(before, after)
else
assert.is.same_indent(before, after)
@@ -83,7 +83,8 @@ local function compare_indent(before, after, xfail)
end
local function set_buf_indent_opts(opts)
- local optnames = { "tabstop", "shiftwidth", "softtabstop", "expandtab", "filetype", "lispoptions" }
+ local optnames =
+ { 'tabstop', 'shiftwidth', 'softtabstop', 'expandtab', 'filetype', 'lispoptions' }
for _, opt in ipairs(optnames) do
if opts[opt] ~= nil then
vim.bo[opt] = opts[opt]
@@ -95,11 +96,11 @@ function M.run_indent_test(file, runner, opts)
assert.are.same(1, vim.fn.filereadable(file), string.format('File "%s" not readable', file))
-- load reference file
- vim.cmd(string.format("edit %s", file))
- vim.bo.indentexpr = "nvim_treesitter#indent()"
+ vim.cmd(string.format('edit %s', file))
+ vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
local before = vim.api.nvim_buf_get_lines(0, 0, -1, true)
- assert.are.same("nvim_treesitter#indent()", vim.bo.indentexpr)
+ assert.are.same("v:lua.require'nvim-treesitter'.indentexpr()", vim.bo.indentexpr)
set_buf_indent_opts(opts)
-- perform the test
@@ -109,14 +110,14 @@ function M.run_indent_test(file, runner, opts)
local after = vim.api.nvim_buf_get_lines(0, 0, -1, true)
-- clear any changes to avoid 'No write since last change (add ! to override)'
- vim.cmd "edit!"
+ vim.cmd('edit!')
return before, after
end
function M.indent_whole_file(file, opts, xfail)
local before, after = M.run_indent_test(file, function()
- vim.cmd "silent normal gg=G"
+ vim.cmd('silent normal gg=G')
end, opts)
compare_indent(before, after, xfail)
@@ -132,22 +133,24 @@ end
function M.indent_new_line(file, spec, opts, xfail)
local before, after = M.run_indent_test(file, function()
-- move to the line and input the new one
- vim.cmd(string.format("normal! %dG", spec.on_line))
- vim.cmd(string.format("normal! o%s", spec.text))
+ vim.cmd(string.format('normal! %dG', spec.on_line))
+ vim.cmd(string.format('normal! o%s', spec.text))
end, opts)
- local indent = type(spec.indent) == "string" and spec.indent or string.rep(" ", spec.indent)
+ local indent = type(spec.indent) == 'string' and spec.indent or string.rep(' ', spec.indent)
table.insert(before, spec.on_line + 1, indent .. spec.text)
compare_indent(before, after, xfail)
before, after = M.run_indent_test(file, function()
-- move to the line and input the new one
- vim.cmd(string.format("normal! %dG$", spec.on_line))
- vim.cmd(string.format(vim.api.nvim_replace_termcodes("normal! a<cr>%s", true, true, true), spec.text))
+ vim.cmd(string.format('normal! %dG$', spec.on_line))
+ vim.cmd(
+ string.format(vim.api.nvim_replace_termcodes('normal! a<cr>%s', true, true, true), spec.text)
+ )
end, opts)
- indent = type(spec.indent) == "string" and spec.indent or string.rep(" ", spec.indent)
+ indent = type(spec.indent) == 'string' and spec.indent or string.rep(' ', spec.indent)
table.insert(before, spec.on_line + 1, indent .. spec.text)
compare_indent(before, after, xfail)
@@ -174,13 +177,13 @@ function Runner:whole_file(dirs, opts)
expected_failures = vim.tbl_map(function(f)
return Path:new(f):make_relative(self.base_dir.filename)
end, expected_failures)
- dirs = type(dirs) == "table" and dirs or { dirs }
+ dirs = type(dirs) == 'table' and dirs or { dirs }
dirs = vim.tbl_map(function(dir)
dir = self.base_dir / Path:new(dir)
assert.is.same(1, vim.fn.isdirectory(dir.filename))
return dir.filename
end, dirs)
- local files = require("nvim-treesitter.compat").flatten(vim.tbl_map(scan_dir, dirs))
+ local files = require('nvim-treesitter.compat').flatten(vim.tbl_map(scan_dir, dirs))
for _, file in ipairs(files) do
local relpath = Path:new(file):make_relative(self.base_dir.filename)
self.it(relpath, function()
@@ -191,7 +194,7 @@ end
function Runner:new_line(file, spec, title, xfail)
title = title and title or tostring(spec.on_line)
- self.it(string.format("%s[%s]", file, title), function()
+ self.it(string.format('%s[%s]', file, title), function()
local path = self.base_dir / file
M.indent_new_line(path.filename, spec, self.buf_opts, xfail)
end)
diff --git a/tests/indent/cpp_spec.lua b/tests/indent/cpp_spec.lua
index 7ac69e2a6..8e97c805e 100644
--- a/tests/indent/cpp_spec.lua
+++ b/tests/indent/cpp_spec.lua
@@ -1,51 +1,56 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-- will use both c/ and cpp/
-local run = Runner:new(it, "tests/indent", {
+local run = Runner:new(it, 'tests/indent', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
- filetype = "cpp",
+ filetype = 'cpp',
})
-describe("indent C++:", function()
- describe("whole file:", function()
- run:whole_file({ "c/", "cpp/" }, {
+describe('indent C++:', function()
+ describe('whole file:', function()
+ run:whole_file({ 'c/', 'cpp/' }, {
expected_failures = {
-- C
- "c/preproc_func.c",
- "c/unfinished_comment.c",
+ 'c/preproc_func.c',
+ 'c/unfinished_comment.c',
},
})
end)
- describe("new line:", function()
- run:new_line("cpp/access.cpp", { on_line = 3, text = "protected:", indent = 0 })
- run:new_line("cpp/class.cpp", { on_line = 2, text = "using T = int;", indent = 4 })
- run:new_line("cpp/stream.cpp", { on_line = 5, text = "<< x + 3", indent = 8 })
+ describe('new line:', function()
+ run:new_line('cpp/access.cpp', { on_line = 3, text = 'protected:', indent = 0 })
+ run:new_line('cpp/class.cpp', { on_line = 2, text = 'using T = int;', indent = 4 })
+ run:new_line('cpp/stream.cpp', { on_line = 5, text = '<< x + 3', indent = 8 })
-- TODO: find a clean way to import these from c_spec.lua
- run:new_line("c/array.c", { on_line = 2, text = "0,", indent = 4 })
- run:new_line("c/cond.c", { on_line = 3, text = "x++;", indent = 8 })
- run:new_line("c/cond.c", { on_line = 6, text = "x++;", indent = 8 })
- run:new_line("c/cond.c", { on_line = 8, text = "x++;", indent = 8 })
- run:new_line("c/cond.c", { on_line = 9, text = "x++;", indent = 4 })
- run:new_line("c/expr.c", { on_line = 10, text = "2 *", indent = 8 })
- run:new_line("c/func.c", { on_line = 17, text = "int z,", indent = 4 })
- run:new_line("c/label.c", { on_line = 3, text = "normal:", indent = 0 })
- run:new_line("c/loop.c", { on_line = 3, text = "x++;", indent = 8 })
- run:new_line("c/preproc_cond.c", { on_line = 5, text = "x++;", indent = 4 })
- run:new_line("c/preproc_func.c", { on_line = 3, text = "x++; \\", indent = 8 }, "expected failure", XFAIL)
- run:new_line("c/string.c", { on_line = 1, text = "brave new \\", indent = 0 })
- run:new_line("c/string.c", { on_line = 4, text = '"brave new "', indent = 4 })
- run:new_line("c/struct.c", { on_line = 4, text = "int y;", indent = 8 })
- run:new_line("c/switch.c", { on_line = 3, text = "x++;", indent = 12 })
- run:new_line("c/ternary.c", { on_line = 4, text = ": (x == 0) : 0", indent = 8 })
+ run:new_line('c/array.c', { on_line = 2, text = '0,', indent = 4 })
+ run:new_line('c/cond.c', { on_line = 3, text = 'x++;', indent = 8 })
+ run:new_line('c/cond.c', { on_line = 6, text = 'x++;', indent = 8 })
+ run:new_line('c/cond.c', { on_line = 8, text = 'x++;', indent = 8 })
+ run:new_line('c/cond.c', { on_line = 9, text = 'x++;', indent = 4 })
+ run:new_line('c/expr.c', { on_line = 10, text = '2 *', indent = 8 })
+ run:new_line('c/func.c', { on_line = 17, text = 'int z,', indent = 4 })
+ run:new_line('c/label.c', { on_line = 3, text = 'normal:', indent = 0 })
+ run:new_line('c/loop.c', { on_line = 3, text = 'x++;', indent = 8 })
+ run:new_line('c/preproc_cond.c', { on_line = 5, text = 'x++;', indent = 4 })
+ run:new_line(
+ 'c/preproc_func.c',
+ { on_line = 3, text = 'x++; \\', indent = 8 },
+ 'expected failure',
+ XFAIL
+ )
+ run:new_line('c/string.c', { on_line = 1, text = 'brave new \\', indent = 0 })
+ run:new_line('c/string.c', { on_line = 4, text = '"brave new "', indent = 4 })
+ run:new_line('c/struct.c', { on_line = 4, text = 'int y;', indent = 8 })
+ run:new_line('c/switch.c', { on_line = 3, text = 'x++;', indent = 12 })
+ run:new_line('c/ternary.c', { on_line = 4, text = ': (x == 0) : 0', indent = 8 })
-- the line after inserted one will be left with wrong indent but we only care about the inserted one
- run:new_line("c/no_braces.c", { on_line = 4, text = "x++;", indent = 8 })
- run:new_line("c/no_braces.c", { on_line = 7, text = "x++;", indent = 8 })
- run:new_line("c/no_braces.c", { on_line = 10, text = "x++;", indent = 8 })
+ run:new_line('c/no_braces.c', { on_line = 4, text = 'x++;', indent = 8 })
+ run:new_line('c/no_braces.c', { on_line = 7, text = 'x++;', indent = 8 })
+ run:new_line('c/no_braces.c', { on_line = 10, text = 'x++;', indent = 8 })
end)
end)
diff --git a/tests/indent/css_spec.lua b/tests/indent/css_spec.lua
index 46c7e1afb..69de62e92 100644
--- a/tests/indent/css_spec.lua
+++ b/tests/indent/css_spec.lua
@@ -1,22 +1,22 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/css", {
+local run = Runner:new(it, 'tests/indent/css', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent CSS:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent CSS:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("open_block.css", { on_line = 1, text = "}", indent = 0 })
- run:new_line("open_block.css", { on_line = 1, text = "color: green;", indent = 2 })
- run:new_line("next_rule.css", { on_line = 3, text = ".next {", indent = 0 })
+ describe('new line:', function()
+ run:new_line('open_block.css', { on_line = 1, text = '}', indent = 0 })
+ run:new_line('open_block.css', { on_line = 1, text = 'color: green;', indent = 2 })
+ run:new_line('next_rule.css', { on_line = 3, text = '.next {', indent = 0 })
end)
end)
diff --git a/tests/indent/dart_spec.lua b/tests/indent/dart_spec.lua
index c1d018738..4817c2ab2 100644
--- a/tests/indent/dart_spec.lua
+++ b/tests/indent/dart_spec.lua
@@ -1,46 +1,51 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-local run = Runner:new(it, "tests/indent/dart", {
+local run = Runner:new(it, 'tests/indent/dart', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 2,
expandtab = true,
})
-describe("indent Lua:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Lua:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {
- "./multiple_arguments.dart",
- "./class.dart",
- "./class_function_argument.dart",
+ './multiple_arguments.dart',
+ './class.dart',
+ './class_function_argument.dart',
},
})
end)
end)
-describe("new line:", function()
- run:new_line("class.dart", { on_line = 4, text = "int five;", indent = 2 })
- run:new_line("class.dart", { on_line = 6, text = "'100'", indent = 8 }, "expected failure", XFAIL)
- run:new_line("class.dart", { on_line = 7, text = "int five = 5", indent = 2 }, "expected failure", XFAIL)
- run:new_line("try.dart", { on_line = 2, text = "var x;", indent = 4 })
- for _, content in ipairs { "var x;", "var x" } do
- run:new_line("try.dart", { on_line = 10, text = content, indent = 6 })
+describe('new line:', function()
+ run:new_line('class.dart', { on_line = 4, text = 'int five;', indent = 2 })
+ run:new_line('class.dart', { on_line = 6, text = "'100'", indent = 8 }, 'expected failure', XFAIL)
+ run:new_line(
+ 'class.dart',
+ { on_line = 7, text = 'int five = 5', indent = 2 },
+ 'expected failure',
+ XFAIL
+ )
+ run:new_line('try.dart', { on_line = 2, text = 'var x;', indent = 4 })
+ for _, content in ipairs({ 'var x;', 'var x' }) do
+ run:new_line('try.dart', { on_line = 10, text = content, indent = 6 })
end
- run:new_line("switch.dart", { on_line = 3, text = "x = 1;", indent = 6 })
- run:new_line("switch.dart", { on_line = 9, text = "x = 1;", indent = 6 })
- run:new_line("switch.dart", { on_line = 3, text = "case 2:", indent = 4 })
- run:new_line("switch.dart", { on_line = 16, text = "abc;", indent = 4 })
- run:new_line("switch.dart", { on_line = 20, text = "abc;", indent = 4 })
- run:new_line("switch.dart", { on_line = 28, text = "y++;", indent = 6 })
+ run:new_line('switch.dart', { on_line = 3, text = 'x = 1;', indent = 6 })
+ run:new_line('switch.dart', { on_line = 9, text = 'x = 1;', indent = 6 })
+ run:new_line('switch.dart', { on_line = 3, text = 'case 2:', indent = 4 })
+ run:new_line('switch.dart', { on_line = 16, text = 'abc;', indent = 4 })
+ run:new_line('switch.dart', { on_line = 20, text = 'abc;', indent = 4 })
+ run:new_line('switch.dart', { on_line = 28, text = 'y++;', indent = 6 })
- run:new_line("multiple_arguments.dart", { on_line = 10, text = "var x;", indent = 4 })
+ run:new_line('multiple_arguments.dart', { on_line = 10, text = 'var x;', indent = 4 })
run:new_line(
- "multiple_arguments.dart",
- { on_line = 11, text = "var x;", indent = 4 },
- "expected failure issue #4637",
+ 'multiple_arguments.dart',
+ { on_line = 11, text = 'var x;', indent = 4 },
+ 'expected failure issue #4637',
XFAIL
)
- run:new_line("class_function_argument.dart", { on_line = 11, text = "}", indent = 4 })
+ run:new_line('class_function_argument.dart', { on_line = 11, text = '}', indent = 4 })
end)
diff --git a/tests/indent/dot_spec.lua b/tests/indent/dot_spec.lua
index ac78f8d92..135321da2 100644
--- a/tests/indent/dot_spec.lua
+++ b/tests/indent/dot_spec.lua
@@ -1,25 +1,25 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/dot", {
+local run = Runner:new(it, 'tests/indent/dot', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent dot:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent dot:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("test.dot", { on_line = 1, text = "node [", indent = 2 })
- run:new_line("test.dot", { on_line = 2, text = "shape=ellipse,", indent = 4 })
- run:new_line("test.dot", { on_line = 4, text = "subgraph sub {", indent = 2 })
- run:new_line("test.dot", { on_line = 5, text = "a1 -> a2 -> a3;", indent = 4 })
- run:new_line("test.dot", { on_line = 6, text = "}", indent = 2 })
- run:new_line("test.dot", { on_line = 7, text = "}", indent = 0 })
+ describe('new line:', function()
+ run:new_line('test.dot', { on_line = 1, text = 'node [', indent = 2 })
+ run:new_line('test.dot', { on_line = 2, text = 'shape=ellipse,', indent = 4 })
+ run:new_line('test.dot', { on_line = 4, text = 'subgraph sub {', indent = 2 })
+ run:new_line('test.dot', { on_line = 5, text = 'a1 -> a2 -> a3;', indent = 4 })
+ run:new_line('test.dot', { on_line = 6, text = '}', indent = 2 })
+ run:new_line('test.dot', { on_line = 7, text = '}', indent = 0 })
end)
end)
diff --git a/tests/indent/gdscript_spec.lua b/tests/indent/gdscript_spec.lua
index c1770f41a..ee6f58a4b 100644
--- a/tests/indent/gdscript_spec.lua
+++ b/tests/indent/gdscript_spec.lua
@@ -1,20 +1,20 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/gdscript", {
+local run = Runner:new(it, 'tests/indent/gdscript', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = false,
})
-describe("indent GDScript:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent GDScript:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("basic_blocks.gd", { on_line = 1, text = "var member := 0", indent = 0 })
+ describe('new line:', function()
+ run:new_line('basic_blocks.gd', { on_line = 1, text = 'var member := 0', indent = 0 })
end)
end)
diff --git a/tests/indent/gleam_spec.lua b/tests/indent/gleam_spec.lua
index 8de57fd50..1d77e52a1 100644
--- a/tests/indent/gleam_spec.lua
+++ b/tests/indent/gleam_spec.lua
@@ -1,127 +1,127 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/gleam", {
+local run = Runner:new(it, 'tests/indent/gleam', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 2,
expandtab = true,
})
-describe("indent Gleam:", function()
- describe("whole file:", function()
- run:whole_file "."
+describe('indent Gleam:', function()
+ describe('whole file:', function()
+ run:whole_file('.')
end)
- describe("new line:", function()
- run:new_line("type.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 2, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 3, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 4, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 5, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 6, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 7, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 8, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 9, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 10, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 11, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 12, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 13, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 14, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 15, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 16, text = "//", indent = 0 })
- run:new_line("type.gleam", { on_line = 17, text = "//", indent = 2 })
- run:new_line("type.gleam", { on_line = 18, text = "//", indent = 0 })
+ describe('new line:', function()
+ run:new_line('type.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 2, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 3, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 4, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 5, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 6, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 7, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 8, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 9, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 10, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 11, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 12, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 13, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 14, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 15, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 16, text = '//', indent = 0 })
+ run:new_line('type.gleam', { on_line = 17, text = '//', indent = 2 })
+ run:new_line('type.gleam', { on_line = 18, text = '//', indent = 0 })
- run:new_line("function.gleam", { on_line = 1, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 2, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 3, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 4, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 5, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 6, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 7, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 8, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 9, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 10, text = "//", indent = 0 })
- run:new_line("function.gleam", { on_line = 11, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 12, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 13, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 14, text = "//", indent = 2 })
- run:new_line("function.gleam", { on_line = 15, text = "//", indent = 2 })
+ run:new_line('function.gleam', { on_line = 1, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 2, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 3, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 4, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 5, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 6, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 7, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 8, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 9, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 10, text = '//', indent = 0 })
+ run:new_line('function.gleam', { on_line = 11, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 12, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 13, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 14, text = '//', indent = 2 })
+ run:new_line('function.gleam', { on_line = 15, text = '//', indent = 2 })
- run:new_line("list.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("list.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("list.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("list.gleam", { on_line = 4, text = "//", indent = 6 })
- run:new_line("list.gleam", { on_line = 5, text = "//", indent = 6 })
- run:new_line("list.gleam", { on_line = 6, text = "//", indent = 8 })
- run:new_line("list.gleam", { on_line = 7, text = "//", indent = 8 })
- run:new_line("list.gleam", { on_line = 8, text = "//", indent = 6 })
- run:new_line("list.gleam", { on_line = 9, text = "//", indent = 4 })
- run:new_line("list.gleam", { on_line = 10, text = "//", indent = 2 })
- run:new_line("list.gleam", { on_line = 11, text = "//", indent = 0 })
+ run:new_line('list.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('list.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('list.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('list.gleam', { on_line = 4, text = '//', indent = 6 })
+ run:new_line('list.gleam', { on_line = 5, text = '//', indent = 6 })
+ run:new_line('list.gleam', { on_line = 6, text = '//', indent = 8 })
+ run:new_line('list.gleam', { on_line = 7, text = '//', indent = 8 })
+ run:new_line('list.gleam', { on_line = 8, text = '//', indent = 6 })
+ run:new_line('list.gleam', { on_line = 9, text = '//', indent = 4 })
+ run:new_line('list.gleam', { on_line = 10, text = '//', indent = 2 })
+ run:new_line('list.gleam', { on_line = 11, text = '//', indent = 0 })
- run:new_line("tuple.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("tuple.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("tuple.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("tuple.gleam", { on_line = 4, text = "//", indent = 6 })
- run:new_line("tuple.gleam", { on_line = 5, text = "//", indent = 6 })
- run:new_line("tuple.gleam", { on_line = 6, text = "//", indent = 8 })
- run:new_line("tuple.gleam", { on_line = 7, text = "//", indent = 8 })
- run:new_line("tuple.gleam", { on_line = 8, text = "//", indent = 6 })
- run:new_line("tuple.gleam", { on_line = 9, text = "//", indent = 4 })
- run:new_line("tuple.gleam", { on_line = 10, text = "//", indent = 2 })
- run:new_line("tuple.gleam", { on_line = 11, text = "//", indent = 0 })
+ run:new_line('tuple.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('tuple.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('tuple.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('tuple.gleam', { on_line = 4, text = '//', indent = 6 })
+ run:new_line('tuple.gleam', { on_line = 5, text = '//', indent = 6 })
+ run:new_line('tuple.gleam', { on_line = 6, text = '//', indent = 8 })
+ run:new_line('tuple.gleam', { on_line = 7, text = '//', indent = 8 })
+ run:new_line('tuple.gleam', { on_line = 8, text = '//', indent = 6 })
+ run:new_line('tuple.gleam', { on_line = 9, text = '//', indent = 4 })
+ run:new_line('tuple.gleam', { on_line = 10, text = '//', indent = 2 })
+ run:new_line('tuple.gleam', { on_line = 11, text = '//', indent = 0 })
- run:new_line("case.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("case.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("case.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("case.gleam", { on_line = 4, text = "//", indent = 6 })
- run:new_line("case.gleam", { on_line = 5, text = "//", indent = 8 })
- run:new_line("case.gleam", { on_line = 6, text = "//", indent = 8 })
- run:new_line("case.gleam", { on_line = 7, text = "//", indent = 6 })
- run:new_line("case.gleam", { on_line = 8, text = "//", indent = 4 })
- run:new_line("case.gleam", { on_line = 9, text = "//", indent = 2 })
- run:new_line("case.gleam", { on_line = 10, text = "//", indent = 0 })
+ run:new_line('case.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('case.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('case.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('case.gleam', { on_line = 4, text = '//', indent = 6 })
+ run:new_line('case.gleam', { on_line = 5, text = '//', indent = 8 })
+ run:new_line('case.gleam', { on_line = 6, text = '//', indent = 8 })
+ run:new_line('case.gleam', { on_line = 7, text = '//', indent = 6 })
+ run:new_line('case.gleam', { on_line = 8, text = '//', indent = 4 })
+ run:new_line('case.gleam', { on_line = 9, text = '//', indent = 2 })
+ run:new_line('case.gleam', { on_line = 10, text = '//', indent = 0 })
- run:new_line("let.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("let.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("let.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("let.gleam", { on_line = 4, text = "//", indent = 0 })
+ run:new_line('let.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('let.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('let.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('let.gleam', { on_line = 4, text = '//', indent = 0 })
- run:new_line("pipe.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("pipe.gleam", { on_line = 2, text = "//", indent = 2 })
- run:new_line("pipe.gleam", { on_line = 3, text = "//", indent = 2 })
- run:new_line("pipe.gleam", { on_line = 4, text = "//", indent = 0 })
+ run:new_line('pipe.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('pipe.gleam', { on_line = 2, text = '//', indent = 2 })
+ run:new_line('pipe.gleam', { on_line = 3, text = '//', indent = 2 })
+ run:new_line('pipe.gleam', { on_line = 4, text = '//', indent = 0 })
- run:new_line("binary_expression.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("binary_expression.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("binary_expression.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("binary_expression.gleam", { on_line = 4, text = "//", indent = 0 })
+ run:new_line('binary_expression.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('binary_expression.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('binary_expression.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('binary_expression.gleam', { on_line = 4, text = '//', indent = 0 })
- run:new_line("import.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("import.gleam", { on_line = 2, text = "//", indent = 2 })
- run:new_line("import.gleam", { on_line = 3, text = "//", indent = 2 })
- run:new_line("import.gleam", { on_line = 4, text = "//", indent = 0 })
+ run:new_line('import.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('import.gleam', { on_line = 2, text = '//', indent = 2 })
+ run:new_line('import.gleam', { on_line = 3, text = '//', indent = 2 })
+ run:new_line('import.gleam', { on_line = 4, text = '//', indent = 0 })
- run:new_line("constant.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("constant.gleam", { on_line = 2, text = "//", indent = 2 })
+ run:new_line('constant.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('constant.gleam', { on_line = 2, text = '//', indent = 2 })
- run:new_line("assert.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("assert.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("assert.gleam", { on_line = 3, text = "//", indent = 2 })
- run:new_line("assert.gleam", { on_line = 4, text = "//", indent = 0 })
+ run:new_line('assert.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('assert.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('assert.gleam', { on_line = 3, text = '//', indent = 2 })
+ run:new_line('assert.gleam', { on_line = 4, text = '//', indent = 0 })
- run:new_line("todo.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("todo.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("todo.gleam", { on_line = 3, text = "//", indent = 4 })
- run:new_line("todo.gleam", { on_line = 4, text = "//", indent = 2 })
- run:new_line("todo.gleam", { on_line = 5, text = "//", indent = 0 })
+ run:new_line('todo.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('todo.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('todo.gleam', { on_line = 3, text = '//', indent = 4 })
+ run:new_line('todo.gleam', { on_line = 4, text = '//', indent = 2 })
+ run:new_line('todo.gleam', { on_line = 5, text = '//', indent = 0 })
- run:new_line("anonymous_function.gleam", { on_line = 1, text = "//", indent = 2 })
- run:new_line("anonymous_function.gleam", { on_line = 2, text = "//", indent = 4 })
- run:new_line("anonymous_function.gleam", { on_line = 3, text = "//", indent = 6 })
- run:new_line("anonymous_function.gleam", { on_line = 4, text = "//", indent = 6 })
- run:new_line("anonymous_function.gleam", { on_line = 5, text = "//", indent = 4 })
- run:new_line("anonymous_function.gleam", { on_line = 6, text = "//", indent = 2 })
- run:new_line("anonymous_function.gleam", { on_line = 7, text = "//", indent = 0 })
+ run:new_line('anonymous_function.gleam', { on_line = 1, text = '//', indent = 2 })
+ run:new_line('anonymous_function.gleam', { on_line = 2, text = '//', indent = 4 })
+ run:new_line('anonymous_function.gleam', { on_line = 3, text = '//', indent = 6 })
+ run:new_line('anonymous_function.gleam', { on_line = 4, text = '//', indent = 6 })
+ run:new_line('anonymous_function.gleam', { on_line = 5, text = '//', indent = 4 })
+ run:new_line('anonymous_function.gleam', { on_line = 6, text = '//', indent = 2 })
+ run:new_line('anonymous_function.gleam', { on_line = 7, text = '//', indent = 0 })
end)
end)
diff --git a/tests/indent/go_spec.lua b/tests/indent/go_spec.lua
index 4d604f3ef..f29379139 100644
--- a/tests/indent/go_spec.lua
+++ b/tests/indent/go_spec.lua
@@ -1,24 +1,24 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/go", {
+local run = Runner:new(it, 'tests/indent/go', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = false,
})
-describe("indent Go:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Go:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new lines:", function()
- run:new_line("issue-2369.go", { on_line = 13, text = "// some comment", indent = 1 })
- run:new_line("issue-2369-newline.go", { on_line = 8, text = "// comment", indent = 0 })
- run:new_line("const_declaration.go", { on_line = 3, text = "Constant", indent = 1 })
- run:new_line("const_declaration.go", { on_line = 7, text = "func main() {", indent = 0 })
+ describe('new lines:', function()
+ run:new_line('issue-2369.go', { on_line = 13, text = '// some comment', indent = 1 })
+ run:new_line('issue-2369-newline.go', { on_line = 8, text = '// comment', indent = 0 })
+ run:new_line('const_declaration.go', { on_line = 3, text = 'Constant', indent = 1 })
+ run:new_line('const_declaration.go', { on_line = 7, text = 'func main() {', indent = 0 })
end)
end)
diff --git a/tests/indent/graphql_spec.lua b/tests/indent/graphql_spec.lua
index 9fc9896a7..d54cf60c5 100644
--- a/tests/indent/graphql_spec.lua
+++ b/tests/indent/graphql_spec.lua
@@ -1,19 +1,19 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/graphql", {
+local run = Runner:new(it, 'tests/indent/graphql', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent GraphQL:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent GraphQL:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function() end)
+ describe('new line:', function() end)
end)
diff --git a/tests/indent/html_spec.lua b/tests/indent/html_spec.lua
index b94653613..b240b7150 100644
--- a/tests/indent/html_spec.lua
+++ b/tests/indent/html_spec.lua
@@ -1,28 +1,28 @@
-local Runner = require("tests.indent.common").Runner
-local runner = Runner:new(it, "tests/indent/html", {
+local Runner = require('tests.indent.common').Runner
+local runner = Runner:new(it, 'tests/indent/html', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
})
-describe("indent HTML:", function()
- describe("whole file:", function()
- runner:whole_file "."
+describe('indent HTML:', function()
+ describe('whole file:', function()
+ runner:whole_file('.')
end)
- describe("new line:", function()
- runner:new_line("start_tag.html", { on_line = 1, text = "anything", indent = 0 })
- runner:new_line("start_tag.html", { on_line = 4, text = "anything", indent = 4 })
- runner:new_line("start_tag.html", { on_line = 6, text = "charset = utf-8", indent = 6 })
- runner:new_line("start_tag.html", { on_line = 6, text = ">", indent = 4 })
- runner:new_line("start_tag.html", { on_line = 6, text = "/>", indent = 4 })
- runner:new_line("issue-3986.html", { on_line = 3, text = "indent once", indent = 2 })
- runner:new_line("self_closing_tag.html", { on_line = 10, text = "Something", indent = 4 })
- runner:new_line("self_closing_tag.html", { on_line = 12, text = "disabled", indent = 6 })
- runner:new_line("self_closing_tag.html", { on_line = 12, text = "/>", indent = 4 })
- runner:new_line("script_style.html", { on_line = 5, text = "body", indent = 2 })
- runner:new_line("script_style.html", { on_line = 6, text = "<div></div>", indent = 2 })
- runner:new_line("script_style.html", { on_line = 9, text = "const x = 1", indent = 2 })
- runner:new_line("script_style.html", { on_line = 11, text = "Text", indent = 2 })
+ describe('new line:', function()
+ runner:new_line('start_tag.html', { on_line = 1, text = 'anything', indent = 0 })
+ runner:new_line('start_tag.html', { on_line = 4, text = 'anything', indent = 4 })
+ runner:new_line('start_tag.html', { on_line = 6, text = 'charset = utf-8', indent = 6 })
+ runner:new_line('start_tag.html', { on_line = 6, text = '>', indent = 4 })
+ runner:new_line('start_tag.html', { on_line = 6, text = '/>', indent = 4 })
+ runner:new_line('issue-3986.html', { on_line = 3, text = 'indent once', indent = 2 })
+ runner:new_line('self_closing_tag.html', { on_line = 10, text = 'Something', indent = 4 })
+ runner:new_line('self_closing_tag.html', { on_line = 12, text = 'disabled', indent = 6 })
+ runner:new_line('self_closing_tag.html', { on_line = 12, text = '/>', indent = 4 })
+ runner:new_line('script_style.html', { on_line = 5, text = 'body', indent = 2 })
+ runner:new_line('script_style.html', { on_line = 6, text = '<div></div>', indent = 2 })
+ runner:new_line('script_style.html', { on_line = 9, text = 'const x = 1', indent = 2 })
+ runner:new_line('script_style.html', { on_line = 11, text = 'Text', indent = 2 })
end)
end)
diff --git a/tests/indent/java_spec.lua b/tests/indent/java_spec.lua
index 1d10046bb..97354dbc7 100644
--- a/tests/indent/java_spec.lua
+++ b/tests/indent/java_spec.lua
@@ -1,39 +1,45 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-local run = Runner:new(it, "tests/indent/java", {
+local run = Runner:new(it, 'tests/indent/java', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Java:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Java:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("method.java", { on_line = 1, text = "void foo() {}", indent = 2 })
- run:new_line("issue_2571.java", { on_line = 5, text = "void bar() {}", indent = 2 })
- run:new_line("enum.java", { on_line = 2, text = "THING_B,", indent = 2 })
- run:new_line("class_with_annotation.java", { on_line = 2, text = "void foo() {}", indent = 2 })
- run:new_line("enum_with_annotation.java", { on_line = 2, text = "THING;", indent = 2 })
- run:new_line("interface.java", { on_line = 1, text = "void foo();", indent = 2 })
- run:new_line("javadoc.java", { on_line = 2, text = "* Sample javadoc line", indent = 3 })
+ describe('new line:', function()
+ run:new_line('method.java', { on_line = 1, text = 'void foo() {}', indent = 2 })
+ run:new_line('issue_2571.java', { on_line = 5, text = 'void bar() {}', indent = 2 })
+ run:new_line('enum.java', { on_line = 2, text = 'THING_B,', indent = 2 })
+ run:new_line('class_with_annotation.java', { on_line = 2, text = 'void foo() {}', indent = 2 })
+ run:new_line('enum_with_annotation.java', { on_line = 2, text = 'THING;', indent = 2 })
+ run:new_line('interface.java', { on_line = 1, text = 'void foo();', indent = 2 })
+ run:new_line('javadoc.java', { on_line = 2, text = '* Sample javadoc line', indent = 3 })
run:new_line(
- "issue_2583.java",
- { on_line = 3, text = "int x = 1;", indent = 4 },
- "fails because tree is in a broken state",
+ 'issue_2583.java',
+ { on_line = 3, text = 'int x = 1;', indent = 4 },
+ 'fails because tree is in a broken state',
XFAIL
)
- run:new_line("issue_2583.java", { on_line = 4, text = "int x = 1;", indent = 4 })
- run:new_line("method_chaining.java", { on_line = 4, text = '.append("b");', indent = 6 })
- run:new_line("constructor_with_arguments_on_multiple_lines.java", { on_line = 4, text = "}", indent = 2 })
- run:new_line("method_with_arguments_on_multiple_lines.java", { on_line = 4, text = "}", indent = 2 })
- run:new_line("annotation.java", { on_line = 1, text = "abstract public Foo(){}", indent = 2 })
- run:new_line("annotation_2.java", { on_line = 2, text = "Bar.class", indent = 4 })
+ run:new_line('issue_2583.java', { on_line = 4, text = 'int x = 1;', indent = 4 })
+ run:new_line('method_chaining.java', { on_line = 4, text = '.append("b");', indent = 6 })
+ run:new_line(
+ 'constructor_with_arguments_on_multiple_lines.java',
+ { on_line = 4, text = '}', indent = 2 }
+ )
+ run:new_line(
+ 'method_with_arguments_on_multiple_lines.java',
+ { on_line = 4, text = '}', indent = 2 }
+ )
+ run:new_line('annotation.java', { on_line = 1, text = 'abstract public Foo(){}', indent = 2 })
+ run:new_line('annotation_2.java', { on_line = 2, text = 'Bar.class', indent = 4 })
end)
end)
diff --git a/tests/indent/javascript_spec.lua b/tests/indent/javascript_spec.lua
index 5659b22a1..4a7c3bcc3 100644
--- a/tests/indent/javascript_spec.lua
+++ b/tests/indent/javascript_spec.lua
@@ -1,40 +1,50 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-- local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent", {
+local run = Runner:new(it, 'tests/indent', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
- filetype = "javascript",
+ filetype = 'javascript',
})
-describe("indent JavaScript:", function()
- describe("whole file:", function()
- run:whole_file({ "ecma/" }, {
+describe('indent JavaScript:', function()
+ describe('whole file:', function()
+ run:whole_file({ 'ecma/' }, {
expected_failures = {},
})
end)
- describe("new line:", function()
- for _, info in ipairs {
+ describe('new line:', function()
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 4 },
{ 3, 4 },
- } do
- run:new_line("ecma/binary_expression.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/binary_expression.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- run:new_line("ecma/new-line-after-class.js", { on_line = 2, text = "", indent = 0 })
+ run:new_line('ecma/new-line-after-class.js', { on_line = 2, text = '', indent = 0 })
- for _, info in ipairs {
+ for _, info in ipairs({
{ 4, 2 },
{ 6, 0 },
- } do
- run:new_line("ecma/callback.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/callback.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 4 },
{ 3, 6 },
@@ -42,11 +52,16 @@ describe("indent JavaScript:", function()
{ 8, 2 },
{ 11, 4 },
{ 13, 4 },
- } do
- run:new_line("ecma/class.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/class.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 2, 2 },
{ 5, 2 },
{ 7, 0 },
@@ -61,11 +76,16 @@ describe("indent JavaScript:", function()
{ 48, 4 },
{ 49, 4 },
{ 50, 2 },
- } do
- run:new_line("ecma/func.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/func.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
@@ -77,25 +97,40 @@ describe("indent JavaScript:", function()
{ 13, 0 },
{ 16, 0 },
{ 19, 2 },
- } do
- run:new_line("ecma/if_else.js", { on_line = info[1], text = "hello()", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/if_else.js',
+ { on_line = info[1], text = 'hello()', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 2, 2 },
{ 5, 0 },
- } do
- run:new_line("ecma/object.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/object.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 3, 6 },
{ 4, 6 },
- } do
- run:new_line("ecma/ternary.js", { on_line = info[1], text = "//", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/ternary.js',
+ { on_line = info[1], text = '//', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 2 },
{ 3, 2 },
@@ -103,23 +138,36 @@ describe("indent JavaScript:", function()
{ 5, 2 },
{ 6, 2 },
{ 7, 0 },
- } do
- run:new_line("ecma/try_catch.js", { on_line = info[1], text = "hello()", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/try_catch.js',
+ { on_line = info[1], text = 'hello()', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 1, 2 },
{ 2, 0 },
- } do
- run:new_line("ecma/variable.js", { on_line = info[1], text = "hello()", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'ecma/variable.js',
+ { on_line = info[1], text = 'hello()', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
- for _, line in ipairs { 2, 6 } do
- run:new_line("ecma/issue-2515.js", { on_line = line, text = "{}", indent = 4 })
+ for _, line in ipairs({ 2, 6 }) do
+ run:new_line('ecma/issue-2515.js', { on_line = line, text = '{}', indent = 4 })
end
- for _, info in ipairs { { line = 2, indent = 0 } } do
- run:new_line("ecma/array-issue3382.js", { on_line = info.line, text = "foo();", indent = info.indent })
+ for _, info in ipairs({ { line = 2, indent = 0 } }) do
+ run:new_line(
+ 'ecma/array-issue3382.js',
+ { on_line = info.line, text = 'foo();', indent = info.indent }
+ )
end
end)
end)
diff --git a/tests/indent/jsx_spec.lua b/tests/indent/jsx_spec.lua
index e75b21f4f..7a32dbcc4 100644
--- a/tests/indent/jsx_spec.lua
+++ b/tests/indent/jsx_spec.lua
@@ -1,43 +1,49 @@
-local Runner = require("tests.indent.common").Runner
-local runner = Runner:new(it, "tests/indent/jsx", {
+local Runner = require('tests.indent.common').Runner
+local runner = Runner:new(it, 'tests/indent/jsx', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
- filetype = "jsx",
+ filetype = 'jsx',
})
-describe("indent JSX Elements:", function()
- describe("whole file:", function()
- runner:whole_file(".", {
+describe('indent JSX Elements:', function()
+ describe('whole file:', function()
+ runner:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- for _, info in ipairs {
+ describe('new line:', function()
+ for _, info in ipairs({
{ 5, 8 },
{ 6, 6 },
{ 7, 6 },
{ 8, 4 },
{ 9, 2 },
- } do
- runner:new_line("issue-3986.jsx", { on_line = info[1], text = "text", indent = info[2] })
+ }) do
+ runner:new_line('issue-3986.jsx', { on_line = info[1], text = 'text', indent = info[2] })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 4, 8 },
{ 6, 10 },
{ 9, 8 },
{ 11, 8 },
- } do
- runner:new_line("element_attributes.jsx", { on_line = info[1], text = "disabled", indent = info[2] })
+ }) do
+ runner:new_line(
+ 'element_attributes.jsx',
+ { on_line = info[1], text = 'disabled', indent = info[2] }
+ )
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 5, 10 },
{ 7, 8 },
{ 11, 10 },
- } do
- runner:new_line("jsx_expression.jsx", { on_line = info[1], text = "{disabled}", indent = info[2] })
+ }) do
+ runner:new_line(
+ 'jsx_expression.jsx',
+ { on_line = info[1], text = '{disabled}', indent = info[2] }
+ )
end
end)
end)
diff --git a/tests/indent/julia_spec.lua b/tests/indent/julia_spec.lua
index 538685307..b7605a55d 100644
--- a/tests/indent/julia_spec.lua
+++ b/tests/indent/julia_spec.lua
@@ -1,16 +1,16 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-- local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/julia", {
+local run = Runner:new(it, 'tests/indent/julia', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = true,
})
-describe("indent Julia:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Julia:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
diff --git a/tests/indent/lua_spec.lua b/tests/indent/lua_spec.lua
index 6d99a0fff..ecafc7008 100644
--- a/tests/indent/lua_spec.lua
+++ b/tests/indent/lua_spec.lua
@@ -1,49 +1,49 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/lua", {
+local run = Runner:new(it, 'tests/indent/lua', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Lua:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Lua:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("comment.lua", { on_line = 1, text = "line", indent = "-- " })
- run:new_line("comment.lua", { on_line = 5, text = "multiline", indent = " " })
- run:new_line("func.lua", { on_line = 1, text = "x = x + 1", indent = 2 })
- run:new_line("func.lua", { on_line = 2, text = "y = y + 1", indent = 4 })
- run:new_line("func.lua", { on_line = 4, text = "y = y + 1", indent = 2 })
- run:new_line("func.lua", { on_line = 5, text = "3,", indent = 4 })
- run:new_line("func.lua", { on_line = 9, text = "x = x + 1", indent = 0 })
- run:new_line("func.lua", { on_line = 11, text = "x = x + 1", indent = 2 })
- run:new_line("string.lua", { on_line = 1, text = "x", indent = 0 })
- run:new_line("string.lua", { on_line = 2, text = "x", indent = 0 })
- run:new_line("string.lua", { on_line = 3, text = "x", indent = 2 })
- run:new_line("string.lua", { on_line = 4, text = "x", indent = 4 })
- run:new_line("string.lua", { on_line = 9, text = "x", indent = 0 })
- run:new_line("table.lua", { on_line = 1, text = "b = 0,", indent = 2 })
- run:new_line("table.lua", { on_line = 5, text = "4,", indent = 4 })
- run:new_line("table.lua", { on_line = 7, text = "4,", indent = 4 })
- run:new_line("loop.lua", { on_line = 4, text = "x = x + 1", indent = 2 })
- run:new_line("cond.lua", { on_line = 5, text = "x = x + 1", indent = 2 })
- run:new_line("cond.lua", { on_line = 7, text = "x = x + 1", indent = 2 })
- run:new_line("cond.lua", { on_line = 8, text = "x = x + 1", indent = 4 })
- run:new_line("cond.lua", { on_line = 10, text = "x = x + 1", indent = 2 })
- run:new_line("cond.lua", { on_line = 12, text = "x = x + 1", indent = 0 })
- run:new_line("cond.lua", { on_line = 14, text = "x = x + 1", indent = 2 })
- run:new_line("cond.lua", { on_line = 14, text = "end", indent = 0 })
- run:new_line("no-indent-after-paren-pairs.lua", { on_line = 3, text = "x = x + 1", indent = 0 })
- run:new_line("no-indent-after-paren-pairs.lua", { on_line = 6, text = "x = x + 1", indent = 0 })
- run:new_line("nested-table.lua", { on_line = 5, text = "{}", indent = 4 })
- run:new_line("method_index_expr.lua", { on_line = 1, text = ":test()", indent = 2 })
- run:new_line("method_index_expr.lua", { on_line = 3, text = "local a = 1", indent = 0 })
+ describe('new line:', function()
+ run:new_line('comment.lua', { on_line = 1, text = 'line', indent = '-- ' })
+ run:new_line('comment.lua', { on_line = 5, text = 'multiline', indent = ' ' })
+ run:new_line('func.lua', { on_line = 1, text = 'x = x + 1', indent = 2 })
+ run:new_line('func.lua', { on_line = 2, text = 'y = y + 1', indent = 4 })
+ run:new_line('func.lua', { on_line = 4, text = 'y = y + 1', indent = 2 })
+ run:new_line('func.lua', { on_line = 5, text = '3,', indent = 4 })
+ run:new_line('func.lua', { on_line = 9, text = 'x = x + 1', indent = 0 })
+ run:new_line('func.lua', { on_line = 11, text = 'x = x + 1', indent = 2 })
+ run:new_line('string.lua', { on_line = 1, text = 'x', indent = 0 })
+ run:new_line('string.lua', { on_line = 2, text = 'x', indent = 0 })
+ run:new_line('string.lua', { on_line = 3, text = 'x', indent = 2 })
+ run:new_line('string.lua', { on_line = 4, text = 'x', indent = 4 })
+ run:new_line('string.lua', { on_line = 9, text = 'x', indent = 0 })
+ run:new_line('table.lua', { on_line = 1, text = 'b = 0,', indent = 2 })
+ run:new_line('table.lua', { on_line = 5, text = '4,', indent = 4 })
+ run:new_line('table.lua', { on_line = 7, text = '4,', indent = 4 })
+ run:new_line('loop.lua', { on_line = 4, text = 'x = x + 1', indent = 2 })
+ run:new_line('cond.lua', { on_line = 5, text = 'x = x + 1', indent = 2 })
+ run:new_line('cond.lua', { on_line = 7, text = 'x = x + 1', indent = 2 })
+ run:new_line('cond.lua', { on_line = 8, text = 'x = x + 1', indent = 4 })
+ run:new_line('cond.lua', { on_line = 10, text = 'x = x + 1', indent = 2 })
+ run:new_line('cond.lua', { on_line = 12, text = 'x = x + 1', indent = 0 })
+ run:new_line('cond.lua', { on_line = 14, text = 'x = x + 1', indent = 2 })
+ run:new_line('cond.lua', { on_line = 14, text = 'end', indent = 0 })
+ run:new_line('no-indent-after-paren-pairs.lua', { on_line = 3, text = 'x = x + 1', indent = 0 })
+ run:new_line('no-indent-after-paren-pairs.lua', { on_line = 6, text = 'x = x + 1', indent = 0 })
+ run:new_line('nested-table.lua', { on_line = 5, text = '{}', indent = 4 })
+ run:new_line('method_index_expr.lua', { on_line = 1, text = ':test()', indent = 2 })
+ run:new_line('method_index_expr.lua', { on_line = 3, text = 'local a = 1', indent = 0 })
end)
end)
diff --git a/tests/indent/meson_spec.lua b/tests/indent/meson_spec.lua
index bc2372ee0..ba23965a6 100644
--- a/tests/indent/meson_spec.lua
+++ b/tests/indent/meson_spec.lua
@@ -1,28 +1,28 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/meson", {
+local run = Runner:new(it, 'tests/indent/meson', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Meson:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Meson:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("cond.meson", { on_line = 3, text = "foo()", indent = 2 })
- run:new_line("cond.meson", { on_line = 6, text = "foo()", indent = 2 })
- run:new_line("cond.meson", { on_line = 7, text = "foo()", indent = 2 })
- run:new_line("cond.meson", { on_line = 12, text = "foo()", indent = 2 })
- run:new_line("cond.meson", { on_line = 14, text = "foo()", indent = 2 })
- run:new_line("dict.meson", { on_line = 13, text = ",'x':1,", indent = 2 })
- run:new_line("loop.meson", { on_line = 3, text = "foo()", indent = 2 })
- run:new_line("loop.meson", { on_line = 7, text = "foo()", indent = 2 })
- run:new_line("ternary.meson", { on_line = 11, text = "x : y", indent = 2 })
+ describe('new line:', function()
+ run:new_line('cond.meson', { on_line = 3, text = 'foo()', indent = 2 })
+ run:new_line('cond.meson', { on_line = 6, text = 'foo()', indent = 2 })
+ run:new_line('cond.meson', { on_line = 7, text = 'foo()', indent = 2 })
+ run:new_line('cond.meson', { on_line = 12, text = 'foo()', indent = 2 })
+ run:new_line('cond.meson', { on_line = 14, text = 'foo()', indent = 2 })
+ run:new_line('dict.meson', { on_line = 13, text = ",'x':1,", indent = 2 })
+ run:new_line('loop.meson', { on_line = 3, text = 'foo()', indent = 2 })
+ run:new_line('loop.meson', { on_line = 7, text = 'foo()', indent = 2 })
+ run:new_line('ternary.meson', { on_line = 11, text = 'x : y', indent = 2 })
end)
end)
diff --git a/tests/indent/nickel_spec.lua b/tests/indent/nickel_spec.lua
index d178dab52..0c2458a5b 100644
--- a/tests/indent/nickel_spec.lua
+++ b/tests/indent/nickel_spec.lua
@@ -1,25 +1,25 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/nickel", {
+local run = Runner:new(it, 'tests/indent/nickel', {
shiftwidth = 2,
expandtab = true,
})
-describe("indent Nickel:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Nickel:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("indent-newline.ncl", { on_line = 1, text = "stmt", indent = 2 })
- run:new_line("indent-newline.ncl", { on_line = 2, text = "stmt", indent = 2 })
- run:new_line("indent-newline.ncl", { on_line = 3, text = "stmt", indent = 4 })
- run:new_line("indent-newline.ncl", { on_line = 4, text = "]", indent = 2 })
- run:new_line("indent-newline.ncl", { on_line = 5, text = "stmt", indent = 2 })
- run:new_line("indent-newline.ncl", { on_line = 6, text = "stmt", indent = 4 })
- run:new_line("indent-newline.ncl", { on_line = 7, text = "}", indent = 2 })
- run:new_line("indent-newline.ncl", { on_line = 11, text = "stmt", indent = 0 })
+ describe('new line:', function()
+ run:new_line('indent-newline.ncl', { on_line = 1, text = 'stmt', indent = 2 })
+ run:new_line('indent-newline.ncl', { on_line = 2, text = 'stmt', indent = 2 })
+ run:new_line('indent-newline.ncl', { on_line = 3, text = 'stmt', indent = 4 })
+ run:new_line('indent-newline.ncl', { on_line = 4, text = ']', indent = 2 })
+ run:new_line('indent-newline.ncl', { on_line = 5, text = 'stmt', indent = 2 })
+ run:new_line('indent-newline.ncl', { on_line = 6, text = 'stmt', indent = 4 })
+ run:new_line('indent-newline.ncl', { on_line = 7, text = '}', indent = 2 })
+ run:new_line('indent-newline.ncl', { on_line = 11, text = 'stmt', indent = 0 })
end)
end)
diff --git a/tests/indent/nix_spec.lua b/tests/indent/nix_spec.lua
index 709a0a109..bad8b53f7 100644
--- a/tests/indent/nix_spec.lua
+++ b/tests/indent/nix_spec.lua
@@ -1,30 +1,30 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local runner = Runner:new(it, "tests/indent/nix", {
+local runner = Runner:new(it, 'tests/indent/nix', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 2,
expandtab = true,
})
-describe("indent Nix:", function()
- describe("whole file:", function()
- runner:whole_file(".", {
+describe('indent Nix:', function()
+ describe('whole file:', function()
+ runner:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- for _, info in ipairs {
+ describe('new line:', function()
+ for _, info in ipairs({
{ 14, 2 },
{ 16, 2 },
{ 48, 4 },
{ 112, 6 },
- } do
- runner:new_line("general.nix", { on_line = info[1], text = "x = 1;", indent = info[2] })
+ }) do
+ runner:new_line('general.nix', { on_line = info[1], text = 'x = 1;', indent = info[2] })
end
- for _, info in ipairs {
+ for _, info in ipairs({
{ 115, 6 },
{ 113, 10 },
{ 6, 4 },
@@ -33,8 +33,8 @@ describe("indent Nix:", function()
{ 35, 6 },
{ 23, 2 },
{ 21, 6 },
- } do
- runner:new_line("conds.nix", { on_line = info[1], text = "x = 1;", indent = info[2] })
+ }) do
+ runner:new_line('conds.nix', { on_line = info[1], text = 'x = 1;', indent = info[2] })
end
end)
end)
diff --git a/tests/indent/nu_spec.lua b/tests/indent/nu_spec.lua
index 37c02ebea..5dfdb5128 100644
--- a/tests/indent/nu_spec.lua
+++ b/tests/indent/nu_spec.lua
@@ -1,16 +1,16 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/nu", {
+local run = Runner:new(it, 'tests/indent/nu', {
tabstop = 2,
shiftwidth = 2,
softtabstop = -1,
expandtab = true,
})
-describe("indent Nu:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Nu:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
diff --git a/tests/indent/php_spec.lua b/tests/indent/php_spec.lua
index c3f84e6e2..49983caa2 100644
--- a/tests/indent/php_spec.lua
+++ b/tests/indent/php_spec.lua
@@ -1,76 +1,75 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/php", {
+local run = Runner:new(it, 'tests/indent/php', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
-describe("indent PHP:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent PHP:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("example.php", { on_line = 11, text = "// new line starts 1 indentation to far", indent = 4 })
+ describe('new line:', function()
run:new_line(
- "example2.php",
- { on_line = 5, text = "indentation with `enter` in insert mode is not correct", indent = 4 }
+ 'example.php',
+ { on_line = 11, text = '// new line starts 1 indentation to far', indent = 4 }
)
- run:new_line("issue-2497.php", { on_line = 5, text = "$a =", indent = 4 })
- run:new_line("unfinished-call.php", { on_line = 6, text = "$a =", indent = 4 })
- run:new_line("issue-3591.php", { on_line = 4, text = "$a =", indent = 8 })
- run:new_line("enum-indent.php", { on_line = 4, text = "case", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 3, text = "true", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 4, text = "return;", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 7, text = "true", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 10, text = "|| false", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 11, text = "$a = 0;", indent = 0 })
- run:new_line("issue-4848.php", { on_line = 13, text = "true", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 16, text = "$a,", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 17, text = "true", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 20, text = "$a,", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 21, text = "return $a;", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 24, text = "return;", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 27, text = "true", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 28, text = "true => null,", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 31, text = "true => null,", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 35, text = "function a() {}", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 37, text = "return;", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 40, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 41, text = "return $a;", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 45, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 46, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 47, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 48, text = "$a;", indent = 0 })
- run:new_line("issue-4848.php", { on_line = 50, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 51, text = "return $a;", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 52, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 53, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 54, text = "$a,", indent = 12 })
- run:new_line("issue-4848.php", { on_line = 55, text = "return $a;", indent = 12 })
- run:new_line("issue-4848.php", { on_line = 56, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 57, text = "$a;", indent = 0 })
- run:new_line("issue-4848.php", { on_line = 59, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 60, text = "return $a;", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 61, text = "->foo()", indent = 4 })
- run:new_line("issue-4848.php", { on_line = 62, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 63, text = "$a,", indent = 12 })
- run:new_line("issue-4848.php", { on_line = 64, text = "return $a;", indent = 12 })
- run:new_line("issue-4848.php", { on_line = 65, text = "$a,", indent = 8 })
- run:new_line("issue-4848.php", { on_line = 66, text = "$a;", indent = 0 })
- run:new_line("issue-6888.php", { on_line = 2, text = "$a;", indent = 0 })
- run:new_line("issue-6888.php", { on_line = 3, text = "case Funday = 2;", indent = 4 })
- run:new_line("issue-6888.php", { on_line = 6, text = "$a;", indent = 0 })
- run:new_line("issue-6888.php", { on_line = 8, text = "$a;", indent = 4 })
- run:new_line("issue-6888.php", { on_line = 11, text = "$a;", indent = 0 })
- run:new_line("property-hooks.php", { on_line = 7, text = "get;", indent = 8 })
- run:new_line("property-hooks.php", { on_line = 8, text = "set;", indent = 8 })
- run:new_line("property-hooks.php", { on_line = 9, text = "$a;", indent = 12 })
- run:new_line("property-hooks.php", { on_line = 11, text = "get;", indent = 8 })
- run:new_line("property-hooks.php", { on_line = 12, text = "get;", indent = 4 })
+ run:new_line('issue-2497.php', { on_line = 5, text = '$a =', indent = 4 })
+ run:new_line('unfinished-call.php', { on_line = 6, text = '$a =', indent = 4 })
+ run:new_line('issue-3591.php', { on_line = 4, text = '$a =', indent = 8 })
+ run:new_line('enum-indent.php', { on_line = 4, text = 'case', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 3, text = 'true', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 4, text = 'return;', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 7, text = 'true', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 10, text = '|| false', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 11, text = '$a = 0;', indent = 0 })
+ run:new_line('issue-4848.php', { on_line = 13, text = 'true', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 16, text = '$a,', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 17, text = 'true', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 20, text = '$a,', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 21, text = 'return $a;', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 24, text = 'return;', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 27, text = 'true', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 28, text = 'true => null,', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 31, text = 'true => null,', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 35, text = 'function a() {}', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 37, text = 'return;', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 40, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 41, text = 'return $a;', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 45, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 46, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 47, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 48, text = '$a;', indent = 0 })
+ run:new_line('issue-4848.php', { on_line = 50, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 51, text = 'return $a;', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 52, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 53, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 54, text = '$a,', indent = 12 })
+ run:new_line('issue-4848.php', { on_line = 55, text = 'return $a;', indent = 12 })
+ run:new_line('issue-4848.php', { on_line = 56, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 57, text = '$a;', indent = 0 })
+ run:new_line('issue-4848.php', { on_line = 59, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 60, text = 'return $a;', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 61, text = '->foo()', indent = 4 })
+ run:new_line('issue-4848.php', { on_line = 62, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 63, text = '$a,', indent = 12 })
+ run:new_line('issue-4848.php', { on_line = 64, text = 'return $a;', indent = 12 })
+ run:new_line('issue-4848.php', { on_line = 65, text = '$a,', indent = 8 })
+ run:new_line('issue-4848.php', { on_line = 66, text = '$a;', indent = 0 })
+ run:new_line('issue-6888.php', { on_line = 2, text = '$a;', indent = 0 })
+ run:new_line('issue-6888.php', { on_line = 3, text = 'case Funday = 2;', indent = 4 })
+ run:new_line('issue-6888.php', { on_line = 6, text = '$a;', indent = 0 })
+ run:new_line('issue-6888.php', { on_line = 8, text = '$a;', indent = 4 })
+ run:new_line('issue-6888.php', { on_line = 11, text = '$a;', indent = 0 })
+ run:new_line('property-hooks.php', { on_line = 7, text = 'get;', indent = 8 })
+ run:new_line('property-hooks.php', { on_line = 8, text = 'set;', indent = 8 })
+ run:new_line('property-hooks.php', { on_line = 9, text = '$a;', indent = 12 })
+ run:new_line('property-hooks.php', { on_line = 11, text = 'get;', indent = 8 })
+ run:new_line('property-hooks.php', { on_line = 12, text = 'get;', indent = 4 })
end)
end)
diff --git a/tests/indent/python_spec.lua b/tests/indent/python_spec.lua
index 193b9901e..65be126fa 100644
--- a/tests/indent/python_spec.lua
+++ b/tests/indent/python_spec.lua
@@ -1,101 +1,101 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-local run = Runner:new(it, "tests/indent/python", {
+local run = Runner:new(it, 'tests/indent/python', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
-describe("indent Python:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Python:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("aligned_indent.py", { on_line = 1, text = "arg3,", indent = 19 })
- run:new_line("aligned_indent_2.py", { on_line = 2, text = "x", indent = 4 })
- run:new_line("aligned_indent_2.py", { on_line = 9, text = "x", indent = 4 })
- run:new_line("aligned_indent_2.py", { on_line = 12, text = "x", indent = 4 })
- run:new_line("basic_blocks.py", { on_line = 1, text = "wait,", indent = 4 })
- run:new_line("basic_blocks.py", { on_line = 6, text = "x += 1", indent = 4 })
- run:new_line("basic_blocks.py", { on_line = 7, text = "x += 1", indent = 4 })
- run:new_line("basic_blocks.py", { on_line = 10, text = "x += 1", indent = 8 })
- run:new_line("basic_blocks.py", { on_line = 14, text = "x += 1", indent = 8 })
- run:new_line("basic_collections.py", { on_line = 3, text = "4,", indent = 4 })
- run:new_line("comprehensions.py", { on_line = 8, text = "if x != 2", indent = 4 })
- run:new_line("control_flow.py", { on_line = 2, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 4, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 6, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 9, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 12, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 15, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 18, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 20, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 22, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 24, text = "c < 6 and", indent = 7 })
- run:new_line("control_flow.py", { on_line = 26, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 28, text = "x = 4", indent = 4 })
- run:new_line("control_flow.py", { on_line = 31, text = "try:", indent = 4 })
- run:new_line("branches.py", { on_line = 25, text = "x > 9 and", indent = 4 })
- run:new_line("branches.py", { on_line = 29, text = "and x > 9", indent = 4 })
- run:new_line("hanging_indent.py", { on_line = 1, text = "arg0,", indent = 4 })
- run:new_line("hanging_indent.py", { on_line = 5, text = "0,", indent = 4 })
- run:new_line("error_state_def.py", { on_line = 6, text = "b,", indent = 11 })
- run:new_line("error_state_tuple.py", { on_line = 7, text = "b,", indent = 1 })
- run:new_line("error_state_tuple_align.py", { on_line = 7, text = "b,", indent = 1 })
- run:new_line("error_state_list.py", { on_line = 5, text = "3,", indent = 6 })
- run:new_line("error_state_dict.py", { on_line = 6, text = "9:10,", indent = 6 })
- run:new_line("error_state_set.py", { on_line = 5, text = "9,", indent = 6 })
- run:new_line("error_state_funcall.py", { on_line = 5, text = "6,", indent = 2 })
- run:new_line("if_else.py", { on_line = 5, text = "else:", indent = 4 })
- run:new_line("if_else.py", { on_line = 5, text = "elif False:", indent = 4 })
+ describe('new line:', function()
+ run:new_line('aligned_indent.py', { on_line = 1, text = 'arg3,', indent = 19 })
+ run:new_line('aligned_indent_2.py', { on_line = 2, text = 'x', indent = 4 })
+ run:new_line('aligned_indent_2.py', { on_line = 9, text = 'x', indent = 4 })
+ run:new_line('aligned_indent_2.py', { on_line = 12, text = 'x', indent = 4 })
+ run:new_line('basic_blocks.py', { on_line = 1, text = 'wait,', indent = 4 })
+ run:new_line('basic_blocks.py', { on_line = 6, text = 'x += 1', indent = 4 })
+ run:new_line('basic_blocks.py', { on_line = 7, text = 'x += 1', indent = 4 })
+ run:new_line('basic_blocks.py', { on_line = 10, text = 'x += 1', indent = 8 })
+ run:new_line('basic_blocks.py', { on_line = 14, text = 'x += 1', indent = 8 })
+ run:new_line('basic_collections.py', { on_line = 3, text = '4,', indent = 4 })
+ run:new_line('comprehensions.py', { on_line = 8, text = 'if x != 2', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 2, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 4, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 6, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 9, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 12, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 15, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 18, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 20, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 22, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 24, text = 'c < 6 and', indent = 7 })
+ run:new_line('control_flow.py', { on_line = 26, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 28, text = 'x = 4', indent = 4 })
+ run:new_line('control_flow.py', { on_line = 31, text = 'try:', indent = 4 })
+ run:new_line('branches.py', { on_line = 25, text = 'x > 9 and', indent = 4 })
+ run:new_line('branches.py', { on_line = 29, text = 'and x > 9', indent = 4 })
+ run:new_line('hanging_indent.py', { on_line = 1, text = 'arg0,', indent = 4 })
+ run:new_line('hanging_indent.py', { on_line = 5, text = '0,', indent = 4 })
+ run:new_line('error_state_def.py', { on_line = 6, text = 'b,', indent = 11 })
+ run:new_line('error_state_tuple.py', { on_line = 7, text = 'b,', indent = 1 })
+ run:new_line('error_state_tuple_align.py', { on_line = 7, text = 'b,', indent = 1 })
+ run:new_line('error_state_list.py', { on_line = 5, text = '3,', indent = 6 })
+ run:new_line('error_state_dict.py', { on_line = 6, text = '9:10,', indent = 6 })
+ run:new_line('error_state_set.py', { on_line = 5, text = '9,', indent = 6 })
+ run:new_line('error_state_funcall.py', { on_line = 5, text = '6,', indent = 2 })
+ run:new_line('if_else.py', { on_line = 5, text = 'else:', indent = 4 })
+ run:new_line('if_else.py', { on_line = 5, text = 'elif False:', indent = 4 })
run:new_line(
- "join_lines.py",
- { on_line = 1, text = "+ 1 \\", indent = 4 },
- "fails due two not working query at python/indent.scm:30",
+ 'join_lines.py',
+ { on_line = 1, text = '+ 1 \\', indent = 4 },
+ 'fails due two not working query at python/indent.scm:30',
XFAIL
)
run:new_line(
- "join_lines.py",
- { on_line = 4, text = "+ 1 \\", indent = 4 },
- "fails due two not working query at python/indent.scm:30",
+ 'join_lines.py',
+ { on_line = 4, text = '+ 1 \\', indent = 4 },
+ 'fails due two not working query at python/indent.scm:30',
XFAIL
)
- run:new_line("join_lines.py", { on_line = 7, text = "+ 1 \\", indent = 4 })
- run:new_line("nested_collections.py", { on_line = 5, text = "0,", indent = 12 })
- run:new_line("nested_collections.py", { on_line = 6, text = ",0", indent = 12 })
- run:new_line("nested_collections.py", { on_line = 29, text = "[1, 2],", indent = 12 })
- run:new_line("nested_collections.py", { on_line = 39, text = "0,", indent = 5 })
- run:new_line("strings.py", { on_line = 14, text = "x", indent = 4 })
- run:new_line("strings.py", { on_line = 15, text = "x", indent = 0 })
- run:new_line("strings.py", { on_line = 16, text = "x", indent = 8 })
- run:new_line("line_after_indent.py", { on_line = 4, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 8, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 4, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 14, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 20, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 26, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 30, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 34, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 38, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 42, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 46, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 49, text = "x", indent = 0 })
- run:new_line("line_after_indent.py", { on_line = 55, text = "x", indent = 4 })
- run:new_line("line_after_indent.py", { on_line = 63, text = "x", indent = 4 })
- run:new_line("match_case.py", { on_line = 4, text = "pass", indent = 8 })
- run:new_line("match_case.py", { on_line = 5, text = "pass", indent = 12 })
- run:new_line("match_case.py", { on_line = 10, text = "pass", indent = 8 })
- run:new_line("match_case.py", { on_line = 15, text = "pass", indent = 12 })
- run:new_line("break_continue.py", { on_line = 4, text = "pass", indent = 8 })
- run:new_line("break_continue.py", { on_line = 9, text = "pass", indent = 8 })
+ run:new_line('join_lines.py', { on_line = 7, text = '+ 1 \\', indent = 4 })
+ run:new_line('nested_collections.py', { on_line = 5, text = '0,', indent = 12 })
+ run:new_line('nested_collections.py', { on_line = 6, text = ',0', indent = 12 })
+ run:new_line('nested_collections.py', { on_line = 29, text = '[1, 2],', indent = 12 })
+ run:new_line('nested_collections.py', { on_line = 39, text = '0,', indent = 5 })
+ run:new_line('strings.py', { on_line = 14, text = 'x', indent = 4 })
+ run:new_line('strings.py', { on_line = 15, text = 'x', indent = 0 })
+ run:new_line('strings.py', { on_line = 16, text = 'x', indent = 8 })
+ run:new_line('line_after_indent.py', { on_line = 4, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 8, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 4, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 14, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 20, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 26, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 30, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 34, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 38, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 42, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 46, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 49, text = 'x', indent = 0 })
+ run:new_line('line_after_indent.py', { on_line = 55, text = 'x', indent = 4 })
+ run:new_line('line_after_indent.py', { on_line = 63, text = 'x', indent = 4 })
+ run:new_line('match_case.py', { on_line = 4, text = 'pass', indent = 8 })
+ run:new_line('match_case.py', { on_line = 5, text = 'pass', indent = 12 })
+ run:new_line('match_case.py', { on_line = 10, text = 'pass', indent = 8 })
+ run:new_line('match_case.py', { on_line = 15, text = 'pass', indent = 12 })
+ run:new_line('break_continue.py', { on_line = 4, text = 'pass', indent = 8 })
+ run:new_line('break_continue.py', { on_line = 9, text = 'pass', indent = 8 })
- for _, line in ipairs { 2, 5, 8, 11, 16, 21, 24, 27, 34, 39 } do
- run:new_line("return_dedent.py", { on_line = line, text = "x", indent = 0 })
+ for _, line in ipairs({ 2, 5, 8, 11, 16, 21, 24, 27, 34, 39 }) do
+ run:new_line('return_dedent.py', { on_line = line, text = 'x', indent = 0 })
end
end)
end)
diff --git a/tests/indent/ql_spec.lua b/tests/indent/ql_spec.lua
index cfdce9077..605aa2365 100644
--- a/tests/indent/ql_spec.lua
+++ b/tests/indent/ql_spec.lua
@@ -1,24 +1,24 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/ql", {
+local run = Runner:new(it, 'tests/indent/ql', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Lua:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Lua:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
end)
-describe("new line:", function()
- run:new_line("module.ql", { on_line = 1, text = "predicate foo() {}", indent = 2 })
+describe('new line:', function()
+ run:new_line('module.ql', { on_line = 1, text = 'predicate foo() {}', indent = 2 })
end)
-describe("new line:", function()
- run:new_line("module.ql", { on_line = 2, text = "predicate foo() {}", indent = 2 })
+describe('new line:', function()
+ run:new_line('module.ql', { on_line = 2, text = 'predicate foo() {}', indent = 2 })
end)
diff --git a/tests/indent/query_spec.lua b/tests/indent/query_spec.lua
index ca2ccdef5..f884009a0 100644
--- a/tests/indent/query_spec.lua
+++ b/tests/indent/query_spec.lua
@@ -1,28 +1,28 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/query", {
+local run = Runner:new(it, 'tests/indent/query', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 2,
expandtab = true,
- lispoptions = "expr:1",
+ lispoptions = 'expr:1',
})
-describe("indent Query:", function()
- describe("whole file:", function()
- run:whole_file(".", {})
+describe('indent Query:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {})
end)
- describe("new line:", function()
- run:new_line("test.scm", { on_line = 3, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 5, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 12, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 25, text = "(#my-directive!)", indent = 10 })
- run:new_line("test.scm", { on_line = 34, text = '"more"', indent = 2 })
- run:new_line("test.scm", { on_line = 35, text = "(node)", indent = 0 })
- run:new_line("test.scm", { on_line = 40, text = "(node)", indent = 0 })
- run:new_line("test.scm", { on_line = 44, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 46, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 48, text = "(node)", indent = 2 })
- run:new_line("test.scm", { on_line = 50, text = "node_name", indent = 2 })
+ describe('new line:', function()
+ run:new_line('test.scm', { on_line = 3, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 5, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 12, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 25, text = '(#my-directive!)', indent = 10 })
+ run:new_line('test.scm', { on_line = 34, text = '"more"', indent = 2 })
+ run:new_line('test.scm', { on_line = 35, text = '(node)', indent = 0 })
+ run:new_line('test.scm', { on_line = 40, text = '(node)', indent = 0 })
+ run:new_line('test.scm', { on_line = 44, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 46, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 48, text = '(node)', indent = 2 })
+ run:new_line('test.scm', { on_line = 50, text = 'node_name', indent = 2 })
end)
end)
diff --git a/tests/indent/r_spec.lua b/tests/indent/r_spec.lua
index 08df5e11b..b6e814068 100644
--- a/tests/indent/r_spec.lua
+++ b/tests/indent/r_spec.lua
@@ -1,42 +1,42 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/r", {
+local run = Runner:new(it, 'tests/indent/r', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent R:", function()
- describe("whole file:", function()
- run:whole_file(".", {})
+describe('indent R:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {})
end)
- describe("new line:", function()
- run:new_line("comment.R", { on_line = 1, text = "# new comment", indent = 0 })
+ describe('new line:', function()
+ run:new_line('comment.R', { on_line = 1, text = '# new comment', indent = 0 })
- run:new_line("cond.R", { on_line = 1, text = "x <- x + 1", indent = 0 })
- run:new_line("cond.R", { on_line = 4, text = "x <- x + 1", indent = 2 })
- run:new_line("cond.R", { on_line = 5, text = "x <- x + 1", indent = 2 })
- run:new_line("cond.R", { on_line = 8, text = "x <- x + 1", indent = 4 })
+ run:new_line('cond.R', { on_line = 1, text = 'x <- x + 1', indent = 0 })
+ run:new_line('cond.R', { on_line = 4, text = 'x <- x + 1', indent = 2 })
+ run:new_line('cond.R', { on_line = 5, text = 'x <- x + 1', indent = 2 })
+ run:new_line('cond.R', { on_line = 8, text = 'x <- x + 1', indent = 4 })
- run:new_line("func.R", { on_line = 1, text = "x <- x + 1", indent = 2 })
- run:new_line("func.R", { on_line = 2, text = "a <- a + 1", indent = 4 })
- run:new_line("func.R", { on_line = 6, text = "0,", indent = 6 })
- run:new_line("func.R", { on_line = 6, text = "0,", indent = 6 })
- run:new_line("func.R", { on_line = 16, text = "x <- x + 1", indent = 4 })
+ run:new_line('func.R', { on_line = 1, text = 'x <- x + 1', indent = 2 })
+ run:new_line('func.R', { on_line = 2, text = 'a <- a + 1', indent = 4 })
+ run:new_line('func.R', { on_line = 6, text = '0,', indent = 6 })
+ run:new_line('func.R', { on_line = 6, text = '0,', indent = 6 })
+ run:new_line('func.R', { on_line = 16, text = 'x <- x + 1', indent = 4 })
- run:new_line("loop.R", { on_line = 1, text = "x <- x + 1", indent = 0 })
- run:new_line("loop.R", { on_line = 3, text = "x <- x + 1", indent = 2 })
- run:new_line("loop.R", { on_line = 8, text = "x <- x + 1", indent = 2 })
- run:new_line("loop.R", { on_line = 14, text = "print('lol')", indent = 4 })
+ run:new_line('loop.R', { on_line = 1, text = 'x <- x + 1', indent = 0 })
+ run:new_line('loop.R', { on_line = 3, text = 'x <- x + 1', indent = 2 })
+ run:new_line('loop.R', { on_line = 8, text = 'x <- x + 1', indent = 2 })
+ run:new_line('loop.R', { on_line = 14, text = "print('lol')", indent = 4 })
- run:new_line("pipe.R", { on_line = 1, text = "head(n = 10L) |>", indent = 2 })
- run:new_line("pipe.R", { on_line = 9, text = "head()", indent = 2 })
+ run:new_line('pipe.R', { on_line = 1, text = 'head(n = 10L) |>', indent = 2 })
+ run:new_line('pipe.R', { on_line = 9, text = 'head()', indent = 2 })
- run:new_line("incomplete_pipe.R", { on_line = 2, text = "head %>%", indent = 2 })
+ run:new_line('incomplete_pipe.R', { on_line = 2, text = 'head %>%', indent = 2 })
- run:new_line("aligned_indent.R", { on_line = 1, text = "z,", indent = 17 })
+ run:new_line('aligned_indent.R', { on_line = 1, text = 'z,', indent = 17 })
end)
end)
diff --git a/tests/indent/rescript_spec.lua b/tests/indent/rescript_spec.lua
index 5b1f06abd..e97cd1e8b 100644
--- a/tests/indent/rescript_spec.lua
+++ b/tests/indent/rescript_spec.lua
@@ -1,33 +1,33 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/rescript", {
+local run = Runner:new(it, 'tests/indent/rescript', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent ReScript:", function()
- describe("whole file:", function()
- run:whole_file(".", {})
+describe('indent ReScript:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {})
end)
- describe("new line:", function()
- run:new_line("basic.res", { on_line = 5, text = "x", indent = 0 })
- run:new_line("basic.res", { on_line = 9, text = '"another": here,', indent = 2 })
- run:new_line("basic.res", { on_line = 10, text = "}", indent = 0 })
- run:new_line("basic.res", { on_line = 14, text = "~test: test,", indent = 2 })
- run:new_line("basic.res", { on_line = 18, text = "x", indent = 0 })
+ describe('new line:', function()
+ run:new_line('basic.res', { on_line = 5, text = 'x', indent = 0 })
+ run:new_line('basic.res', { on_line = 9, text = '"another": here,', indent = 2 })
+ run:new_line('basic.res', { on_line = 10, text = '}', indent = 0 })
+ run:new_line('basic.res', { on_line = 14, text = '~test: test,', indent = 2 })
+ run:new_line('basic.res', { on_line = 18, text = 'x', indent = 0 })
- run:new_line("complex.res", { on_line = 3, text = "x", indent = 2 })
- run:new_line("complex.res", { on_line = 5, text = "x", indent = 4 })
- run:new_line("complex.res", { on_line = 17, text = "|", indent = 10 })
- run:new_line("complex.res", { on_line = 25, text = "x", indent = 2 })
- run:new_line("complex.res", { on_line = 60, text = "x", indent = 6 })
- run:new_line("complex.res", { on_line = 120, text = "x", indent = 14 })
- run:new_line("complex.res", { on_line = 136, text = "x", indent = 2 })
+ run:new_line('complex.res', { on_line = 3, text = 'x', indent = 2 })
+ run:new_line('complex.res', { on_line = 5, text = 'x', indent = 4 })
+ run:new_line('complex.res', { on_line = 17, text = '|', indent = 10 })
+ run:new_line('complex.res', { on_line = 25, text = 'x', indent = 2 })
+ run:new_line('complex.res', { on_line = 60, text = 'x', indent = 6 })
+ run:new_line('complex.res', { on_line = 120, text = 'x', indent = 14 })
+ run:new_line('complex.res', { on_line = 136, text = 'x', indent = 2 })
- run:new_line("conditional.res", { on_line = 6, text = "test: bool,", indent = 2 })
- run:new_line("conditional.res", { on_line = 95, text = "x", indent = 10 })
+ run:new_line('conditional.res', { on_line = 6, text = 'test: bool,', indent = 2 })
+ run:new_line('conditional.res', { on_line = 95, text = 'x', indent = 10 })
end)
end)
diff --git a/tests/indent/ruby_spec.lua b/tests/indent/ruby_spec.lua
index b669b8938..4dcd4d0fa 100644
--- a/tests/indent/ruby_spec.lua
+++ b/tests/indent/ruby_spec.lua
@@ -1,22 +1,22 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/ruby", {
+local run = Runner:new(it, 'tests/indent/ruby', {
shiftwidth = 2,
expandtab = true,
})
-describe("indent Ruby:", function()
- describe("whole file:", function()
- run:whole_file(".", {
- expected_failures = { "./period-issue-3364.rb" },
+describe('indent Ruby:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
+ expected_failures = { './period-issue-3364.rb' },
})
end)
- describe("new line:", function()
- run:new_line("indent-unless.rb", { on_line = 1, text = "stmt", indent = 2 })
- run:new_line("indent-assignment.rb", { on_line = 1, text = "1 +", indent = 2 })
- run:new_line("indent-parenthesized-statements.rb", { on_line = 1, text = "stmt", indent = 2 })
- run:new_line("indent-rescue.rb", { on_line = 1, text = "rescue", indent = 0 })
- run:new_line("indent-ensure.rb", { on_line = 1, text = "ensure", indent = 0 })
+ describe('new line:', function()
+ run:new_line('indent-unless.rb', { on_line = 1, text = 'stmt', indent = 2 })
+ run:new_line('indent-assignment.rb', { on_line = 1, text = '1 +', indent = 2 })
+ run:new_line('indent-parenthesized-statements.rb', { on_line = 1, text = 'stmt', indent = 2 })
+ run:new_line('indent-rescue.rb', { on_line = 1, text = 'rescue', indent = 0 })
+ run:new_line('indent-ensure.rb', { on_line = 1, text = 'ensure', indent = 0 })
end)
end)
diff --git a/tests/indent/rust_spec.lua b/tests/indent/rust_spec.lua
index 795765ba5..3671e9ee7 100644
--- a/tests/indent/rust_spec.lua
+++ b/tests/indent/rust_spec.lua
@@ -1,66 +1,66 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/rust", {
+local run = Runner:new(it, 'tests/indent/rust', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
-describe("indent Rust:", function()
- describe("whole file:", function()
- run:whole_file "."
+describe('indent Rust:', function()
+ describe('whole file:', function()
+ run:whole_file('.')
end)
- describe("new line:", function()
- run:new_line("array.rs", { on_line = 2, text = "0,", indent = 4 })
- run:new_line("array.rs", { on_line = 8, text = "0,", indent = 8 })
- run:new_line("comment.rs", { on_line = 3, text = "a", indent = "/// " })
- run:new_line("comment.rs", { on_line = 10, text = "a", indent = " /// " })
- run:new_line("cond.rs", { on_line = 11, text = "x += 1;", indent = 12 })
- run:new_line("cond.rs", { on_line = 2, text = "x += 1;", indent = 8 })
- run:new_line("cond.rs", { on_line = 4, text = "x += 1;", indent = 8 })
- run:new_line("cond.rs", { on_line = 6, text = "x += 1;", indent = 8 })
- run:new_line("cond.rs", { on_line = 8, text = "x += 1;", indent = 4 })
- run:new_line("if_let_cond.rs", { on_line = 2, text = "let a = 1;", indent = 8 })
- run:new_line("if_let_cond.rs", { on_line = 4, text = "let a = 1;", indent = 8 })
- run:new_line("if_let_cond.rs", { on_line = 6, text = "let a = 1;", indent = 4 })
- run:new_line("enum.rs", { on_line = 2, text = "Q,", indent = 4 })
- run:new_line("enum.rs", { on_line = 4, text = "i32,", indent = 8 })
- run:new_line("enum.rs", { on_line = 8, text = "z: u32,", indent = 8 })
- run:new_line("enum.rs", { on_line = 11, text = "let _x = 1;", indent = 0 })
- run:new_line("func.rs", { on_line = 1, text = "let _x = 1;", indent = 4 })
- run:new_line("func.rs", { on_line = 3, text = "let _x = 1;", indent = 0 })
- run:new_line("func.rs", { on_line = 6, text = "z: i32,", indent = 4 })
- run:new_line("impl.rs", { on_line = 3, text = "const FOO: u32 = 1;", indent = 4 })
- run:new_line("impl.rs", { on_line = 4, text = "let _x = 1;", indent = 8 })
- run:new_line("impl.rs", { on_line = 6, text = "let _x = 1;", indent = 4 })
- run:new_line("impl.rs", { on_line = 7, text = "let _x = 1;", indent = 0 })
- run:new_line("loop.rs", { on_line = 10, text = "x += 1;", indent = 8 })
- run:new_line("loop.rs", { on_line = 2, text = "x += 1;", indent = 8 })
- run:new_line("loop.rs", { on_line = 6, text = "x += 1;", indent = 8 })
- run:new_line("macro.rs", { on_line = 1, text = "() => {},", indent = 4 })
- run:new_line("macro.rs", { on_line = 12, text = "B C", indent = 4 })
- run:new_line("macro.rs", { on_line = 2, text = "struct $c;", indent = 8 })
- run:new_line("match.rs", { on_line = 2, text = "-1 => -1,", indent = 8 })
- run:new_line("match.rs", { on_line = 7, text = "let y = 1;", indent = 12 })
- run:new_line("match.rs", { on_line = 10, text = "let y = 1;", indent = 4 })
- run:new_line("mod.rs", { on_line = 1, text = "const Z: i32 = 1;", indent = 4 })
- run:new_line("mod.rs", { on_line = 2, text = "const Z: i32 = 1;", indent = 4 })
- run:new_line("mod.rs", { on_line = 6, text = "const Z: i32 = 1;", indent = 8 })
- run:new_line("mod.rs", { on_line = 7, text = "const Z: i32 = 1;", indent = 4 })
- run:new_line("string.rs", { on_line = 2, text = "brave new", indent = 0 })
- run:new_line("string.rs", { on_line = 5, text = "brave new \\", indent = 8 })
- run:new_line("string.rs", { on_line = 9, text = "brave new \\", indent = 8 })
- run:new_line("struct.rs", { on_line = 1, text = "z: i32,", indent = 4 })
- run:new_line("struct.rs", { on_line = 2, text = "z: i32,", indent = 4 })
- run:new_line("struct.rs", { on_line = 4, text = "let y = 1;", indent = 0 })
- run:new_line("trait.rs", { on_line = 4, text = "fn baz();", indent = 4 })
- run:new_line("trait.rs", { on_line = 5, text = "let y = 1;", indent = 0 })
- run:new_line("trait.rs", { on_line = 7, text = "fn baz();", indent = 4 })
- run:new_line("trait.rs", { on_line = 8, text = "()", indent = 8 })
- run:new_line("where.rs", { on_line = 17, text = "T: Debug,", indent = 4 })
- run:new_line("where.rs", { on_line = 2, text = "T: Debug,", indent = 4 })
- run:new_line("where.rs", { on_line = 9, text = "T: Debug,", indent = 4 })
+ describe('new line:', function()
+ run:new_line('array.rs', { on_line = 2, text = '0,', indent = 4 })
+ run:new_line('array.rs', { on_line = 8, text = '0,', indent = 8 })
+ run:new_line('comment.rs', { on_line = 3, text = 'a', indent = '/// ' })
+ run:new_line('comment.rs', { on_line = 10, text = 'a', indent = ' /// ' })
+ run:new_line('cond.rs', { on_line = 11, text = 'x += 1;', indent = 12 })
+ run:new_line('cond.rs', { on_line = 2, text = 'x += 1;', indent = 8 })
+ run:new_line('cond.rs', { on_line = 4, text = 'x += 1;', indent = 8 })
+ run:new_line('cond.rs', { on_line = 6, text = 'x += 1;', indent = 8 })
+ run:new_line('cond.rs', { on_line = 8, text = 'x += 1;', indent = 4 })
+ run:new_line('if_let_cond.rs', { on_line = 2, text = 'let a = 1;', indent = 8 })
+ run:new_line('if_let_cond.rs', { on_line = 4, text = 'let a = 1;', indent = 8 })
+ run:new_line('if_let_cond.rs', { on_line = 6, text = 'let a = 1;', indent = 4 })
+ run:new_line('enum.rs', { on_line = 2, text = 'Q,', indent = 4 })
+ run:new_line('enum.rs', { on_line = 4, text = 'i32,', indent = 8 })
+ run:new_line('enum.rs', { on_line = 8, text = 'z: u32,', indent = 8 })
+ run:new_line('enum.rs', { on_line = 11, text = 'let _x = 1;', indent = 0 })
+ run:new_line('func.rs', { on_line = 1, text = 'let _x = 1;', indent = 4 })
+ run:new_line('func.rs', { on_line = 3, text = 'let _x = 1;', indent = 0 })
+ run:new_line('func.rs', { on_line = 6, text = 'z: i32,', indent = 4 })
+ run:new_line('impl.rs', { on_line = 3, text = 'const FOO: u32 = 1;', indent = 4 })
+ run:new_line('impl.rs', { on_line = 4, text = 'let _x = 1;', indent = 8 })
+ run:new_line('impl.rs', { on_line = 6, text = 'let _x = 1;', indent = 4 })
+ run:new_line('impl.rs', { on_line = 7, text = 'let _x = 1;', indent = 0 })
+ run:new_line('loop.rs', { on_line = 10, text = 'x += 1;', indent = 8 })
+ run:new_line('loop.rs', { on_line = 2, text = 'x += 1;', indent = 8 })
+ run:new_line('loop.rs', { on_line = 6, text = 'x += 1;', indent = 8 })
+ run:new_line('macro.rs', { on_line = 1, text = '() => {},', indent = 4 })
+ run:new_line('macro.rs', { on_line = 12, text = 'B C', indent = 4 })
+ run:new_line('macro.rs', { on_line = 2, text = 'struct $c;', indent = 8 })
+ run:new_line('match.rs', { on_line = 2, text = '-1 => -1,', indent = 8 })
+ run:new_line('match.rs', { on_line = 7, text = 'let y = 1;', indent = 12 })
+ run:new_line('match.rs', { on_line = 10, text = 'let y = 1;', indent = 4 })
+ run:new_line('mod.rs', { on_line = 1, text = 'const Z: i32 = 1;', indent = 4 })
+ run:new_line('mod.rs', { on_line = 2, text = 'const Z: i32 = 1;', indent = 4 })
+ run:new_line('mod.rs', { on_line = 6, text = 'const Z: i32 = 1;', indent = 8 })
+ run:new_line('mod.rs', { on_line = 7, text = 'const Z: i32 = 1;', indent = 4 })
+ run:new_line('string.rs', { on_line = 2, text = 'brave new', indent = 0 })
+ run:new_line('string.rs', { on_line = 5, text = 'brave new \\', indent = 8 })
+ run:new_line('string.rs', { on_line = 9, text = 'brave new \\', indent = 8 })
+ run:new_line('struct.rs', { on_line = 1, text = 'z: i32,', indent = 4 })
+ run:new_line('struct.rs', { on_line = 2, text = 'z: i32,', indent = 4 })
+ run:new_line('struct.rs', { on_line = 4, text = 'let y = 1;', indent = 0 })
+ run:new_line('trait.rs', { on_line = 4, text = 'fn baz();', indent = 4 })
+ run:new_line('trait.rs', { on_line = 5, text = 'let y = 1;', indent = 0 })
+ run:new_line('trait.rs', { on_line = 7, text = 'fn baz();', indent = 4 })
+ run:new_line('trait.rs', { on_line = 8, text = '()', indent = 8 })
+ run:new_line('where.rs', { on_line = 17, text = 'T: Debug,', indent = 4 })
+ run:new_line('where.rs', { on_line = 2, text = 'T: Debug,', indent = 4 })
+ run:new_line('where.rs', { on_line = 9, text = 'T: Debug,', indent = 4 })
end)
end)
diff --git a/tests/indent/smali_spec.lua b/tests/indent/smali_spec.lua
index cddc4f9d2..44e4a9881 100644
--- a/tests/indent/smali_spec.lua
+++ b/tests/indent/smali_spec.lua
@@ -1,25 +1,28 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/smali", {
+local run = Runner:new(it, 'tests/indent/smali', {
tabstop = 4,
shiftwidth = 4,
expandtab = false,
})
-describe("indent Smali:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Smali:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("field.smali", { on_line = 7, text = 'value1 = "test"', indent = 1 })
- run:new_line("field.smali", { on_line = 10, text = "value2 = Lsome/enum;", indent = 2 })
- run:new_line("array_and_switch.smali", { on_line = 43, text = "1 2 3 4 5 6 200", indent = 2 })
- run:new_line("array_and_switch.smali", { on_line = 48, text = "Label10:", indent = 2 })
- run:new_line("method.smali", { on_line = 7, text = ".registers 10", indent = 1 })
- run:new_line("parameter.smali", { on_line = 20, text = ".annotation runtime Lsome/annotation;", indent = 3 })
- run:new_line("parameter.smali", { on_line = 21, text = 'something = "some value"', indent = 3 })
+ describe('new line:', function()
+ run:new_line('field.smali', { on_line = 7, text = 'value1 = "test"', indent = 1 })
+ run:new_line('field.smali', { on_line = 10, text = 'value2 = Lsome/enum;', indent = 2 })
+ run:new_line('array_and_switch.smali', { on_line = 43, text = '1 2 3 4 5 6 200', indent = 2 })
+ run:new_line('array_and_switch.smali', { on_line = 48, text = 'Label10:', indent = 2 })
+ run:new_line('method.smali', { on_line = 7, text = '.registers 10', indent = 1 })
+ run:new_line(
+ 'parameter.smali',
+ { on_line = 20, text = '.annotation runtime Lsome/annotation;', indent = 3 }
+ )
+ run:new_line('parameter.smali', { on_line = 21, text = 'something = "some value"', indent = 3 })
end)
end)
diff --git a/tests/indent/sql_spec.lua b/tests/indent/sql_spec.lua
index 2fdfc9b1b..9d3a3a8e6 100644
--- a/tests/indent/sql_spec.lua
+++ b/tests/indent/sql_spec.lua
@@ -1,19 +1,19 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/sql", {
+local run = Runner:new(it, 'tests/indent/sql', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 0,
expandtab = true,
})
-describe("indent SQL:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent SQL:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function() end)
+ describe('new line:', function() end)
end)
diff --git a/tests/indent/sway_spec.lua b/tests/indent/sway_spec.lua
index d37573ae9..d6f4506ef 100644
--- a/tests/indent/sway_spec.lua
+++ b/tests/indent/sway_spec.lua
@@ -1,20 +1,20 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/sway", {
+local run = Runner:new(it, 'tests/indent/sway', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = true,
})
-describe("indent Sway:", function()
- describe("whole file:", function()
- run:whole_file(".", {})
+describe('indent Sway:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {})
end)
- describe("new line:", function()
- run:new_line("main.sw", { on_line = 12, text = "const CONST: u32 = 2;", indent = 0 })
- run:new_line("main.sw", { on_line = 14, text = "let hi = 5;", indent = 4 })
- run:new_line("main.sw", { on_line = 15, text = "let hi = 5;", indent = 8 })
- run:new_line("main.sw", { on_line = 92, text = "let hi = 5;", indent = 12 })
+ describe('new line:', function()
+ run:new_line('main.sw', { on_line = 12, text = 'const CONST: u32 = 2;', indent = 0 })
+ run:new_line('main.sw', { on_line = 14, text = 'let hi = 5;', indent = 4 })
+ run:new_line('main.sw', { on_line = 15, text = 'let hi = 5;', indent = 8 })
+ run:new_line('main.sw', { on_line = 92, text = 'let hi = 5;', indent = 12 })
end)
end)
diff --git a/tests/indent/swift_spec.lua b/tests/indent/swift_spec.lua
index 501cbfa81..8c9b2d063 100644
--- a/tests/indent/swift_spec.lua
+++ b/tests/indent/swift_spec.lua
@@ -1,22 +1,37 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/swift", {
+local run = Runner:new(it, 'tests/indent/swift', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 2,
expandtab = true,
})
-describe("indent Swift:", function()
- describe("whole file:", function()
- run:whole_file(".", {})
+describe('indent Swift:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {})
end)
- describe("new line:", function()
- run:new_line("declarations.swift", { on_line = 6, text = "var x = 1", indent = 2 })
- run:new_line("declarations.swift", { on_line = 12, text = "var textInsideInit = true", indent = 4 })
- run:new_line("declarations.swift", { on_line = 19, text = "var textInsideWillSet = 1", indent = 6 })
- run:new_line("declarations.swift", { on_line = 22, text = "var textInsideDidSet = 1", indent = 6 })
- run:new_line("declarations.swift", { on_line = 27, text = "var textInsideOverrideFunc", indent = 4 })
- run:new_line("declarations.swift", { on_line = 33, text = "var InsideProtocol: String { get }", indent = 2 })
+ describe('new line:', function()
+ run:new_line('declarations.swift', { on_line = 6, text = 'var x = 1', indent = 2 })
+ run:new_line(
+ 'declarations.swift',
+ { on_line = 12, text = 'var textInsideInit = true', indent = 4 }
+ )
+ run:new_line(
+ 'declarations.swift',
+ { on_line = 19, text = 'var textInsideWillSet = 1', indent = 6 }
+ )
+ run:new_line(
+ 'declarations.swift',
+ { on_line = 22, text = 'var textInsideDidSet = 1', indent = 6 }
+ )
+ run:new_line(
+ 'declarations.swift',
+ { on_line = 27, text = 'var textInsideOverrideFunc', indent = 4 }
+ )
+ run:new_line(
+ 'declarations.swift',
+ { on_line = 33, text = 'var InsideProtocol: String { get }', indent = 2 }
+ )
end)
end)
diff --git a/tests/indent/t32_spec.lua b/tests/indent/t32_spec.lua
index 88d26612b..30c6542e0 100644
--- a/tests/indent/t32_spec.lua
+++ b/tests/indent/t32_spec.lua
@@ -1,137 +1,171 @@
-local Runner = require("tests.indent.common").Runner
-local XFAIL = require("tests.indent.common").XFAIL
+local Runner = require('tests.indent.common').Runner
+local XFAIL = require('tests.indent.common').XFAIL
-local runner = Runner:new(it, "tests/indent/t32", {
+local runner = Runner:new(it, 'tests/indent/t32', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent t32:", function()
- describe("whole file:", function()
- runner:whole_file "."
+describe('indent t32:', function()
+ describe('whole file:', function()
+ runner:whole_file('.')
end)
- describe("new line:", function()
- runner:new_line("if_block.cmm", { on_line = 2, text = "GOTO start", indent = 0 }, "command after IF", XFAIL)
+ describe('new line:', function()
+ runner:new_line(
+ 'if_block.cmm',
+ { on_line = 2, text = 'GOTO start', indent = 0 },
+ 'command after IF',
+ XFAIL
+ )
- runner:new_line("if_block.cmm", { on_line = 5, text = "GOTO start", indent = 2 }, "command in IF then block")
+ runner:new_line(
+ 'if_block.cmm',
+ { on_line = 5, text = 'GOTO start', indent = 2 },
+ 'command in IF then block'
+ )
- runner:new_line("if_block.cmm", { on_line = 4, text = "(", indent = 0 }, "block after IF")
+ runner:new_line('if_block.cmm', { on_line = 4, text = '(', indent = 0 }, 'block after IF')
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 1, 2 },
{ 14, 2 },
{ 19, 2 },
{ 21, 2 },
{ 41, 2 },
{ 42, 4 },
- } do
+ }) do
runner:new_line(
- "if_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command in IF then[" .. ii .. "]"
+ 'if_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command in IF then[' .. ii .. ']'
)
end
-- Insertion of a command right before the existing block results in
-- incorrect syntax. The parse either detect an error or incorrectly
-- assumes "ELSE IF" is a command.
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 26, 2 },
{ 30, 2 },
- } do
+ }) do
runner:new_line(
- "if_block.cmm",
+ 'if_block.cmm',
{ on_line = test[1], text = 'PRINT ""', indent = test[2] },
- "displace block in IF then[" .. ii .. "]",
+ 'displace block in IF then[' .. ii .. ']',
XFAIL
)
end
- runner:new_line("if_block.cmm", { on_line = 45, text = "&x=1.", indent = 6 }, "command in IF then", XFAIL)
+ runner:new_line(
+ 'if_block.cmm',
+ { on_line = 45, text = '&x=1.', indent = 6 },
+ 'command in IF then',
+ XFAIL
+ )
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 16, 2 },
{ 21, 2 },
{ 23, 2 },
{ 44, 4 },
- } do
+ }) do
runner:new_line(
- "if_block.cmm",
- { on_line = test[1], text = "CONTinue\n", indent = test[2] },
- "command in IF else[" .. ii .. "]"
+ 'if_block.cmm',
+ { on_line = test[1], text = 'CONTinue\n', indent = test[2] },
+ 'command in IF else[' .. ii .. ']'
)
end
- runner:new_line("while_block.cmm", { on_line = 2, text = "&x=1.", indent = 2 }, "command after WHILE")
+ runner:new_line(
+ 'while_block.cmm',
+ { on_line = 2, text = '&x=1.', indent = 2 },
+ 'command after WHILE'
+ )
- runner:new_line("while_block.cmm", { on_line = 4, text = "&x=1.", indent = 0 }, "command after WHILE")
+ runner:new_line(
+ 'while_block.cmm',
+ { on_line = 4, text = '&x=1.', indent = 0 },
+ 'command after WHILE'
+ )
- runner:new_line("while_block.cmm", { on_line = 1, text = "(\n", indent = 0 }, "block in WHILE then")
+ runner:new_line(
+ 'while_block.cmm',
+ { on_line = 1, text = '(\n', indent = 0 },
+ 'block in WHILE then'
+ )
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 5, 2 },
{ 12, 2 },
- } do
+ }) do
runner:new_line(
- "while_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command in WHILE then block[" .. ii .. "]"
+ 'while_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command in WHILE then block[' .. ii .. ']'
)
end
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 1, 0 },
{ 4, 2 },
- } do
+ }) do
runner:new_line(
- "repeat_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command after RePeaT[" .. ii .. "]"
+ 'repeat_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command after RePeaT[' .. ii .. ']'
)
end
- runner:new_line("repeat_block.cmm", { on_line = 3, text = "(\n", indent = 0 }, "block in RePeaT then")
+ runner:new_line(
+ 'repeat_block.cmm',
+ { on_line = 3, text = '(\n', indent = 0 },
+ 'block in RePeaT then'
+ )
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 7, 2 },
{ 18, 2 },
{ 24, 2 },
- } do
+ }) do
runner:new_line(
- "repeat_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command in RePeaT then block [" .. ii .. "]"
+ 'repeat_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command in RePeaT then block [' .. ii .. ']'
)
end
- runner:new_line("subroutine_block.cmm", { on_line = 1, text = "(\n", indent = 0 }, "block after call label")
+ runner:new_line(
+ 'subroutine_block.cmm',
+ { on_line = 1, text = '(\n', indent = 0 },
+ 'block after call label'
+ )
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 2, 2 },
{ 3, 2 },
{ 8, 2 },
{ 12, 2 },
{ 19, 2 },
- } do
+ }) do
runner:new_line(
- "subroutine_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command in subroutine block[" .. ii .. "]"
+ 'subroutine_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command in subroutine block[' .. ii .. ']'
)
end
- for ii, test in ipairs {
+ for ii, test in ipairs({
{ 5, 2 },
{ 13, 2 },
{ 23, 2 },
- } do
+ }) do
runner:new_line(
- "subroutine_block.cmm",
- { on_line = test[1], text = "&x=1.", indent = test[2] },
- "command after subroutine block[" .. ii .. "]"
+ 'subroutine_block.cmm',
+ { on_line = test[1], text = '&x=1.', indent = test[2] },
+ 'command after subroutine block[' .. ii .. ']'
)
end
end)
diff --git a/tests/indent/terraform_spec.lua b/tests/indent/terraform_spec.lua
index 49fa22c20..3cfcb937b 100644
--- a/tests/indent/terraform_spec.lua
+++ b/tests/indent/terraform_spec.lua
@@ -1,35 +1,56 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/terraform", {
+local run = Runner:new(it, 'tests/indent/terraform', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
})
-describe("indent Terraform:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Terraform:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("no-indent-after-brace.tf", { on_line = 4, text = "# Wow, no indent here please", indent = 0 })
- run:new_line("indent-in-multiline-tuples.tf", { on_line = 4, text = "3,", indent = 4 })
- run:new_line("indent-in-multiline-tuples.tf", { on_line = 3, text = "# as elements", indent = 4 })
- run:new_line("indent-in-multiline-tuples.tf", { on_line = 5, text = "# as outer block", indent = 2 })
- run:new_line("indent-in-multiline-tuples.tf", { on_line = 1, text = "# as outer block", indent = 2 })
- run:new_line("indent-in-multiline-objects.tf", { on_line = 4, text = '3: "baz",', indent = 4 })
- run:new_line("indent-in-multiline-objects.tf", { on_line = 3, text = "# as elements", indent = 4 })
- run:new_line("indent-in-multiline-objects.tf", { on_line = 5, text = "# as outer block", indent = 2 })
- run:new_line("indent-in-multiline-objects.tf", { on_line = 1, text = "# as outer block", indent = 2 })
- run:new_line("multiple-attributes.tf", { on_line = 2, text = "a = 1", indent = 2 })
- run:new_line("multiple-attributes.tf", { on_line = 3, text = "a = 1", indent = 2 })
- run:new_line("multiple-attributes.tf", { on_line = 4, text = "a = 1", indent = 0 })
- run:new_line("nested_blocks.tf", { on_line = 3, text = "a = 1", indent = 4 })
- run:new_line("nested_blocks.tf", { on_line = 4, text = "a = 1", indent = 2 })
- run:new_line("function_call.tf", { on_line = 4, text = "c,", indent = 4 })
- run:new_line("function_call.tf", { on_line = 5, text = "a = 1", indent = 2 })
+ describe('new line:', function()
+ run:new_line(
+ 'no-indent-after-brace.tf',
+ { on_line = 4, text = '# Wow, no indent here please', indent = 0 }
+ )
+ run:new_line('indent-in-multiline-tuples.tf', { on_line = 4, text = '3,', indent = 4 })
+ run:new_line(
+ 'indent-in-multiline-tuples.tf',
+ { on_line = 3, text = '# as elements', indent = 4 }
+ )
+ run:new_line(
+ 'indent-in-multiline-tuples.tf',
+ { on_line = 5, text = '# as outer block', indent = 2 }
+ )
+ run:new_line(
+ 'indent-in-multiline-tuples.tf',
+ { on_line = 1, text = '# as outer block', indent = 2 }
+ )
+ run:new_line('indent-in-multiline-objects.tf', { on_line = 4, text = '3: "baz",', indent = 4 })
+ run:new_line(
+ 'indent-in-multiline-objects.tf',
+ { on_line = 3, text = '# as elements', indent = 4 }
+ )
+ run:new_line(
+ 'indent-in-multiline-objects.tf',
+ { on_line = 5, text = '# as outer block', indent = 2 }
+ )
+ run:new_line(
+ 'indent-in-multiline-objects.tf',
+ { on_line = 1, text = '# as outer block', indent = 2 }
+ )
+ run:new_line('multiple-attributes.tf', { on_line = 2, text = 'a = 1', indent = 2 })
+ run:new_line('multiple-attributes.tf', { on_line = 3, text = 'a = 1', indent = 2 })
+ run:new_line('multiple-attributes.tf', { on_line = 4, text = 'a = 1', indent = 0 })
+ run:new_line('nested_blocks.tf', { on_line = 3, text = 'a = 1', indent = 4 })
+ run:new_line('nested_blocks.tf', { on_line = 4, text = 'a = 1', indent = 2 })
+ run:new_line('function_call.tf', { on_line = 4, text = 'c,', indent = 4 })
+ run:new_line('function_call.tf', { on_line = 5, text = 'a = 1', indent = 2 })
end)
end)
diff --git a/tests/indent/tiger_spec.lua b/tests/indent/tiger_spec.lua
index c1f252fd8..b41019c12 100644
--- a/tests/indent/tiger_spec.lua
+++ b/tests/indent/tiger_spec.lua
@@ -1,113 +1,233 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local runner = Runner:new(it, "tests/indent/tiger", {
+local runner = Runner:new(it, 'tests/indent/tiger', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Tiger:", function()
- describe("whole file:", function()
- runner:whole_file "."
+describe('indent Tiger:', function()
+ describe('whole file:', function()
+ runner:whole_file('.')
end)
- describe("new line:", function()
- runner:new_line("classes.tig", { on_line = 1, text = "var a := 0", indent = 2 }, "class declaration beginning")
- runner:new_line("classes.tig", { on_line = 2, text = "var a := 0", indent = 2 }, "class declaration after field")
- runner:new_line("classes.tig", { on_line = 4, text = "var a := 0", indent = 2 }, "class declaration after method")
- runner:new_line("classes.tig", { on_line = 5, text = "var a := 0", indent = 0 }, "after class declaration")
- runner:new_line("classes.tig", { on_line = 7, text = "var a := 0", indent = 2 }, "class type beginning")
- runner:new_line("classes.tig", { on_line = 8, text = "var a := 0", indent = 2 }, "class type after field")
- runner:new_line("classes.tig", { on_line = 10, text = "self.a := 0", indent = 4 }, "inside method")
- runner:new_line("classes.tig", { on_line = 13, text = "var a := 0", indent = 2 }, "class type after method")
- runner:new_line("classes.tig", { on_line = 14, text = "var a := 0", indent = 0 }, "after class type")
+ describe('new line:', function()
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 1, text = 'var a := 0', indent = 2 },
+ 'class declaration beginning'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 2, text = 'var a := 0', indent = 2 },
+ 'class declaration after field'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 4, text = 'var a := 0', indent = 2 },
+ 'class declaration after method'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 5, text = 'var a := 0', indent = 0 },
+ 'after class declaration'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 7, text = 'var a := 0', indent = 2 },
+ 'class type beginning'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 8, text = 'var a := 0', indent = 2 },
+ 'class type after field'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 10, text = 'self.a := 0', indent = 4 },
+ 'inside method'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 13, text = 'var a := 0', indent = 2 },
+ 'class type after method'
+ )
+ runner:new_line(
+ 'classes.tig',
+ { on_line = 14, text = 'var a := 0', indent = 0 },
+ 'after class type'
+ )
- runner:new_line("control-flow.tig", { on_line = 2, text = "true", indent = 4 }, "if condition")
- runner:new_line("control-flow.tig", { on_line = 4, text = "true", indent = 4 }, "if consequence")
- runner:new_line("control-flow.tig", { on_line = 4, text = "true", indent = 4 }, "if alternative")
- runner:new_line("control-flow.tig", { on_line = 10, text = "start := 0", indent = 4 }, "for index start")
- runner:new_line("control-flow.tig", { on_line = 12, text = "the_end", indent = 4 }, "for index end")
- runner:new_line("control-flow.tig", { on_line = 14, text = "break", indent = 4 }, "for body")
- runner:new_line("control-flow.tig", { on_line = 18, text = "true", indent = 4 }, "while condition")
- runner:new_line("control-flow.tig", { on_line = 20, text = "break", indent = 4 }, "while body")
+ runner:new_line('control-flow.tig', { on_line = 2, text = 'true', indent = 4 }, 'if condition')
+ runner:new_line(
+ 'control-flow.tig',
+ { on_line = 4, text = 'true', indent = 4 },
+ 'if consequence'
+ )
+ runner:new_line(
+ 'control-flow.tig',
+ { on_line = 4, text = 'true', indent = 4 },
+ 'if alternative'
+ )
+ runner:new_line(
+ 'control-flow.tig',
+ { on_line = 10, text = 'start := 0', indent = 4 },
+ 'for index start'
+ )
+ runner:new_line(
+ 'control-flow.tig',
+ { on_line = 12, text = 'the_end', indent = 4 },
+ 'for index end'
+ )
+ runner:new_line('control-flow.tig', { on_line = 14, text = 'break', indent = 4 }, 'for body')
+ runner:new_line(
+ 'control-flow.tig',
+ { on_line = 18, text = 'true', indent = 4 },
+ 'while condition'
+ )
+ runner:new_line('control-flow.tig', { on_line = 20, text = 'break', indent = 4 }, 'while body')
- runner:new_line("functions.tig", { on_line = 1, text = "parameter: int,", indent = 2 }, "parameter list beginning")
- runner:new_line("functions.tig", { on_line = 2, text = "parameter: int,", indent = 2 }, "parameter list middle")
- runner:new_line("functions.tig", { on_line = 4, text = ",parameter: int", indent = 2 }, "parameter list end")
- runner:new_line("functions.tig", { on_line = 5, text = "var a := 0", indent = 0 }, "after parameter list")
- runner:new_line("functions.tig", { on_line = 7, text = "print(a)", indent = 2 }, "function body")
- runner:new_line("functions.tig", { on_line = 9, text = "a,", indent = 6 }, "function call beginning")
- runner:new_line("functions.tig", { on_line = 10, text = "a,", indent = 6 }, "function call middle")
- runner:new_line("functions.tig", { on_line = 12, text = ",a", indent = 6 }, "function call end")
- runner:new_line("functions.tig", { on_line = 13, text = "; print(a)", indent = 4 }, "after function call")
- runner:new_line("functions.tig", { on_line = 14, text = "var a := 12", indent = 0 }, "after function declaration")
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 1, text = 'parameter: int,', indent = 2 },
+ 'parameter list beginning'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 2, text = 'parameter: int,', indent = 2 },
+ 'parameter list middle'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 4, text = ',parameter: int', indent = 2 },
+ 'parameter list end'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 5, text = 'var a := 0', indent = 0 },
+ 'after parameter list'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 7, text = 'print(a)', indent = 2 },
+ 'function body'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 9, text = 'a,', indent = 6 },
+ 'function call beginning'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 10, text = 'a,', indent = 6 },
+ 'function call middle'
+ )
+ runner:new_line('functions.tig', { on_line = 12, text = ',a', indent = 6 }, 'function call end')
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 13, text = '; print(a)', indent = 4 },
+ 'after function call'
+ )
+ runner:new_line(
+ 'functions.tig',
+ { on_line = 14, text = 'var a := 12', indent = 0 },
+ 'after function declaration'
+ )
- runner:new_line("groupings.tig", { on_line = 2, text = "var b := 0", indent = 2 }, "let declarations")
- runner:new_line("groupings.tig", { on_line = 3, text = "a := a + 1", indent = 2 }, "after 'in'")
- runner:new_line("groupings.tig", { on_line = 4, text = "a := a + 1;", indent = 4 }, "sequence")
- runner:new_line("groupings.tig", { on_line = 8, text = "a := a + 1;", indent = 2 }, "after sequence")
- runner:new_line("groupings.tig", { on_line = 10, text = "+ 1", indent = 0 }, "after 'end'")
+ runner:new_line(
+ 'groupings.tig',
+ { on_line = 2, text = 'var b := 0', indent = 2 },
+ 'let declarations'
+ )
+ runner:new_line('groupings.tig', { on_line = 3, text = 'a := a + 1', indent = 2 }, "after 'in'")
+ runner:new_line('groupings.tig', { on_line = 4, text = 'a := a + 1;', indent = 4 }, 'sequence')
+ runner:new_line(
+ 'groupings.tig',
+ { on_line = 8, text = 'a := a + 1;', indent = 2 },
+ 'after sequence'
+ )
+ runner:new_line('groupings.tig', { on_line = 10, text = '+ 1', indent = 0 }, "after 'end'")
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 4, text = "field: record,", indent = 4 },
- "record type beginning"
+ 'values-and-expressions.tig',
+ { on_line = 4, text = 'field: record,', indent = 4 },
+ 'record type beginning'
+ )
+ runner:new_line(
+ 'values-and-expressions.tig',
+ { on_line = 5, text = 'field: record,', indent = 4 },
+ 'record type middle'
+ )
+ runner:new_line(
+ 'values-and-expressions.tig',
+ { on_line = 7, text = ',field: record', indent = 4 },
+ 'record type end'
+ )
+ runner:new_line(
+ 'values-and-expressions.tig',
+ { on_line = 8, text = 'var a := 0', indent = 2 },
+ 'after record type'
+ )
+ runner:new_line(
+ 'values-and-expressions.tig',
+ { on_line = 10, text = '0', indent = 4 },
+ 'variable declaration init value'
+ )
+ runner:new_line(
+ 'values-and-expressions.tig',
+ { on_line = 11, text = '+ a', indent = 4 },
+ 'variable declaration init follow-up'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 5, text = "field: record,", indent = 4 },
- "record type middle"
+ 'values-and-expressions.tig',
+ { on_line = 13, text = 'a', indent = 4 },
+ 'array index'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 7, text = ",field: record", indent = 4 },
- "record type end"
+ 'values-and-expressions.tig',
+ { on_line = 14, text = '+ a', indent = 4 },
+ 'array index follow-up'
)
- runner:new_line("values-and-expressions.tig", { on_line = 8, text = "var a := 0", indent = 2 }, "after record type")
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 10, text = "0", indent = 4 },
- "variable declaration init value"
+ 'values-and-expressions.tig',
+ { on_line = 15, text = '+ a', indent = 2 },
+ 'after array value'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 11, text = "+ a", indent = 4 },
- "variable declaration init follow-up"
+ 'values-and-expressions.tig',
+ { on_line = 18, text = 'a', indent = 4 },
+ 'array expression size'
)
- runner:new_line("values-and-expressions.tig", { on_line = 13, text = "a", indent = 4 }, "array index")
- runner:new_line("values-and-expressions.tig", { on_line = 14, text = "+ a", indent = 4 }, "array index follow-up")
- runner:new_line("values-and-expressions.tig", { on_line = 15, text = "+ a", indent = 2 }, "after array value")
- runner:new_line("values-and-expressions.tig", { on_line = 18, text = "a", indent = 4 }, "array expression size")
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 20, text = "of", indent = 4 },
- "array expression after size"
+ 'values-and-expressions.tig',
+ { on_line = 20, text = 'of', indent = 4 },
+ 'array expression after size'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 21, text = "a", indent = 4 },
- "array expression init value"
+ 'values-and-expressions.tig',
+ { on_line = 21, text = 'a', indent = 4 },
+ 'array expression init value'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 25, text = "field = 0,", indent = 4 },
- "record expression beginning"
+ 'values-and-expressions.tig',
+ { on_line = 25, text = 'field = 0,', indent = 4 },
+ 'record expression beginning'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 26, text = "field = 0,", indent = 4 },
- "record expression middle"
+ 'values-and-expressions.tig',
+ { on_line = 26, text = 'field = 0,', indent = 4 },
+ 'record expression middle'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 28, text = ",field = 0", indent = 4 },
- "record expression end"
+ 'values-and-expressions.tig',
+ { on_line = 28, text = ',field = 0', indent = 4 },
+ 'record expression end'
)
runner:new_line(
- "values-and-expressions.tig",
- { on_line = 29, text = "a := 0", indent = 2 },
- "after record expression"
+ 'values-and-expressions.tig',
+ { on_line = 29, text = 'a := 0', indent = 2 },
+ 'after record expression'
)
end)
end)
diff --git a/tests/indent/usd_spec.lua b/tests/indent/usd_spec.lua
index c4e8198aa..85e9b9f78 100644
--- a/tests/indent/usd_spec.lua
+++ b/tests/indent/usd_spec.lua
@@ -1,21 +1,21 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/usd", {
+local run = Runner:new(it, 'tests/indent/usd', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = true,
})
-describe("indent USD:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent USD:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("prim.usd", { on_line = 3, text = "active = false", indent = 4 })
- run:new_line("prim.usd", { on_line = 5, text = "custom int foo = 10", indent = 4 })
+ describe('new line:', function()
+ run:new_line('prim.usd', { on_line = 3, text = 'active = false', indent = 4 })
+ run:new_line('prim.usd', { on_line = 5, text = 'custom int foo = 10', indent = 4 })
end)
end)
diff --git a/tests/indent/vue_spec.lua b/tests/indent/vue_spec.lua
index 09527e4b0..ec9466d5e 100644
--- a/tests/indent/vue_spec.lua
+++ b/tests/indent/vue_spec.lua
@@ -1,24 +1,29 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-- local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent", {
+local run = Runner:new(it, 'tests/indent', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent Vue:", function()
- describe("whole file:", function()
- run:whole_file({ "vue/" }, {})
+describe('indent Vue:', function()
+ describe('whole file:', function()
+ run:whole_file({ 'vue/' }, {})
end)
- describe("new line:", function()
- for _, info in ipairs {
+ describe('new line:', function()
+ for _, info in ipairs({
{ 1, 2 },
{ 3, 0 },
- } do
- run:new_line("vue/template_indent.vue", { on_line = info[1], text = "Foo", indent = info[2] }, info[3], info[4])
+ }) do
+ run:new_line(
+ 'vue/template_indent.vue',
+ { on_line = info[1], text = 'Foo', indent = info[2] },
+ info[3],
+ info[4]
+ )
end
end)
end)
diff --git a/tests/indent/wgsl_spec.lua b/tests/indent/wgsl_spec.lua
index e1bf618f8..9a30cff4b 100644
--- a/tests/indent/wgsl_spec.lua
+++ b/tests/indent/wgsl_spec.lua
@@ -1,43 +1,43 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/wgsl", {
+local run = Runner:new(it, 'tests/indent/wgsl', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent WGSL:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent WGSL:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("basic.wgsl", { on_line = 47, text = "c: u32,", indent = 2 })
- run:new_line("basic.wgsl", { on_line = 52, text = "c: u32,", indent = 2 })
- run:new_line("basic.wgsl", { on_line = 56, text = "c: u32,", indent = 2 })
- run:new_line("basic.wgsl", { on_line = 59, text = "c: u32,", indent = 2 })
- run:new_line("type_constructor_or_function_call_expression.wgsl", {
+ describe('new line:', function()
+ run:new_line('basic.wgsl', { on_line = 47, text = 'c: u32,', indent = 2 })
+ run:new_line('basic.wgsl', { on_line = 52, text = 'c: u32,', indent = 2 })
+ run:new_line('basic.wgsl', { on_line = 56, text = 'c: u32,', indent = 2 })
+ run:new_line('basic.wgsl', { on_line = 59, text = 'c: u32,', indent = 2 })
+ run:new_line('type_constructor_or_function_call_expression.wgsl', {
on_line = 3,
- text = "b",
+ text = 'b',
indent = 4,
})
- run:new_line("type_constructor_or_function_call_expression.wgsl", {
+ run:new_line('type_constructor_or_function_call_expression.wgsl', {
on_line = 4,
- text = "c",
+ text = 'c',
indent = 4,
})
- run:new_line("type_constructor_or_function_call_expression.wgsl", {
+ run:new_line('type_constructor_or_function_call_expression.wgsl', {
on_line = 8,
- text = "b",
+ text = 'b',
indent = 4,
})
- run:new_line("type_constructor_or_function_call_expression.wgsl", {
+ run:new_line('type_constructor_or_function_call_expression.wgsl', {
on_line = 9,
- text = "c",
+ text = 'c',
indent = 4,
})
end)
diff --git a/tests/indent/yaml_spec.lua b/tests/indent/yaml_spec.lua
index 91c60c227..001bc01f1 100644
--- a/tests/indent/yaml_spec.lua
+++ b/tests/indent/yaml_spec.lua
@@ -1,20 +1,20 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/yaml", {
+local run = Runner:new(it, 'tests/indent/yaml', {
shiftwidth = 2,
expandtab = true,
})
-describe("indent YAML:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent YAML:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("indent-sequence-items.yaml", { on_line = 2, text = "key3: value3", indent = 2 })
- run:new_line("autoindent-mapping-pair.yaml", { on_line = 1, text = "key3: value3", indent = 2 })
+ describe('new line:', function()
+ run:new_line('indent-sequence-items.yaml', { on_line = 2, text = 'key3: value3', indent = 2 })
+ run:new_line('autoindent-mapping-pair.yaml', { on_line = 1, text = 'key3: value3', indent = 2 })
end)
end)
diff --git a/tests/indent/yang_spec.lua b/tests/indent/yang_spec.lua
index 618d260c6..44e1dbce5 100644
--- a/tests/indent/yang_spec.lua
+++ b/tests/indent/yang_spec.lua
@@ -1,23 +1,23 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
-local run = Runner:new(it, "tests/indent/yang", {
+local run = Runner:new(it, 'tests/indent/yang', {
tabstop = 2,
shiftwidth = 2,
softtabstop = 0,
expandtab = true,
})
-describe("indent YANG:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent YANG:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("module.yang", { on_line = 12, text = "// Aligned indentation ended", indent = 2 })
- run:new_line("module.yang", { on_line = 37, text = "// Test", indent = 4 })
- run:new_line("module.yang", { on_line = 40, text = "// Test", indent = 4 })
- run:new_line("module.yang", { on_line = 52, text = "Aligned string!", indent = 11 })
+ describe('new line:', function()
+ run:new_line('module.yang', { on_line = 12, text = '// Aligned indentation ended', indent = 2 })
+ run:new_line('module.yang', { on_line = 37, text = '// Test', indent = 4 })
+ run:new_line('module.yang', { on_line = 40, text = '// Test', indent = 4 })
+ run:new_line('module.yang', { on_line = 52, text = 'Aligned string!', indent = 11 })
end)
end)
diff --git a/tests/indent/yuck_spec.lua b/tests/indent/yuck_spec.lua
index 6ce15de6f..b20ac8dac 100644
--- a/tests/indent/yuck_spec.lua
+++ b/tests/indent/yuck_spec.lua
@@ -1,19 +1,19 @@
-local Runner = require("tests.indent.common").Runner
-local run = Runner:new(it, "tests/indent/yuck", {
+local Runner = require('tests.indent.common').Runner
+local run = Runner:new(it, 'tests/indent/yuck', {
tabstop = 2,
shiftwidth = 2,
expandtab = true,
})
-describe("indent yuck", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent yuck', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new line:", function()
- run:new_line("indent.yuck", { on_line = 13, text = ":box1 parameter", indent = 4 })
- run:new_line("indent.yuck", { on_line = 17, text = ")", indent = 0 })
+ describe('new line:', function()
+ run:new_line('indent.yuck', { on_line = 13, text = ':box1 parameter', indent = 4 })
+ run:new_line('indent.yuck', { on_line = 17, text = ')', indent = 0 })
end)
end)
diff --git a/tests/indent/zig_spec.lua b/tests/indent/zig_spec.lua
index c064d9ab9..4ad17446f 100644
--- a/tests/indent/zig_spec.lua
+++ b/tests/indent/zig_spec.lua
@@ -1,22 +1,22 @@
-local Runner = require("tests.indent.common").Runner
+local Runner = require('tests.indent.common').Runner
--local XFAIL = require("tests.indent.common").XFAIL
-local run = Runner:new(it, "tests/indent/zig", {
+local run = Runner:new(it, 'tests/indent/zig', {
tabstop = 4,
shiftwidth = 4,
softtabstop = 4,
expandtab = true,
})
-describe("indent Zig:", function()
- describe("whole file:", function()
- run:whole_file(".", {
+describe('indent Zig:', function()
+ describe('whole file:', function()
+ run:whole_file('.', {
expected_failures = {},
})
end)
- describe("new lines:", function()
- run:new_line("pr-3269.zig", { on_line = 5, text = "return;", indent = 4 })
- run:new_line("pr-3269.zig", { on_line = 6, text = "", indent = 0 })
+ describe('new lines:', function()
+ run:new_line('pr-3269.zig', { on_line = 5, text = 'return;', indent = 4 })
+ run:new_line('pr-3269.zig', { on_line = 6, text = '', indent = 0 })
end)
end)
diff --git a/tests/query/highlights/lua/test.lua b/tests/query/highlights/lua/test.lua
index 55818bb74..2261d2e4e 100644
--- a/tests/query/highlights/lua/test.lua
+++ b/tests/query/highlights/lua/test.lua
@@ -14,5 +14,5 @@ next(a)
-- ^ @function.builtin
-- Checking for incorrect hlgroup of injected luap
-string.match(s, "\0%d[^\n]+")
--- ^ @!constant
+string.match(s, '\0%d[^\n]+')
+-- ^ !constant
diff --git a/tests/query/highlights_spec.lua b/tests/query/highlights_spec.lua
index 3bb03d49d..b6a52124a 100644
--- a/tests/query/highlights_spec.lua
+++ b/tests/query/highlights_spec.lua
@@ -1,39 +1,39 @@
-local highlighter = require "vim.treesitter.highlighter"
-local parsers = require "nvim-treesitter.parsers"
+local highlighter = require('vim.treesitter.highlighter')
local ts = vim.treesitter
local COMMENT_NODES = {
- markdown = "html_block",
- haskell = "haddock",
+ markdown = 'html_block',
+ haskell = 'haddock',
}
local function check_assertions(file)
local buf = vim.fn.bufadd(file)
vim.fn.bufload(file)
- local lang = parsers.get_buf_lang(buf)
+ local ft = vim.bo[buf].filetype
+ local lang = vim.treesitter.language.get_lang(ft) or ft
assert.same(
1,
- vim.fn.executable "highlight-assertions",
+ vim.fn.executable('highlight-assertions'),
'"highlight-assertions" not executable!'
.. ' Get it via "cargo install --git https://github.com/theHamsta/highlight-assertions"'
)
- local comment_node = COMMENT_NODES[lang] or "comment"
+ local comment_node = COMMENT_NODES[lang] or 'comment'
local assertions = vim.fn.json_decode(
vim.fn.system(
"highlight-assertions -p '"
- .. vim.api.nvim_get_runtime_file("parser/" .. lang .. ".so", false)[1]
+ .. vim.api.nvim_get_runtime_file('parser/' .. lang .. '.so', false)[1]
.. "' -s '"
.. file
.. "' -c "
.. comment_node
)
)
- local parser = parsers.get_parser(buf, lang)
+ local parser = ts.get_parser(buf, lang)
parser:parse(true)
local self = highlighter.new(parser, {})
- assert.True(#assertions > 0, "No assertions detected!")
+ assert.True(#assertions > 0, 'No assertions detected!')
for _, assertion in ipairs(assertions) do
local row = assertion.position.row
local col = assertion.position.column
@@ -46,7 +46,7 @@ local function check_assertions(file)
return
end
- local root = state.tstree:root()
+ local root = tstree:root()
local root_start_row, _, root_end_row, _ = root:range()
-- Only worry about trees within the line range
@@ -72,21 +72,22 @@ local function check_assertions(file)
assert.is.number(col)
if hl and ts.is_in_node_range(node, row, col) then
local c = query._query.captures[capture] -- name of the capture in the query
- if c ~= nil and c ~= "spell" and c ~= "conceal" then
+ if c ~= nil and c ~= 'spell' and c ~= 'conceal' then
captures[c] = true
highlights[c] = true
end
end
end
- end, true)
- if assertion.expected_capture_name:match "^!" then
+ end)
+ if assertion.expected_capture_name:match('^!') then
assert.Falsy(
- captures[assertion.expected_capture_name:sub(2)] or highlights[assertion.expected_capture_name:sub(2)],
- "Error in at "
+ captures[assertion.expected_capture_name:sub(2)]
+ or highlights[assertion.expected_capture_name:sub(2)],
+ 'Error in at '
.. file
- .. ":"
+ .. ':'
.. (row + 1)
- .. ":"
+ .. ':'
.. (col + 1)
.. ': expected "'
.. assertion.expected_capture_name
@@ -98,11 +99,11 @@ local function check_assertions(file)
else
assert.True(
captures[assertion.expected_capture_name] or highlights[assertion.expected_capture_name],
- "Error in at "
+ 'Error in at '
.. file
- .. ":"
+ .. ':'
.. (row + 1)
- .. ":"
+ .. ':'
.. (col + 1)
.. ': expected "'
.. assertion.expected_capture_name
@@ -115,8 +116,8 @@ local function check_assertions(file)
end
end
-describe("highlight queries", function()
- local files = vim.fn.split(vim.fn.glob "tests/query/highlights/**/*.*")
+describe('highlight queries', function()
+ local files = vim.fn.split(vim.fn.glob('tests/query/highlights/**/*.*'))
for _, file in ipairs(files) do
it(file, function()
check_assertions(file)
diff --git a/tests/query/injection_spec.lua b/tests/query/injection_spec.lua
index 95ad12eec..91096fee4 100644
--- a/tests/query/injection_spec.lua
+++ b/tests/query/injection_spec.lua
@@ -1,24 +1,30 @@
-require "nvim-treesitter.highlight" -- yes, this is necessary to set the hlmap
-local configs = require "nvim-treesitter.configs"
-local parsers = require "nvim-treesitter.parsers"
+local config = require('nvim-treesitter.config')
local ts = vim.treesitter
local function check_assertions(file)
local buf = vim.fn.bufadd(file)
vim.fn.bufload(file)
- local lang = parsers.get_buf_lang(buf)
+ local ft = vim.bo[buf].filetype
+ local lang = vim.treesitter.language.get_lang(ft) or ft
assert.same(
1,
- vim.fn.executable "highlight-assertions",
+ vim.fn.executable('highlight-assertions'),
'"highlight-assertions" not executable!'
.. ' Get it via "cargo install --git https://github.com/theHamsta/highlight-assertions"'
)
local assertions = vim.fn.json_decode(
vim.fn.system(
- "highlight-assertions -p '" .. configs.get_parser_install_dir() .. "/" .. lang .. ".so'" .. " -s '" .. file .. "'"
+ "highlight-assertions -p '"
+ .. config.get_install_dir('parser')
+ .. '/'
+ .. lang
+ .. ".so'"
+ .. " -s '"
+ .. file
+ .. "'"
)
)
- local parser = parsers.get_parser(buf, lang)
+ local parser = ts.get_parser(buf, lang)
local self = parser
local top_level_root = parser:parse(true)[1]:root()
@@ -27,7 +33,7 @@ local function check_assertions(file)
local row = assertion.position.row
local col = assertion.position.column
- local neg_assert = assertion.expected_capture_name:match "^!"
+ local neg_assert = assertion.expected_capture_name:match('^!')
assertion.expected_capture_name = neg_assert and assertion.expected_capture_name:sub(2)
or assertion.expected_capture_name
local found = false
@@ -48,11 +54,11 @@ local function check_assertions(file)
if neg_assert then
assert.False(
found,
- "Error in at "
+ 'Error in at '
.. file
- .. ":"
+ .. ':'
.. (row + 1)
- .. ":"
+ .. ':'
.. (col + 1)
.. ': expected "'
.. assertion.expected_capture_name
@@ -61,11 +67,11 @@ local function check_assertions(file)
else
assert.True(
found,
- "Error in at "
+ 'Error in at '
.. file
- .. ":"
+ .. ':'
.. (row + 1)
- .. ":"
+ .. ':'
.. (col + 1)
.. ': expected "'
.. assertion.expected_capture_name
@@ -75,8 +81,8 @@ local function check_assertions(file)
end
end
-describe("injections", function()
- local files = vim.fn.split(vim.fn.glob "tests/query/injections/**/*.*")
+describe('injections', function()
+ local files = vim.fn.split(vim.fn.glob('tests/query/injections/**/*.*'))
for _, file in ipairs(files) do
it(file, function()
check_assertions(file)
diff --git a/tests/unit/ts_utils_spec.lua b/tests/unit/ts_utils_spec.lua
deleted file mode 100644
index 397fa7eaf..000000000
--- a/tests/unit/ts_utils_spec.lua
+++ /dev/null
@@ -1,114 +0,0 @@
-local tsutils = require "nvim-treesitter.ts_utils"
-
-describe("update_selection", function()
- local function get_updated_selection(case)
- vim.api.nvim_buf_set_lines(0, 0, -1, false, case.lines)
- tsutils.update_selection(0, case.node, case.selection_mode)
- vim.cmd "normal! y"
- return vim.fn.getreg '"'
- end
-
- it("charwise1", function()
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 0, 2, 1 },
- selection_mode = "v",
- },
- "foo\n\nb"
- )
- it("charwise2", function() end)
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 1, 2, 1 },
- selection_mode = "v",
- },
- "oo\n\nb"
- )
- it("charwise3", function() end)
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 2, 2, 1 },
- selection_mode = "v",
- },
- "o\n\nb"
- )
- it("charwise4", function() end)
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 3, 2, 1 },
- selection_mode = "v",
- },
- "\n\nb"
- )
- end)
- it("linewise", function()
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 3, 2, 1 },
- selection_mode = "V",
- },
- "foo\n\nbar\n"
- )
- end)
- it("blockwise", function()
- assert.equal(
- get_updated_selection {
- lines = { "foo", "", "bar" },
- node = { 0, 3, 2, 1 },
- selection_mode = "<C-v>",
- },
- "foo\n\nbar"
- )
- end)
-end)
-
-describe("swap_nodes", function()
- local function swap(case)
- vim.api.nvim_buf_set_lines(0, 0, -1, false, case.lines)
- vim.opt.filetype = case.filetype
- local a = vim.treesitter.get_node {
- bufnr = 0,
- pos = { case.a[1], case.a[2] },
- }
- local b = vim.treesitter.get_node {
- bufnr = 0,
- pos = { case.b[1], case.b[2] },
- }
- tsutils.swap_nodes(a, b, 0, true)
- end
-
- it("works on adjacent nodes", function()
- swap {
- filetype = "python",
- lines = { "print(1)" },
- a = { 0, 0 },
- b = { 0, 5 },
- }
-
- it("swaps text", function() end)
- assert.same(vim.api.nvim_buf_get_lines(0, 0, -1, false), { "(1)print" })
-
- it("moves the cursor", function() end)
- assert.same(vim.api.nvim_win_get_cursor(0), { 1, 3 })
- end)
-
- it("works with multiline nodes", function()
- swap {
- filetype = "lua",
- lines = { "x = { [[", "]], [[", ".....]]}" },
- a = { 0, 6 },
- b = { 1, 4 },
- }
-
- it("swaps text", function() end)
- assert.same(vim.api.nvim_buf_get_lines(0, 0, -1, false), { "x = { [[", ".....]], [[", "]]}" })
-
- it("moves the cursor", function() end)
- assert.same(vim.api.nvim_win_get_cursor(0), { 2, 9 })
- end)
-end)