updates for diagnostic error position in scroll bar area

pull/296/head
ray-x 6 months ago
parent 924139448f
commit a4c94d315c

@ -54,6 +54,8 @@ local function error_marker(result, ctx, config)
return
end
local first_line = vim.fn.line('w0')
local last_line = vim.fn.line('w$')
local wheight = last_line - first_line + 1
-- local rootfolder = vim.fn.expand('%:h:t') -- get the current file root folder
local bufnr = ctx.bufnr
@ -92,15 +94,18 @@ local function error_marker(result, ctx, config)
-- local winid = vim.fn.win_getid(vim.fn.winnr())
-- local winid = api.nvim_get_current_win()
local total_num = api.nvim_buf_line_count(bufnr)
if total_num == 0 then
return
end
-- local total_num = vim.fn.getbufinfo(vim.fn.winbufnr(winid))[1].linecount
-- window size of current buffer
local stats = api.nvim_list_uis()[1] or {}
-- local stats = api.nvim_list_uis()[1] or {}
-- local wwidth = stats.width;
local wheight = stats.height or 0
-- local wheight = stats.height or 0
if total_num <= wheight then
return
if total_num < wheight then
wheight = total_num
end
if _NG_VT_DIAG_NS == nil then
_NG_VT_DIAG_NS = api.nvim_create_namespace('navigator_lua_diag')
@ -125,8 +130,9 @@ local function error_marker(result, ctx, config)
diag.range = { start = { line = diag.lnum } }
end
if diag.range and diag.range.start and diag.range.start.line then
p = diag.range.start.line
p = diag.range.start.line + 1 -- convert to 1 based
p = util.round(p * wheight / math.max(wheight, total_num))
trace('pos: ', diag.range.start.line, p)
if pos[#pos] and pos[#pos].line == p then
local bar = _NgConfigValues.lsp.diagnostic_scrollbar_sign[2]
if pos[#pos] == bar then
@ -161,11 +167,15 @@ local function error_marker(result, ctx, config)
hl = 'WarningMsg'
end
end
local l = s.line + first_line
if l > total_num then
l = total_num
local l = s.line + first_line - 1 -- convert back to 0 based
if l > total_num - 1 then
l = total_num - 1
end
trace('add pos', s, bufnr)
if l < 0 then
l = 0
end
trace('add pos', s, bufnr, l)
api.nvim_buf_set_extmark(
bufnr,
@ -184,7 +194,7 @@ end
local update_err_marker_async = function()
local debounce = require('navigator.debounce').debounce_trailing
return debounce(400, error_marker)
return debounce(500, error_marker)
end
local diag_hdlr = function(err, result, ctx, config)
@ -208,7 +218,7 @@ local diag_hdlr = function(err, result, ctx, config)
local client_id = ctx.client_id
local bufnr = ctx.bufnr or 0
trace('diag', err, mode, result, ctx, confi)
trace('diag', err, mode, result, ctx, config)
vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config)
local uri = result.uri
@ -273,7 +283,7 @@ local diag_hdlr = function(err, result, ctx, config)
if line ~= nil then
item.text = head .. line .. ic .. v.message
else
error('diagnostic result empty line', v, row, bufnr1)
error('diagnostic result empty line' .. tostring(row))
end
else
item.text = head .. ic .. v.message
@ -467,7 +477,6 @@ function M.update_err_marker()
return
end
api.nvim_buf_clear_namespace(bufnr, _NG_VT_DIAG_NS, 0, -1)
local errors = diagnostic.get(bufnr)
if #errors == 0 then
trace('no errors', errors)

@ -72,7 +72,8 @@ function M.setup_fold()
api.nvim_command('augroup end')
vim.opt.foldtext = 'v:lua.NG_custom_fold_text()'
vim.opt.viewoptions:remove('options')
vim.opt.fillchars = { foldclose = "", foldopen = "", vert = "", fold = " ", diff = "", msgsep = "", foldsep = "" }
-- user should setup themself
-- vim.opt.fillchars = { foldclose = "", foldopen = "", vert = "│", fold = " ", diff = "░", msgsep = "‾", foldsep = "│" }
local current_window = api.nvim_get_current_win()
if not parsers.has_parser() then

Loading…
Cancel
Save