diff options
Diffstat (limited to 'nvim/.config/nvim/lua/tobyvin/utils/hover.lua')
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/utils/hover.lua | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/utils/hover.lua b/nvim/.config/nvim/lua/tobyvin/utils/hover.lua deleted file mode 100644 index 6cef8dd..0000000 --- a/nvim/.config/nvim/lua/tobyvin/utils/hover.lua +++ /dev/null @@ -1,132 +0,0 @@ ----@diagnostic disable: missing-parameter -local M = {} - ----@alias ProviderHandler fun():boolean? The handler for hover. Return true to indicate failure and skip ----@alias ProviderId number - ----@class ProviderOpts ----@field desc string? ----@field enabled fun():boolean? ----@field buffer number? ----@field priority number? - ----@class Provider ----@field handler ProviderHandler ----@field opts ProviderOpts - ----@type Provider[] -vim.g.hover_providers = {} - -local default_opts = { - enabled = function() - return true - end, -} - ----@param buffer number? ----@return Provider[] -local get_providers = function(buffer) - if buffer then - return vim.F.if_nil(vim.b[buffer].hover_providers, {}) - else - return vim.g.hover_providers - end -end - ----@param buffer number? ----@param providers Provider[] -local set_providers = function(buffer, providers) - if buffer == nil then - vim.g.hover_providers = providers - else - vim.b[buffer].hover_providers = providers - end -end - ----@param a Provider ----@param b Provider ----@return boolean -local sort_providers = function(a, b) - if a.opts.priority and b.opts.priority then - return a.opts.priority > b.opts.priority - else - return not b.opts.priority - end -end - ----@param buffer number ----@return Provider[] -M.buf_providers = function(buffer) - local providers = {} - if vim.api.nvim_buf_is_valid(buffer) and type(vim.b[buffer].hover_providers) == "table" then - vim.list_extend(providers, get_providers(buffer)) - end - vim.list_extend(providers, get_providers()) - table.sort(providers, sort_providers) - return providers -end - ----@param handler ProviderHandler ----@param opts ProviderOpts ----@return ProviderId -M.register = function(handler, opts) - ---@type ProviderOpts - opts = vim.F.if_nil(opts, {}) - opts = vim.tbl_extend("keep", opts, default_opts) - - ---@type Provider - local provider = { handler = handler, opts = opts } - - local providers = get_providers(provider.opts.buffer) - local id - - if #providers > 0 and provider.opts.priority then - for i, p in ipairs(providers) do - if not p.opts.priority or p.opts.priority < provider.opts.priority or i == #providers then - table.insert(providers, i, provider) - id = i - break - end - end - else - table.insert(providers, provider) - id = #providers - end - - set_providers(provider.opts.buffer, providers) - return id -end - ----@param id ProviderId ----@param buffer number? -M.unregister = function(id, buffer) - local providers = get_providers(buffer) - - local provider = table.remove(providers, id) - - set_providers(buffer, providers) - return provider -end - ---- Returns `true` if a provider successfully handled the request, otherwise returns `false`. --- Example usage: --- ```lua --- vim.keymap.set("n", "K", function() --- if utils.hover.open() then --- return "<Ignore>" --- end --- return "K" --- end, { desc = "hover", expr = true } --- ``` ----@param buffer number? -M.open = function(buffer) - buffer = buffer or vim.api.nvim_get_current_buf() - local providers = M.buf_providers(buffer) - for _, provider in ipairs(providers) do - if provider.opts.enabled and provider.opts.enabled() and not provider.handler() then - return true - end - end -end - -return M |