diagflow.nvim is a Neovim plugin that provides a neat and distraction-free way to display LSP diagnostics. It shows diagnostics in virtual text at the top-right corner of your screen, only when the cursor is positioned over the problematic code or across an entire line, according to your preference. This provides a clean and focused coding environment. This approach to diagnostics management is inspired by the Helix editor.
- Opening a file with multiple diagnostics but no issues under the cursor:
- An error under the cursor:
- A hint under the cursor:
To install diagflow.nvim, use your preferred Neovim package manager. If you're using packer.nvim
, add the following line to your plugin list:
-- Packer
use {'dgagn/diagflow.nvim'}
If you're using lazy.nvim
, add the following line to your plugin list:
-- Lazy
{
'dgagn/diagflow.nvim',
-- event = 'LspAttach', This is what I use personnally and it works great
opts = {}
}
Note if you are using the opts
with lazy.nvim
, you don't need to run the setup, it does it for you.
The scope option determines the context of diagnostics display: 'cursor' (default) shows diagnostics only under the cursor, while 'line' shows diagnostics for the entire line where the cursor is positioned.
require('diagflow').setup({
enable = true,
max_width = 60, -- The maximum width of the diagnostic messages
max_height = 10, -- the maximum height per diagnostics
severity_colors = { -- The highlight groups to use for each diagnostic severity level
error = "DiagnosticFloatingError",
warning = "DiagnosticFloatingWarn",
info = "DiagnosticFloatingInfo",
hint = "DiagnosticFloatingHint",
},
format = function(diagnostic)
return diagnostic.message
end,
gap_size = 1,
scope = 'cursor', -- 'cursor', 'line' this changes the scope, so instead of showing errors under the cursor, it shows errors on the entire line.
padding_top = 0,
padding_right = 0,
text_align = 'right', -- 'left', 'right'
placement = 'top', -- 'top', 'inline'
inline_padding_left = 0, -- the padding left when the placement is inline
update_event = { 'DiagnosticChanged', 'BufReadPost' }, -- the event that updates the diagnostics cache
toggle_event = { }, -- if InsertEnter, can toggle the diagnostics on inserts
show_sign = false, -- set to true if you want to render the diagnostic sign before the diagnostic message
render_event = { 'DiagnosticChanged', 'CursorMoved' },
border_chars = {
top_left = "┌",
top_right = "┐",
bottom_left = "└",
bottom_right = "┘",
horizontal = "─",
vertical = "│"
},
show_borders = false,
})
Or simply use the default configuration:
require('diagflow').setup()
- How do I change the colors of the virtual text?
You can set up custom colors by changing the highlight group in the configuration. For instance, in the default configuration, :hi Hint
determines the color of the hints. You can change the hint color to blue with :hi Hint guifg=blue
.
- Can I still have the diagnostics inline?
Yes, with the new option placement
, you can set the diagnostics inline instead of at
the top right.
Here is a example :
Here is the example config used in this screenshot :
{
'dgagn/diagflow.nvim',
opts = {
placement = 'inline',
inline_padding_left = 3,
},
}
- How can I disable the cursor when I enter insert mode and reenable it when I go in normal mode?
{
'dgagn/diagflow.nvim',
opts = {
toggle_event = { 'InsertEnter' },
},
}
- Something doesn't update when X or Y happens.
You can setup when the diagnostic is cached with this option :
{
'dgagn/diagflow.nvim',
opts = {
update_event = { 'DiagnosticChanged', ... },
},
}
- I want to customize my diagnostic messages
You can set a diagnostic message by supplying the format
option.
{
'dgagn/diagflow.nvim',
opts = {
format = function(diagnostic)
return '[LSP] ' .. diagnostic.message
end
},
}
- How do I disable this for certain filetypes?
{
'dgagn/diagflow.nvim',
opts = {
enable = function()
return vim.bo.filetype ~= "lazy"
end,
},
}
- How do I show borders?
{
'dgagn/diagflow.nvim',
opts = {
show_borders = true,
},
}