aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-08-18 20:35:02 +0200
committerGitHub <noreply@github.com>2021-08-18 20:35:02 +0200
commitbb6c9441af692daf9b967a15324f574f601d4b52 (patch)
tree853987daa609778bf3a64658f09eb0626d54ae7c /lua
parentdoc: add section for custom servers (diff)
downloadmason-bb6c9441af692daf9b967a15324f574f601d4b52.tar
mason-bb6c9441af692daf9b967a15324f574f601d4b52.tar.gz
mason-bb6c9441af692daf9b967a15324f574f601d4b52.tar.bz2
mason-bb6c9441af692daf9b967a15324f574f601d4b52.tar.lz
mason-bb6c9441af692daf9b967a15324f574f601d4b52.tar.xz
mason-bb6c9441af692daf9b967a15324f574f601d4b52.tar.zst
mason-bb6c9441af692daf9b967a15324f574f601d4b52.zip
add new on_server_ready() API (#56)
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer.lua17
-rw-r--r--lua/nvim-lsp-installer/dispatcher.lua21
-rw-r--r--lua/nvim-lsp-installer/server.lua2
3 files changed, 40 insertions, 0 deletions
diff --git a/lua/nvim-lsp-installer.lua b/lua/nvim-lsp-installer.lua
index eae7363e..881db323 100644
--- a/lua/nvim-lsp-installer.lua
+++ b/lua/nvim-lsp-installer.lua
@@ -1,4 +1,5 @@
local notify = require "nvim-lsp-installer.notify"
+local dispatcher = require "nvim-lsp-installer.dispatcher"
local M = {}
@@ -103,4 +104,20 @@ function M.register(server)
_SERVERS[server.name] = server
end
+function M.on_server_ready(cb)
+ dispatcher.register_server_ready_callback(cb)
+ for _, server in pairs(M.get_installed_servers()) do
+ dispatcher.dispatch_server_ready(server)
+ end
+end
+
+-- "Proxy" function for triggering attachment of LSP servers to all buffers (useful when just installed a new server
+-- that wasn't installed at launch)
+function M.lsp_attach_proxy()
+ -- As of writing, if the lspconfig server provides a filetypes setting, it uses FileType as trigger, otherwise it uses BufReadPost
+ local cur_bufnr = vim.fn.bufnr "%"
+ vim.cmd [[ bufdo do FileType | do BufReadPost ]]
+ vim.cmd(("buffer %s"):format(cur_bufnr)) -- restore buffer
+end
+
return M
diff --git a/lua/nvim-lsp-installer/dispatcher.lua b/lua/nvim-lsp-installer/dispatcher.lua
new file mode 100644
index 00000000..c8ec34a7
--- /dev/null
+++ b/lua/nvim-lsp-installer/dispatcher.lua
@@ -0,0 +1,21 @@
+local M = {}
+
+local registered_callbacks = {}
+
+function M.dispatch_server_ready(server)
+ for _, callback in pairs(registered_callbacks) do
+ callback(server)
+ end
+end
+
+local idx = 0
+function M.register_server_ready_callback(callback)
+ local key = idx + 1
+ registered_callbacks[("%d"):format(key)] = callback
+ return function ()
+ table.remove(registered_callbacks, key)
+ end
+end
+
+
+return M
diff --git a/lua/nvim-lsp-installer/server.lua b/lua/nvim-lsp-installer/server.lua
index 8b72ce53..edc80253 100644
--- a/lua/nvim-lsp-installer/server.lua
+++ b/lua/nvim-lsp-installer/server.lua
@@ -1,4 +1,5 @@
local notify = require "nvim-lsp-installer.notify"
+local dispatcher = require "nvim-lsp-installer.dispatcher"
local fs = require "nvim-lsp-installer.fs"
local path = require "nvim-lsp-installer.path"
@@ -83,6 +84,7 @@ function M.Server:install()
pcall(self.uninstall, self)
else
notify(("Successfully installed %s."):format(self.name))
+ dispatcher.dispatch_server_ready(self)
end
end)
end