feat(diagnostics): emulate VSCode Error Lens with virtual text and lines
Added functionality to mimic VSCode's Error Lens behavior: - Displays diagnostics as virtual text with severity icons during insert mode. - Switches to virtual lines with formatted messages in normal mode for better readability. Improves real-time feedback while coding and enhances the visual presentation of diagnostics.
This commit is contained in:
parent
3338d39206
commit
632f7b06cd
67
init.lua
67
init.lua
|
@ -628,33 +628,56 @@ require('lazy').setup({
|
|||
|
||||
-- Diagnostic Config
|
||||
-- See :help vim.diagnostic.Opts
|
||||
local diagnostic_icons = {
|
||||
[vim.diagnostic.severity.ERROR] = ' ',
|
||||
[vim.diagnostic.severity.WARN] = ' ',
|
||||
[vim.diagnostic.severity.INFO] = ' ',
|
||||
[vim.diagnostic.severity.HINT] = ' ',
|
||||
}
|
||||
|
||||
vim.diagnostic.config {
|
||||
update_in_insert = true,
|
||||
severity_sort = true,
|
||||
float = { border = 'rounded', source = 'if_many' },
|
||||
underline = { severity = vim.diagnostic.severity.ERROR },
|
||||
signs = vim.g.have_nerd_font and {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = ' ',
|
||||
[vim.diagnostic.severity.WARN] = ' ',
|
||||
[vim.diagnostic.severity.INFO] = ' ',
|
||||
[vim.diagnostic.severity.HINT] = ' ',
|
||||
},
|
||||
} or {},
|
||||
virtual_text = {
|
||||
source = 'if_many',
|
||||
spacing = 2,
|
||||
format = function(diagnostic)
|
||||
local diagnostic_message = {
|
||||
[vim.diagnostic.severity.ERROR] = diagnostic.message,
|
||||
[vim.diagnostic.severity.WARN] = diagnostic.message,
|
||||
[vim.diagnostic.severity.INFO] = diagnostic.message,
|
||||
[vim.diagnostic.severity.HINT] = diagnostic.message,
|
||||
}
|
||||
return diagnostic_message[diagnostic.severity]
|
||||
end,
|
||||
},
|
||||
underline = true, -- { severity = vim.diagnostic.severity.ERROR }
|
||||
signs = vim.g.have_nerd_font and { text = diagnostic_icons } or {},
|
||||
}
|
||||
|
||||
-- Diagnostic configuration similar to VS Code's Error Lens.
|
||||
-- In insert mode, diagnostics are displayed as inline virtual text.
|
||||
-- In normal mode, diagnostics are shown as virtual lines below the affected lines.
|
||||
---@param enable boolean
|
||||
local function set_virtual_text(enable)
|
||||
vim.diagnostic.config {
|
||||
virtual_lines = not enable and {
|
||||
format = function(diagnostic)
|
||||
return (diagnostic_icons[diagnostic.severity] or '') .. diagnostic.message
|
||||
end,
|
||||
} or false,
|
||||
virtual_text = enable and {
|
||||
source = 'if_many',
|
||||
spacing = 2,
|
||||
format = function(diagnostic)
|
||||
return (diagnostic_icons[diagnostic.severity] or '') .. diagnostic.message
|
||||
end,
|
||||
} or false,
|
||||
}
|
||||
end
|
||||
|
||||
set_virtual_text(false)
|
||||
|
||||
vim.api.nvim_create_autocmd('InsertEnter', {
|
||||
callback = function()
|
||||
set_virtual_text(true)
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd('InsertLeave', {
|
||||
callback = function()
|
||||
set_virtual_text(false)
|
||||
end,
|
||||
})
|
||||
|
||||
-- LSP servers and clients are able to communicate to each other what features they support.
|
||||
-- By default, Neovim doesn't support everything that is in the LSP specification.
|
||||
-- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities.
|
||||
|
|
Loading…
Reference in New Issue