Repository navigation
Setting foldmethod causes vim-clap to crash #194
Description
Activity
Hi man ! Thanks for the kind words and thanks for contributing to the effort, you are part of it now 😉
Error executing lua callback: /usr/share/nvim/runtime/lua/vim/treesitter.lua:215: invalid startThat makes me think that the problem is from upstream. though it looks strange to me that this happens without any edits, as it is typically the way this bug is triggered.
This needs further investigation, and thanks for the repro information !
I try to avoid setting the fold method for buffers for which I know it's not supported. What happens when you set the foldmethod only for 'c'?
It looks like that this fixes my issue. Thank you very much 😀
Reopening because that's something that needs to be fixed 😉
We could have folding just as a module: it would be only set for the buffers where its supported and you can exclude languages.
But how
foldmethodis a window option. We attach to buffers not to windows... @vigoux any ideas?local parsers = require'nvim-treesitter.parsers' local M = {} --local previous_fold_method = {} --local previous_fold_expr = {} function M.get_fold_indic(lnum) if not parsers.has_parser() or not lnum then return '0' end local function smallest_multiline_containing(node, level) for index = 0,(node:named_child_count() -1) do local child = node:named_child(index) local start, _, stop, _ = child:range() if start ~= stop and start <= (lnum -1) and stop >= (lnum -1) then return smallest_multiline_containing(child, level + 1) end end return node, level end local parser = parsers.get_parser() local _, level = smallest_multiline_containing(parser:parse():root(), 0) return tostring(level) end function M.attach(_) --local buf = bufnr or vim.api.nvim_get_current_buf() --previous_fold_method[buf] = vim.api.nvim_buf_get_option(buf, 'foldmethod') --previous_fold_expr[buf] = vim.api.nvim_buf_get_option(buf, 'foldexpr') -- --local win = vim.api.nvim_get_current_win() --vim.api.nvim_win_set_option(win, 'foldmethod', "expr") --vim.api.nvim_win_set_option(win, 'foldexpr', "nvim_treesitter#foldexpr()") vim.cmd("setlocal foldmethod=expr foldexpr=nvim_treesitter#foldexpr()") end function M.detach(_) --vim.api.nvim_buf_win_option(bufnr, 'foldmethod', previous_fold_method[bufnr]) --vim.api.nvim_buf_win_option(bufnr, 'foldexpr', previous_fold_expr[bufnr]) end return M
I personally have a list of languages where I want to have a custom foldmethod:
autocmd FileType tex,latex,vim,cmake,xml setlocal foldmethod=indentsetlocalwill only set thefoldmethodfor the current window for sure. Looking at the error, it looks like the parser is used to parse something it shouldn't parse, or this is the invalid buffer update error.Is this issue still relevant ? @Conni2461 @theHamsta ?
Using setlocal as @theHamsta suggested fixes the issue for me. You said the issue needed a solution.
You can also simply point out in the readme that the user should only set foldmethod for desired filetypes to avoid this issue.
I' m fine if we close the issue.Reacted by vigouxIs the issue still hapening using latest master ?
Yes I can still reproduce the issue (latest master for neovim and nvim-treesitter) as described above.
But i got a slightly different error message now. Probably because of some refactoring upstream:Error detected while processing function clap#[41]..clap#for[39]..clap#floating_win#open[17]..clap#_init[1]..clap#spinner#init[1]..<SNR>125_set_spinner[2]..clap#spinner#set: line 2: Error executing lua callback: /usr/share/nvim/runtime/lua/vim/treesitter/query.lua:148: invalid endBut as I said in my previous comment, the problem no longer exists if you set the foldmethod per filetype.
So if @theHamsta is no longer working on a solution that implements folding as a module you are welcome to close the issue.
I'm still in favor of customizing the readme so that users only use folding for certain filetypes, as there might be further complications with other plugins.But since I use setlocal I had no complaints with the plugin and it has only improved lately. So thanks again to all maintainers.
Reacted by vigoux- added a commit that references this issue
on Oct 28, 2023
Hey guys,
First of all, great plugin, I really like what you have created here. Keep up the great work.
Describe the bug
I got a bug with the plugin vim-clap.
After a while vim-clap providers will result in an error message and resulting in a floating window without content. I'm not sure if this is a bug on your, vim-clap or neovim core side.
When i tried to create a minimal vimrc i noticed that this bug only appears when
foldmethod=expr foldexpr=nvim_treesitter#foldexpr()is set.To Reproduce
Steps to reproduce the behavior:
nvim -u ~/minimalrc.vim src/nvim/ui.c:Clap filesor<leader>q. e.g.src/tree_sitter/parser.cPressing enter opens vim-claps floating window without content.
6. If message is not triggered, try opening more files with vim-clap or move around in the file. It is not entirely deterministic when it fails.
Expected behavior
vim-clap opens normally without triggering a error message and being able to open a new file.
Output of
:checkhealth nvim_treesitterDetails
health#nvim_treesitter#check
Installation
gitexecutable found.ccexecutable found.html parser healthcheck
highlights.scmfound.locals.scmquery found for htmltextobjects.scmquery found for htmltypescript parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for typescriptmarkdown parser healthcheck
highlights.scmquery found for markdownlocals.scmquery found for markdowntextobjects.scmquery found for markdownregex parser healthcheck
highlights.scmfound.locals.scmquery found for regextextobjects.scmquery found for regexc parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmfound.java parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for javapython parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmfound.yaml parser healthcheck
highlights.scmquery found for yamllocals.scmquery found for yamltextobjects.scmquery found for yamlcpp parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmfound.toml parser healthcheck
highlights.scmquery found for tomllocals.scmquery found for tomltextobjects.scmquery found for tomllua parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for luaruby parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for rubygo parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmfound.scala parser healthcheck
highlights.scmquery found for scalalocals.scmquery found for scalatextobjects.scmquery found for scalarust parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for rustjson parser healthcheck
highlights.scmfound.locals.scmquery found for jsontextobjects.scmquery found for jsonjavascript parser healthcheck
highlights.scmfound.locals.scmfound.textobjects.scmquery found for javascriptcss parser healthcheck
highlights.scmfound.locals.scmquery found for csstextobjects.scmquery found for cssc_sharp parser healthcheck
highlights.scmquery found for c_sharplocals.scmquery found for c_sharptextobjects.scmquery found for c_sharpbash parser healthcheck
highlights.scmfound.locals.scmquery found for bashtextobjects.scmquery found for bashMissing parsers
nix
swift
elm
vue
ocaml
haskell
jsdoc
julia
php
tsx
Output of
nvim --versionAdditional context
Installing vim-claps binaries does not fix this bug so I left this one out.