From 3973a5e40505422c7ac42692eaecc1ff84f89e7f Mon Sep 17 00:00:00 2001 From: Jongwook Choi Date: Sun, 14 Jan 2024 23:12:54 -0500 Subject: refactor(lsp): deprecate `vim.lsp.util.lookup_section` This function is used only in the `workspace/configuration` handler, and does not warrant a public API because of its confusing return types. The only caller `vim.lsp.handlers["workspace.configuration"]` is also refactored to use `vim.tbl_get()` instead. --- runtime/lua/vim/lsp/handlers.lua | 17 ++++++++++++++--- runtime/lua/vim/lsp/util.lua | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua index daf09b6430..6ed8e1d40f 100644 --- a/runtime/lua/vim/lsp/handlers.lua +++ b/runtime/lua/vim/lsp/handlers.lua @@ -170,6 +170,14 @@ M[ms.workspace_applyEdit] = function(_, workspace_edit, ctx) } end +---@param table table e.g., { foo = { bar = "z" } } +---@param section string indicating the field of the table, e.g., "foo.bar" +---@return any|nil setting value read from the table, or `nil` not found +local function lookup_section(table, section) + local keys = vim.split(section, '.', { plain = true }) --- @type string[] + return vim.tbl_get(table, unpack(keys)) +end + --see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspace_configuration M[ms.workspace_configuration] = function(_, result, ctx) local client_id = ctx.client_id @@ -189,10 +197,13 @@ M[ms.workspace_configuration] = function(_, result, ctx) local response = {} for _, item in ipairs(result.items) do if item.section then - local value = util.lookup_section(client.config.settings, item.section) + local value = lookup_section(client.config.settings, item.section) -- For empty sections with no explicit '' key, return settings as is - if value == vim.NIL and item.section == '' then - value = client.config.settings or vim.NIL + if value == nil and item.section == '' then + value = client.config.settings + end + if value == nil then + value = vim.NIL end table.insert(response, value) end diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index 50890e37ce..cee09d85e0 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -2140,7 +2140,9 @@ end ---@param settings table language server settings ---@param section string indicating the field of the settings table ---@return table|string|vim.NIL The value of settings accessed via section. `vim.NIL` if not found. +---@deprecated function M.lookup_section(settings, section) + vim.deprecate('vim.lsp.util.lookup_section()', 'vim.tbl_get() with `vim.split`', '0.12') for part in vim.gsplit(section, '.', { plain = true }) do settings = settings[part] if settings == nil then -- cgit