diff options
| author | William Boman <william@redwill.se> | 2021-08-18 20:35:02 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 20:35:02 +0200 |
| commit | bb6c9441af692daf9b967a15324f574f601d4b52 (patch) | |
| tree | 853987daa609778bf3a64658f09eb0626d54ae7c /lua | |
| parent | doc: add section for custom servers (diff) | |
| download | mason-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.lua | 17 | ||||
| -rw-r--r-- | lua/nvim-lsp-installer/dispatcher.lua | 21 | ||||
| -rw-r--r-- | lua/nvim-lsp-installer/server.lua | 2 |
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 |
