Textobject Queries
Helix supports textobjects that are language specific, such as functions, classes, etc.
These textobjects require an accompanying tree-sitter grammar and a textobjects.scm
query file
to work properly. Tree-sitter allows us to query the source code syntax tree
and capture specific parts of it. The queries are written in a lisp dialect.
More information on how to write queries can be found in the official tree-sitter
documentation ↗.
Query files should be placed in runtime/queries/{language}/textobjects.scm
when contributing to Helix. Note that to test the query files locally you should put
them under your local runtime directory (~/.config/helix/runtime
on Linux
for example).
The following captures ↗ are recognized:
function.inside
function.around
class.inside
class.around
test.inside
test.around
parameter.inside
comment.inside
comment.around
entry.inside
entry.around
Example query files ↗ can be found in the helix GitHub repository.
Queries for textobject based navigation
Tree-sitter based navigation in Helix is done using captures in the following order:
object.movement
object.around
object.inside
For example if a function.around
capture has been already defined for a language
in its textobjects.scm
file, function navigation should also work automatically.
function.movement
should be defined only if the node captured by function.around
doesn’t make sense in a navigation context.