aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
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