mirror of
https://github.com/dense-analysis/ale.git
synced 2026-02-25 11:07:27 +08:00
Improve ALEFix performance for neovim (#3974)
* Avoid performance problems with setbufline() and Treesitter Call nvim_buf_set_lines() instead. Since this is a performance problem only in Neovim (Treesitter is only available there), it doesn't matter that this API is unavailable in Vim. Note: nvim_buf_set_lines() returns E5555, when set nomodifiable is on. Fixes #3669 * Avoid sign flickering The signs flickered because nvim_buf_set_lines() removes all signs from lines that it touches, which will immediately be readded by Ale (causing the brief flicker). This is intended behaviour in neovim [0]. Neovim itself faced this problem in their own LSP formatting sync, although they had the problem with marks instead of signs [1]. Similar to how neovim fixed it by storing and restoring the marks [2], we can do the same thing with signs. In fact it is easier with signs, because sign_placelist() will just ignore and skip invalid line numbers, so we don't need to filter signs that are not valid anymore. [0] https://github.com/neovim/neovim/issues/10880#issuecomment-526466042 [1] https://github.com/neovim/neovim/issues/14307 [2] https://github.com/neovim/neovim/pull/14630
This commit is contained in:
@@ -32,7 +32,7 @@ function! ale#fix#ApplyQueuedFixes(buffer) abort
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
catch /E21/
|
||||
catch /E21\|E5555/
|
||||
" If we cannot modify the buffer now, try again later.
|
||||
let g:ale_fix_buffer_data[a:buffer] = l:data
|
||||
|
||||
|
||||
Reference in New Issue
Block a user