diff options
| author | Yi Ming <ofseed@foxmail.com> | 2025-07-07 11:51:30 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-07 03:51:30 +0000 |
| commit | 8d5452c46d01acc3f044326173ae8e1cb793cccf (patch) | |
| tree | 92250f599671fdd22dc384b2b5771873dbb93460 /runtime/lua/vim/shared.lua | |
| parent | 55e3a75217d95439a41a7285ccb922d7fe97f586 (diff) | |
refactor(lsp): stateful data abstraction, vim.lsp.Capability #34639
Problem:
Closes #31453
Solution:
Introduce `vim.lsp.Capability`, which may serve as the base class for
all LSP features that require caching data. it
- was created if there is at least one client that supports the specific method;
- was destroyed if all clients that support the method were detached.
- Apply the refactor for `folding_range.lua` and `semantic_tokens.lua`.
- Show active features in :checkhealth.
Future:
I found that these features that are expected to be refactored by
`vim.lsp.Capability` have one characteristic in common: they all send
LSP requests once the document is modified. The following code is
different, but they are all for this purpose.
- semantic tokens:
https://github.com/neovim/neovim/blob/fb8dba413f2bcaa61c15d1854b28112e3e91a035/runtime/lua/vim/lsp/semantic_tokens.lua#L192-L198
- inlay hints, folding ranges, document color
https://github.com/neovim/neovim/blob/fb8dba413f2bcaa61c15d1854b28112e3e91a035/runtime/lua/vim/lsp/inlay_hint.lua#L250-L266
I think I can sum up this characteristic as the need to keep certain
data synchronized with the latest version computed by the server.
I believe we can handle this at the `vim.lsp.Capability` level, and
I think it will be very useful.
Therefore, my next step is to implement LSP request sending and data
synchronization on `vim.lsp.Capability`, rather than limiting it to the
current create/destroy data approach.
Diffstat (limited to 'runtime/lua/vim/shared.lua')
0 files changed, 0 insertions, 0 deletions
