mirror of
https://github.com/neovim/neovim.git
synced 2026-08-27 09:31:47 +00:00
fix(diagnostic): check for extmark in get_logical_pos #37127
Problem: The function get_logical_pos did not account for the possibility that a diagnostic might not have an associated extmark, leading to potential errors or incorrect behavior. Solution: Add a check for diagnostic._extmark_id and return the logical positions directly if it does not exist.
This commit is contained in:
@@ -655,6 +655,10 @@ local sign_highlight_map = make_highlight_map('Sign')
|
|||||||
--- @return integer end_col
|
--- @return integer end_col
|
||||||
--- @return boolean valid
|
--- @return boolean valid
|
||||||
local function get_logical_pos(diagnostic)
|
local function get_logical_pos(diagnostic)
|
||||||
|
if not diagnostic._extmark_id then
|
||||||
|
return diagnostic.lnum, diagnostic.col, diagnostic.end_lnum, diagnostic.end_col, true
|
||||||
|
end
|
||||||
|
|
||||||
local ns = M.get_namespace(diagnostic.namespace)
|
local ns = M.get_namespace(diagnostic.namespace)
|
||||||
local extmark = api.nvim_buf_get_extmark_by_id(
|
local extmark = api.nvim_buf_get_extmark_by_id(
|
||||||
diagnostic.bufnr,
|
diagnostic.bufnr,
|
||||||
|
|||||||
@@ -608,6 +608,21 @@ describe('vim.diagnostic', function()
|
|||||||
vim.diagnostic.hide(_G.diagnostic_ns)
|
vim.diagnostic.hide(_G.diagnostic_ns)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('handles diagnostics without extmark_id', function()
|
||||||
|
exec_lua(function()
|
||||||
|
vim.diagnostic.config({ virtual_text = true })
|
||||||
|
|
||||||
|
vim.diagnostic.set(_G.diagnostic_ns, _G.diagnostic_bufnr, {
|
||||||
|
_G.make_error('Error message', 0, 0, 0, 5),
|
||||||
|
})
|
||||||
|
|
||||||
|
local diags = vim.diagnostic.get(_G.diagnostic_bufnr, { namespace = _G.diagnostic_ns })
|
||||||
|
diags[1]._extmark_id = nil
|
||||||
|
|
||||||
|
vim.diagnostic.show(_G.diagnostic_ns, _G.diagnostic_bufnr, diags)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('enable() and disable()', function()
|
describe('enable() and disable()', function()
|
||||||
|
|||||||
Reference in New Issue
Block a user