neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 81d8198bda0f5651de36f7587589ec1165c48843
parent a7fef170b73f0254b6396e0945209624561eee49
Author: Yi Ming <ofseed@foxmail.com>
Date:   Mon, 21 Jul 2025 12:55:47 +0800

refactor(lsp): define `Capability.on_attach`

Diffstat:
Mruntime/lua/vim/lsp/_capability.lua | 10++++++++++
Mruntime/lua/vim/lsp/_folding_range.lua | 10+++++++---
Mruntime/lua/vim/lsp/semantic_tokens.lua | 6+++---
3 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/runtime/lua/vim/lsp/_capability.lua b/runtime/lua/vim/lsp/_capability.lua @@ -69,6 +69,16 @@ function M:destroy() self.active[self.bufnr] = nil end +--- Callback invoked when an LSP client attaches. +--- Use it to initialize per-client state (empty table, new namespaces, etc.), +--- or issue requests as needed. +---@param client_id integer +function M:on_attach(client_id) + self.client_state[client_id] = {} +end + +--- Callback invoked when an LSP client detaches. +--- Use it to clear per-client state (cached data, extmarks, etc.). ---@param client_id integer function M:on_detach(client_id) self.client_state[client_id] = nil diff --git a/runtime/lua/vim/lsp/_folding_range.lua b/runtime/lua/vim/lsp/_folding_range.lua @@ -265,6 +265,11 @@ function State:destroy() State.active[self.bufnr] = nil end +---@param client_id integer +function State:on_attach(client_id) + self:refresh(vim.lsp.get_client_by_id(client_id)) +end + ---@params client_id integer function State:on_detach(client_id) self.client_state[client_id] = nil @@ -273,14 +278,13 @@ function State:on_detach(client_id) end ---@param bufnr integer ----@param client_id? integer +---@param client_id integer function M._setup(bufnr, client_id) local state = State.active[bufnr] if not state then state = State:new(bufnr) end - - state:refresh(client_id and vim.lsp.get_client_by_id(client_id)) + state:on_attach(client_id) end ---@param kind lsp.FoldingRangeKind diff --git a/runtime/lua/vim/lsp/semantic_tokens.lua b/runtime/lua/vim/lsp/semantic_tokens.lua @@ -201,6 +201,9 @@ function STHighlighter:on_attach(client_id) } self.client_state[client_id] = state end + if M.is_enabled({ bufnr = self.bufnr }) then + self:send_request() + end end ---@package @@ -581,9 +584,6 @@ function M._start(bufnr, client_id, debounce) end highlighter:on_attach(client_id) - if M.is_enabled({ bufnr = bufnr }) then - highlighter:send_request() - end end --- Start the semantic token highlighting engine for the given buffer with the