diff options
author | Jaehwang Jung <tomtomjhj@gmail.com> | 2023-12-05 09:40:48 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-05 08:40:48 +0800 |
commit | 3159a2c28f5ea8797cb525c74dedd622bfe4a0a1 (patch) | |
tree | 0fa25e011924f8854122addb9a28e4c6b7b34d64 /src/nvim/api/vim.c | |
parent | c3836e40a2bffbc1d4e06531145b7825788dd818 (diff) | |
download | rneovim-3159a2c28f5ea8797cb525c74dedd622bfe4a0a1.tar.gz rneovim-3159a2c28f5ea8797cb525c74dedd622bfe4a0a1.tar.bz2 rneovim-3159a2c28f5ea8797cb525c74dedd622bfe4a0a1.zip |
fix(change): update fold after on_bytes (#26364)
Problem:
With vim.treesitter.foldexpr, `o`-ing two lines above a folded region
opens the fold. This does not happen with legacy foldexprs. For example,
make a markdown file with the following text (without indentation),
enable treesitter fold, and follow the instruction in the text.
put cursor on this line and type zoo<Esc>
initially folded, revealed by zo
# then this fold will be opened
initially folded, revealed by o<Esc>
Analysis:
* `o` updates folds first (done in `changed_lines`), evaluating
foldexpr, and then invokes `on_bytes` (done in `extmark_splice`).
* Treesitter fold allocates the foldinfo for added lines (`add_range`)
on `on_bytes`.
* Therefore, when treesitter foldexpr is invoked while running `o`, it
sees outdated foldinfo.
Solution:
`extmark_splice`, and then `changed_lines`. This seems to be the
standard order in other places, e.g., `nvim_buf_set_lines`.
Diffstat (limited to 'src/nvim/api/vim.c')
0 files changed, 0 insertions, 0 deletions