Skip to content

Commit 7291e45

Browse files
committed
fix: when not lazy render chunk, didn't check whether lnum is invalid
ref: change to local var
1 parent 064a5ab commit 7291e45

File tree

3 files changed

+28
-58
lines changed

3 files changed

+28
-58
lines changed

docs/init.md

Lines changed: 0 additions & 37 deletions
This file was deleted.

lua/hlchunk/mods/chunk/init.lua

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,10 @@ function ChunkMod:render(range, opts)
155155
for i, vt in ipairs(virt_text_list) do
156156
row_opts.virt_text = { { vt, text_hl } }
157157
row_opts.virt_text_win_col = virt_text_win_col_list[i]
158-
api.nvim_buf_set_extmark(range.bufnr, self.meta.ns_id, row_list[i], 0, row_opts)
158+
local row = row_list[i]
159+
if api.nvim_buf_is_valid(range.bufnr) and api.nvim_buf_line_count(range.bufnr) > row then
160+
api.nvim_buf_set_extmark(range.bufnr, self.meta.ns_id, row, 0, row_opts)
161+
end
159162
end
160163
else
161164
self.meta.task = LoopTask(function(vt, row, vt_win_col)

lua/hlchunk/mods/indent/init.lua

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ end
5454
function IndentMod:narrowRange(range)
5555
local start = range.start
5656
local finish = range.finish
57-
for i = range.start, range.finish do
57+
for i = start, finish do
5858
if not self.meta.cache:has(range.bufnr, i) then
5959
start = i
6060
break
6161
end
6262
end
63-
for i = range.finish, range.start, -1 do
63+
for i = finish, start, -1 do
6464
if not self.meta.cache:has(range.bufnr, i) then
6565
finish = i
6666
break
@@ -71,18 +71,20 @@ end
7171

7272
function IndentMod:calcRenderInfo(range)
7373
-- calc render info
74-
local char_num = #self.conf.chars
75-
local style_num = #self.meta.hl_name_list
76-
local leftcol = self.meta.leftcol
77-
local sw = self.meta.shiftwidth
74+
local conf = self.conf
75+
local meta = self.meta
76+
local char_num = #conf.chars
77+
local style_num = #meta.hl_name_list
78+
local leftcol = meta.leftcol
79+
local sw = meta.shiftwidth
7880
local render_info = {}
7981
for lnum = range.start, range.finish do
80-
local blankLen = self.meta.cache:get(range.bufnr, lnum) --[[@as string]]
82+
local blankLen = meta.cache:get(range.bufnr, lnum) --[[@as string]]
8183
local render_char_num, offset, shadow_char_num = indentHelper.calc(blankLen, leftcol, sw)
8284
for i = 1, render_char_num do
8385
local win_col = offset + (i - 1) * sw
84-
local char = self.conf.chars[(i - 1 + shadow_char_num) % char_num + 1]
85-
local style = self.meta.hl_name_list[(i - 1 + shadow_char_num) % style_num + 1]
86+
local char = conf.chars[(i - 1 + shadow_char_num) % char_num + 1]
87+
local style = meta.hl_name_list[(i - 1 + shadow_char_num) % style_num + 1]
8688
table.insert(render_info, {
8789
lnum = lnum,
8890
virt_text_win_col = win_col,
@@ -114,32 +116,34 @@ end
114116

115117
function IndentMod:render(range, opts)
116118
opts = opts or { lazy = false }
119+
local bufnr = range.bufnr
120+
local conf = self.conf
121+
local meta = self.meta
122+
117123
if not opts.lazy then
118-
self:clear(Scope(range.bufnr, 0, api.nvim_buf_line_count(range.bufnr)))
119-
self.meta.cache:clear(range.bufnr)
120-
pos2id:clear(range.bufnr)
121-
pos2info:clear(range.bufnr)
124+
self:clear(Scope(bufnr, 0, api.nvim_buf_line_count(bufnr)))
125+
meta.cache:clear(bufnr)
126+
pos2id:clear(bufnr)
127+
pos2info:clear(bufnr)
122128
end
123129

124130
local narrowed_range = self:narrowRange(range)
125-
-- calculate indent
126131
local retcode, rows_indent = indentHelper.get_rows_indent(narrowed_range, {
127-
use_treesitter = self.conf.use_treesitter,
132+
use_treesitter = conf.use_treesitter,
128133
virt_indent = true,
129134
})
130-
if retcode == ROWS_INDENT_RETCODE.NO_TS and self.conf.use_treesitter then
131-
if self.conf.notify then
135+
if retcode == ROWS_INDENT_RETCODE.NO_TS and conf.use_treesitter then
136+
if conf.notify then
132137
self:notify("[hlchunk.indent]: no parser for " .. vim.bo.filetype, nil, { once = true })
133138
end
134139
return
135140
end
136141

137-
-- update cache
138142
for lnum, indent in pairs(rows_indent) do
139-
self.meta.cache:set(range.bufnr, lnum, indent)
143+
meta.cache:set(bufnr, lnum, indent)
140144
end
141145
local render_info = self:calcRenderInfo(narrowed_range)
142-
self:setmark(range.bufnr, render_info)
146+
self:setmark(bufnr, render_info)
143147
end
144148

145149
function IndentMod:createAutocmd()

0 commit comments

Comments
 (0)