Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lewis6991/hover.nvim
Hover plugin framework for Neovim
https://github.com/lewis6991/hover.nvim
neovim-plugin
Last synced: 12 days ago
JSON representation
Hover plugin framework for Neovim
- Host: GitHub
- URL: https://github.com/lewis6991/hover.nvim
- Owner: lewis6991
- License: mit
- Created: 2022-03-16T12:03:01.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-30T10:01:48.000Z (13 days ago)
- Last Synced: 2024-10-30T11:17:33.859Z (13 days ago)
- Topics: neovim-plugin
- Language: Lua
- Homepage:
- Size: 76.2 KB
- Stars: 516
- Watchers: 7
- Forks: 33
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-neovim-pluginlist - lewis6991/hover.nvim - commit/lewis6991/hover.nvim) ![](https://img.shields.io/github/commit-activity/y/lewis6991/hover.nvim) (New features / Popup Info)
README
# hover.nvim
General framework for context aware hover providers (similar to `vim.lsp.buf.hover`).
Requires Nvim `v0.10.0`
## Screenshots
LSP
Github Issues
Dictionary
Github User
## Setup and Installation
via packer:
```lua
use {
"lewis6991/hover.nvim",
config = function()
require("hover").setup {
init = function()
-- Require providers
require("hover.providers.lsp")
-- require('hover.providers.gh')
-- require('hover.providers.gh_user')
-- require('hover.providers.jira')
-- require('hover.providers.dap')
-- require('hover.providers.fold_preview')
-- require('hover.providers.diagnostic')
-- require('hover.providers.man')
-- require('hover.providers.dictionary')
end,
preview_opts = {
border = 'single'
},
-- Whether the contents of a currently open hover window should be moved
-- to a :h preview-window when pressing the hover keymap.
preview_window = false,
title = true,
mouse_providers = {
'LSP'
},
mouse_delay = 1000
}-- Setup keymaps
vim.keymap.set("n", "K", require("hover").hover, {desc = "hover.nvim"})
vim.keymap.set("n", "gK", require("hover").hover_select, {desc = "hover.nvim (select)"})
vim.keymap.set("n", "", function() require("hover").hover_switch("previous") end, {desc = "hover.nvim (previous source)"})
vim.keymap.set("n", "", function() require("hover").hover_switch("next") end, {desc = "hover.nvim (next source)"})-- Mouse support
vim.keymap.set('n', '', require('hover').hover_mouse, { desc = "hover.nvim (mouse)" })
vim.o.mousemoveevent = true
end)
end
}
```## Built in Providers
### LSP
`require('hover.providers.lsp')`Builtin LSP
Priority: 1000
### Diagnostics
`require('hover.providers.diagnostic')`Diagnostics using `vim.diagnostic`
Priority: 1001
### DAP
`require('hover.providers.dap')`[DAP](https://github.com/mfussenegger/nvim-dap) hover
Priority: 1002
### Fold Previewing
`require('hover.providers.fold_preview')`Preview closed fold under cursor
Priority: 1003
### Github: Issues and PR's
`require('hover.providers.gh')`Opens issue/PR's for symbols like `#123`.
Requires the `gh` command.
Priority: 200
### Github: Users
`require('hover.providers.gh_user')`Information for github users in `TODO` comments.
Matches `TODO()` and `TODO(@)`.Requires the `gh` command.
Priority: 200
### Jira
`require('hover.providers.jira')`Opens issue for symbols like `ABC-123`.
Requires the `jira` [command](https://github.com/ankitpokhrel/jira-cli).
Priority: 175
### Man
`require('hover.providers.man')``man` entries
Priority: 150
### Dictionary
`require('hover.providers.dictionary')`Definitions for valid words
Priority: 100
## Creating a hover provider
Call `require('hover').register()` with a table containing the following fields:
- `name`: string, name of the hover provider
- `enabled`: function, whether the hover is active for the current context
- `execute`: function, executes the hover. Has the following arguments:
- `opts`: Additional options:
- `bufnr` (integer)
- `pos` ({[1]: integer, [2]: integer})
- `relative` (string)
- `done`: callback. First argument should be passed:
- `nil`/`false` if the hover failed to execute. This will allow other lower priority hovers to run.
- A table with the following fields:
- `lines` (string array)
- `filetype` (string)
- `bufnr` (integer?) use a pre-populated buffer for the hover window. Ignores `lines`.
- `priority`: number (optional), priority of the provider### Example:
```lua
-- Simple
require('hover').register {
name = 'Simple',
--- @param bufnr integer
enabled = function(bufnr)
return true
end,
--- @param opts Hover.Options
--- @param done fun(result: any)
execute = function(opts, done)
done{lines={'TEST'}, filetype="markdown"}
end
}
``````lua
--- @class Hover.Options
--- @field bufnr integer
--- @field pos {[1]: integer, [2]: integer}
--- @field relative? string
--- @field providers? string[]
```