nvim-treesitter-textobjects
nvim-treesitter-textobjects copied to clipboard
Captures dont work with +/* quantifiers.
I want to create a custom textobject for c and cpp which will select all the statements inside function body excluding function parenthesis. I have added the below query search to textobjects.scm, but nvim-treesitter query seach does not work as expected. I am facing similar issue with nvim-treesitter/playground as well.
(function_definition
body: (compound_statement
("{" (_)* @function.inner . "}"))?) @function.outer
Steps to reproduce the behavior:
- Create a file
foo.c - Paste the following contents in
foo.c
int foo(int x) {
int a = 3;
int b = 4;
return x + 1;
}
- Install
nvim-treesitter/playground - In the query editor paste the following
(function_definition
body: (compound_statement
("{" (_)* @function.inner . "}"))?) @function.outer
@function.inner incorrectly highlights only the last statement inside function parenthesis.

whereas @function.inner should highlight all the statements inside parenthesis.

Output of :checkhealth nvim_treesitter
health#nvim_treesitter#check
Installation
- OK:
tree-sitter found 0.20.0 (parser generator, only needed for :TSInstallFromGrammar)
- OK:
node found v16.6.1 (only needed for :TSInstallFromGrammar)
- OK:
git executable found.
- OK:
cc executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl" }
- OK: Neovim was compiled with tree-sitter runtime ABI version 13 (required >=13). Parsers must be compatible with runtime ABI.
Parser/Features H L F I J
- ocaml_interface✓ ✓ ✓ . ✓
- beancount ✓ . ✓ . .
- python ✓ ✓ ✓ ✓ ✓
- sparql ✓ ✓ ✓ ✓ ✓
- comment ✓ . . . .
- lua ✓ ✓ ✓ ✓ ✓
- ocaml ✓ ✓ ✓ . ✓
- go ✓ ✓ ✓ ✓ ✓
- ql ✓ ✓ . ✓ ✓
- json ✓ ✓ ✓ ✓ .
- jsdoc ✓ . . . .
- ledger ✓ . ✓ ✓ ✓
- php ✓ ✓ ✓ ✓ ✓
- clojure ✓ ✓ ✓ . ✓
- supercollider ✓ ✓ ✓ ✓ ✓
- heex ✓ . ✓ ✓ ✓
- typescript ✓ ✓ ✓ ✓ ✓
- fennel ✓ ✓ . . ✓
- query ✓ ✓ ✓ ✓ ✓
- cpp ✓ ✓ ✓ ✓ ✓
- vue ✓ . ✓ . ✓
- latex ✓ . ✓ . ✓
- rst ✓ ✓ . . ✓
- css ✓ . ✓ ✓ ✓
- glimmer ✓ . . . .
- erlang . . . . .
- regex ✓ . . . .
- svelte ✓ . ✓ ✓ ✓
- c ✓ ✓ ✓ ✓ ✓
- fortran ✓ . ✓ ✓ .
- teal ✓ ✓ ✓ ✓ ✓
- java ✓ ✓ . ✓ ✓
- gomod ✓ . . . .
- dart ✓ ✓ . ✓ ✓
- verilog ✓ ✓ ✓ . ✓
- bash ✓ ✓ ✓ . ✓
- yaml ✓ ✓ ✓ ✓ ✓
- julia ✓ ✓ ✓ ✓ ✓
- vim ✓ . . . ✓
- cmake ✓ . ✓ . .
- turtle ✓ ✓ ✓ ✓ ✓
- zig ✓ . ✓ ✓ ✓
- html ✓ ✓ ✓ ✓ ✓
- bibtex ✓ . ✓ ✓ .
- r ✓ ✓ . . .
- tsx ✓ ✓ ✓ ✓ ✓
- yang ✓ . ✓ . .
- javascript ✓ ✓ ✓ ✓ ✓
- surface ✓ . ✓ ✓ ✓
- godotResource ✓ ✓ ✓ . .
- c_sharp ✓ ✓ ✓ . ✓
- commonlisp ✓ ✓ ✓ . .
- gdscript ✓ ✓ . . ✓
- elixir ✓ ✓ ✓ ✓ ✓
- cuda ✓ ✓ ✓ ✓ ✓
- haskell ✓ . . . ✓
- ocamllex ✓ . . . ✓
- kotlin ✓ . . . ✓
- ruby ✓ ✓ ✓ ✓ ✓
- fish ✓ ✓ ✓ ✓ ✓
- devicetree ✓ ✓ ✓ ✓ ✓
- scala . . . . .
- dockerfile ✓ . . . ✓
- rust ✓ ✓ ✓ ✓ ✓
- swift . . . . .
- toml ✓ ✓ ✓ ✓ ✓
- tlaplus ✓ . ✓ . ✓
- elm . . . . .
- jsonc ✓ ✓ ✓ ✓ ✓
- graphql ✓ . . ✓ ✓
- nix ✓ ✓ ✓ . ✓
- scss ✓ . . ✓ .
- hcl ✓ . ✓ ✓ ✓
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}
Output of nvim --version
NVIM v0.5.0
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/bin/cc -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -Wp,-U_FORTIFY_SOURCE -Wp,-D_FORTIFY_SOURCE=1
-DNVIM_TS_HAS_SET_MATCH_LIMIT -O2 -DNDEBUG -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/build/neovim/src/neovim-0.5.0/build/config -I/build/neovim/src/neovim-0.5.0/src -I/usr/include -I/build/neovim/src/neovim-0.5.0/build/src/nvim/auto -I/build/neovim/src/neovim-0.5.0/build/include
Compiled by builduser
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/share/nvim"
Run :checkhealth for more info
I have also tested this on neovim nightly 0.6.0+dev+43+g02bf251bb-1. I am facing the same issue.
Hi, currently the quantifier operators (*, +) aren't supported.
This is a upstream problem https://github.com/neovim/neovim/pull/17099