Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

Awesome Lists containing this project

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[]
```