nvim-treesitter / nvim-treesitter/nvim-treesitter-textobjects
change inside function(@funcion.inner) doesn't work after first time
Nobody has claimed this yet.
- Dominant language
- Tree-sitter Query
- Stars
- 2.8k
- Forks
- 271
- Avg merge
- 8d 8h
- Merged PRs (30d)
- 1
Description
Describe the bug
I'm working on a tsx file. The first time i press cif the function content is deleted and it gets into the insert mode as expected.
Now I undo the changes with u or just write another text, escape into normal mode and press again cif, this time it won't work until exiting the buffer and reopen.
I found that when I open :InspectTree the issue is gone. When I close the :InspectTree buffer the issue recurs.
Also I found that the issue is gone when I config highlighting to true.
To Reproduce
Steps to reproduce the behavior:
- Go to
example.tsxand write a function with content - Click on
cif - this time it works so change the function content.
- press
ufor undo - press again
cif - this time it won't work.
Expected behavior
consistency for @function.inner text object, it should work after first time
Output of :checkhealth nvim-treesitter
nvim-treesitter: require("nvim-treesitter.health").check()
Installation ~
- OK
tree-sitter found 0.20.7 (b268e412ad4848380166af153300464e5a1cf83f) (parser generator, only needed for :TSInstallFromGrammar)
- OK
node found v20.9.0 (only needed for :TSInstallFromGrammar)
- OK
git executable found.
- OK
cc executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
Version: Apple clang version 15.0.0 (clang-1500.0.40.1)
- OK Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI.
OS Info:
{
machine = "arm64",
release = "22.6.0",
sysname = "Darwin",
version = "Darwin Kernel Version 22.6.0: Wed Jul 5 22:22:05 PDT 2023; root:xnu-8796.141.3~6/RELEASE_ARM64_T6000"
} ~
Parser/Features H L F I J
- c ✓ ✓ ✓ ✓ ✓
- lua ✓ ✓ ✓ ✓ ✓
- query ✓ ✓ ✓ ✓ ✓
- tsx ✓ ✓ ✓ ✓ ✓
- vim ✓ ✓ ✓ . ✓
- vimdoc ✓ . . . ✓
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.9.2
Build type: Release
LuaJIT 2.1.0-beta3
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/opt/homebrew/Cellar/neovim/0.9.2/share/nvim"
Additional context
my config:
return {
{
"nvim-treesitter/nvim-treesitter",
version = false,
build = ":TSUpdate",
dependencies = {
"nvim-ts-context-commentstring",
"nvim-treesitter-textobjects",
},
},
{
"nvim-treesitter/nvim-treesitter-textobjects",
name = "nvim-treesitter-textobjects",
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = { "c", "tsx", "lua", "vim", "vimdoc", "query" },
textobjects = {
select = {
enable = true,
-- Automatically jump forward to textobj, similar to targets.vim
lookahead = true,
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["af"] = "@function.outer",
["if"] = "@function.inner",
["ac"] = "@class.outer",
-- You can optionally set descriptions to the mappings (used in the desc parameter of
-- nvim_buf_set_keymap) which plugins like which-key display
["ic"] = {
query = "@class.inner",
desc = "Select inner part of a class region",
},
-- You can also use captures from other query groups like `locals.scm`
["as"] = {
query = "@scope",
query_group = "locals",
desc = "Select language scope",
},
},
-- You can choose the select mode (default is charwise 'v')
--
-- Can also be a function which gets passed a table with the keys
-- * query_string: eg '@function.inner'
-- * method: eg 'v' or 'o'
-- and should return the mode ('v', 'V', or '<c-v>') or a table
-- mapping query_strings to modes.
selection_modes = {
["@parameter.outer"] = "v", -- charwise
["@function.outer"] = "V", -- linewise
["@class.outer"] = "<c-v>", -- blockwise
},
-- If you set this to `true` (default is `false`) then any textobject is
-- extended to include preceding or succeeding whitespace. Succeeding
-- whitespace has priority in order to act similarly to eg the built-in
-- `ap`.
--
-- Can also be a function which gets passed a table with the keys
-- * query_string: eg '@function.inner'
-- * selection_mode: eg 'v'
-- and should return true of false
include_surrounding_whitespace = true,
},
},
})
end,
},
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the issue in example.tsx using the provided nvim-treesitter-textobjects configuration, then compare behavior before and after opening :InspectTree or enabling highlighting. The work is done when the @function.inner text object works consistently after editing or undoing and pressing cif again.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua, typescript
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100