From 406329056b9eeda06fb412c3c5c6e4b9ed6e3f4b Mon Sep 17 00:00:00 2001 From: cynix Date: Mon, 10 Apr 2023 13:51:16 +1000 Subject: [PATCH 1/2] Ensure virtual line has the same indent as the actual line --- lua/inlay-hints/render/virtline.lua | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lua/inlay-hints/render/virtline.lua b/lua/inlay-hints/render/virtline.lua index 13ed241..f245cac 100644 --- a/lua/inlay-hints/render/virtline.lua +++ b/lua/inlay-hints/render/virtline.lua @@ -11,22 +11,25 @@ function M.render_line(line, line_hints, bufnr, ns) local parameter_opts = opts.hints.parameter local type_opts = opts.hints.type - local virt_lines = {} + local indent = string.match(vim.api.nvim_buf_get_lines(bufnr, line, line + 1, false)[1] or '', '^%s*') or '' local virt_text = "" + local virt_texts = {{indent, ''}} for _, hint in ipairs(line_hints) do - local spaces = hint.range.character - string.len(virt_text) + local spaces = hint.range.character - string.len(indent) - string.len(virt_text) if spaces < 1 then spaces = 1 end - table.insert(virt_lines, { - string.rep(" ", spaces) .. hint.label, + local hint_text = string.rep(" ", spaces) .. hint.label + table.insert(virt_texts, { + hint_text, hint.kind == InlayHintKind.Type and type_opts.highlight or parameter_opts.highlight, }) - virt_text = virt_text .. string.rep(" ", spaces) .. hint.label + virt_text = virt_text .. hint_text end + virt_text = indent .. virt_text local last_virt_text = "" local old = line_hints.old @@ -50,7 +53,7 @@ function M.render_line(line, line_hints, bufnr, ns) ui_utils.clear_ns(bufnr, ns, line, line + 1) vim.api.nvim_buf_set_extmark(bufnr, ns, line, 0, { virt_lines = { - virt_lines, + virt_texts, }, }) end From 0e1dc0388ca24a7ced5723bfabc3178e98b805ed Mon Sep 17 00:00:00 2001 From: cynix Date: Mon, 10 Apr 2023 13:58:32 +1000 Subject: [PATCH 2/2] Minor optimisation --- lua/inlay-hints/render/virtline.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/inlay-hints/render/virtline.lua b/lua/inlay-hints/render/virtline.lua index f245cac..54768b0 100644 --- a/lua/inlay-hints/render/virtline.lua +++ b/lua/inlay-hints/render/virtline.lua @@ -12,11 +12,12 @@ function M.render_line(line, line_hints, bufnr, ns) local type_opts = opts.hints.type local indent = string.match(vim.api.nvim_buf_get_lines(bufnr, line, line + 1, false)[1] or '', '^%s*') or '' + local indent_len = string.len(indent) local virt_text = "" local virt_texts = {{indent, ''}} for _, hint in ipairs(line_hints) do - local spaces = hint.range.character - string.len(indent) - string.len(virt_text) + local spaces = hint.range.character - indent_len - string.len(virt_text) if spaces < 1 then spaces = 1 end