diff options
-rw-r--r-- | runtime/doc/deprecated.txt | 2 | ||||
-rw-r--r-- | runtime/doc/lsp.txt | 11 | ||||
-rw-r--r-- | runtime/lua/vim/lsp/handlers.lua | 17 | ||||
-rw-r--r-- | runtime/lua/vim/lsp/util.lua | 2 |
4 files changed, 18 insertions, 14 deletions
diff --git a/runtime/doc/deprecated.txt b/runtime/doc/deprecated.txt index 0f2dbaa77c..1b16a19aca 100644 --- a/runtime/doc/deprecated.txt +++ b/runtime/doc/deprecated.txt @@ -144,6 +144,8 @@ LSP FUNCTIONS `progress` of |vim.lsp.client| - *vim.lsp.get_active_clients()* Use |vim.lsp.get_clients()| - *vim.lsp.for_each_buffer_client()* Use |vim.lsp.get_clients()| +- *vim.lsp.util.lookup_section()* Use |vim.tbl_get()| and + |vim.split()| with {plain=true} instead. - *vim.lsp.util.trim_empty_lines()* Use |vim.split()| with `trimempty` instead. - *vim.lsp.util.try_trim_markdown_code_blocks()* - *vim.lsp.util.set_lines()* diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt index 9de30f1e8a..e3fc616df4 100644 --- a/runtime/doc/lsp.txt +++ b/runtime/doc/lsp.txt @@ -1821,17 +1821,6 @@ locations_to_items({locations}, {offset_encoding}) Return: ~ (`vim.lsp.util.LocationItem[]`) list of items -lookup_section({settings}, {section}) *vim.lsp.util.lookup_section()* - Helper function to return nested values in language server settings - - Parameters: ~ - • {settings} (`table`) language server settings - • {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. - *vim.lsp.util.make_floating_popup_options()* make_floating_popup_options({width}, {height}, {opts}) Creates a table with sensible default options for a floating window. The 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 |