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.
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()
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.
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,
},
}
{
'dgagn/diagflow.nvim',
opts = {
toggle_event = { 'InsertEnter' },
},
}
You can setup when the diagnostic is cached with this option :
{
'dgagn/diagflow.nvim',
opts = {
update_event = { 'DiagnosticChanged', ... },
},
}
You can set a diagnostic message by supplying the format option.
{
'dgagn/diagflow.nvim',
opts = {
format = function(diagnostic)
return '[LSP] ' .. diagnostic.message
end
},
}
{
'dgagn/diagflow.nvim',
opts = {
enable = function()
return vim.bo.filetype ~= "lazy"
end,
},
}
{
'dgagn/diagflow.nvim',
opts = {
show_borders = true,
},
}