diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt index 8042aad0ad..c05ec93833 100644 --- a/runtime/doc/lsp.txt +++ b/runtime/doc/lsp.txt @@ -1042,6 +1042,15 @@ get_log_path() *vim.lsp.get_log_path()* Return: ~ (`string`) path to log file +is_enabled({name}) *vim.lsp.is_enabled()* + Checks if the given LSP config is enabled (globally, not per-buffer). + + Parameters: ~ + • {name} (`string`) Config name + + Return: ~ + (`boolean`) + omnifunc({findstart}, {base}) *vim.lsp.omnifunc()* Implements 'omnifunc' compatible LSP completion. diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index ada6b7c023..c0692b355e 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -174,6 +174,8 @@ API • |vim.secure.read()| now returns `true` for trusted directories. Previously it would return `nil`, which made it impossible to tell if the directory was actually trusted. +• Added |vim.lsp.is_enabled()| to check if a given LSP config has been enabled + by |vim.lsp.enable()|. DEFAULTS diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua index 226ab7038b..7ff80ff9ac 100644 --- a/runtime/lua/vim/lsp.lua +++ b/runtime/lua/vim/lsp.lua @@ -615,6 +615,14 @@ function lsp.enable(name, enable) end end +--- Checks if the given LSP config is enabled (globally, not per-buffer). +--- +--- @param name string Config name +--- @return boolean +function lsp.is_enabled(name) + return lsp._enabled_configs[name] ~= nil +end + --- @class vim.lsp.start.Opts --- @inlinedoc --- diff --git a/test/functional/plugin/lsp_spec.lua b/test/functional/plugin/lsp_spec.lua index be69491915..9e7f9314e1 100644 --- a/test/functional/plugin/lsp_spec.lua +++ b/test/functional/plugin/lsp_spec.lua @@ -6708,4 +6708,26 @@ describe('LSP', function() markers_resolve_to({ 'foo', { 'bar', 'baz' }, 'marker_d' }, dir_b) end) end) + + describe('vim.lsp.is_enabled()', function() + it('works', function() + exec_lua(function() + vim.lsp.config('foo', { + cmd = { 'foo' }, + root_markers = { '.foorc' }, + }) + end) + + -- LSP config defaults to disabled. + eq(false, exec_lua([[return vim.lsp.is_enabled('foo')]])) + + -- Confirm we can enable it. + exec_lua([[vim.lsp.enable('foo')]]) + eq(true, exec_lua([[return vim.lsp.is_enabled('foo')]])) + + -- And finally, disable it again. + exec_lua([[vim.lsp.enable('foo', false)]]) + eq(false, exec_lua([[return vim.lsp.is_enabled('foo')]])) + end) + end) end)