lsp_lines
is a simple neovim plugin that renders diagnostics using virtual
lines on top of the real line of code.
Font is Fira Code, a classic. Theme is tokyonight.nvim.
LSPs provide lots of useful diagnostics for code (typically: errors, warnings, linting). By default they're displayed using virtual text at the end of the line which is in many cases good enough, but often there's more than one diagnostic per line. It's also quite common to have more than one diagnostic per line, but again, there's no handy way to read the whole thing.
lsp_lines
solves this issue.
Using lazy.nvim
{
"steven-liou/lsp_lines.nvim",
event = "LspAttach",
config = function()
require("lsp_lines").setup({
severity = vim.diagnostic.severity.WARN, -- only severity at or above this level will show
current_line_only = true, -- only show virtual lines on cursor line only
show_virt_line_events = { "CursorHold" }, -- events to show virtual lines
hide_virt_line_events = {"CursorMoved", "InsertEnter"}, -- events to hide virtual lines. CursorMoved is recommended only if current_line_only is true
diagnostics_filter = require("lsp_lines").most_severe_level_of_buffer, -- pick available diagnostic filters or write your own for this key, or omit this key to not use any filter
})
end,
}
- Below examples are based on:
- Minimum severity level of
INFO
- Given a buffer with:
- One
ERROR
and oneWARN
on line 2 - One
WARN
and oneHINT
on line 3
- One
- Minimum severity level of
diagnostics_filter
function can be:minimum_severity_level
show diagnostics at or above the specified minimum severity level. BothERROR
andWARN
will show on line 2, and onlyWARN
will show on line 3, sinceHINT
doesn't meet minimum severity criteria. Recommended ifcurrent_line_only
istrue
most_severe_level_per_line
only shows the most severe diagnostics in a given line at or above the specified minimum severity level. OnlyERROR
will show on line 2, andWARN
on line 3. Recommended ifcurrent_line_only
isfalse
most_severe_level_of_buffer
only shows the most severe diagnostics in a buffer at or above the specified minimum severity level. OnlyERROR
will show on line 2, since the most severe error in the whole buffer isERROR
- Any custom function that you write, with first parameter a table of LSP
diagnostics
, and second parameter any table ofoptions
You can algo just clone the repo into neovim's plug-in directory:
mkdir -p $HOME/.local/share/nvim/site/pack/plugins/start/
cd $HOME/.local/share/nvim/site/pack/plugins/start/
git clone git@git.sr.ht:~whynothugo/lsp_lines.nvim
And then in init.lua
:
require("lsp_lines").setup()
It's recommended to also remove the regular virtual text diagnostics to avoid pointless duplication:
-- Disable virtual_text since it's redundant due to lsp_lines.
vim.diagnostic.config({
virtual_text = false,
})
This plugin's functionality can be disabled with:
vim.diagnostic.config({ virtual_lines = false })
And it can be re-enabled via:
vim.diagnostic.config({ virtual_lines = true })
A helper is also provided to toggle, which is convenient for mappings:
vim.keymap.set(
"",
"<Leader>l",
require("lsp_lines").toggle,
{ desc = "Toggle lsp_lines" }
)
- Discussion or patches: ~whynothugo/lsp_lines.nvim@lists.sr.ht
- Bugs / Issues: https://todo.sr.ht/~whynothugo/lsp_lines.nvim
- Tips: https://ko-fi.com/whynothugo
It would be nice to show connecting lines when there's relationship between
diagnostics (as is the case with rust_analyzer
). Oh perhaps surface them via
hover().
This project is licensed under the ISC licence. See LICENCE for more details.