@@ -11,6 +11,8 @@ local namespace_highlights_id = vim.api.nvim_create_namespace("NvimTreeHighlight
11
11
local namespace_extmarks_id = vim .api .nvim_create_namespace (" NvimTreeExtmarks" )
12
12
local namespace_virtual_lines_id = vim .api .nvim_create_namespace (" NvimTreeVirtualLines" )
13
13
14
+ --- @alias HighlightRangeArgs { higroup : string , start : integer[] , finish : integer[] } [] named arguments for vim.hl.range
15
+
14
16
--- @class (exact ) Renderer : Class
15
17
--- @field explorer Explorer
16
18
local Renderer = Class :extend ()
30
32
--- @private
31
33
--- @param bufnr number
32
34
--- @param lines string[]
33
- --- @param hl_args AddHighlightArgs []
35
+ --- @param hl_range_args HighlightRangeArgs []
34
36
--- @param signs string[]
35
37
--- @param extmarks table[] extra marks for right icon placement
36
38
--- @param virtual_lines table[] virtual lines for hidden count display
37
- function Renderer :_draw (bufnr , lines , hl_args , signs , extmarks , virtual_lines )
39
+ function Renderer :_draw (bufnr , lines , hl_range_args , signs , extmarks , virtual_lines )
38
40
if vim .fn .has (" nvim-0.10" ) == 1 then
39
41
vim .api .nvim_set_option_value (" modifiable" , true , { buf = bufnr })
40
42
else
41
43
vim .api .nvim_buf_set_option (bufnr , " modifiable" , true ) --- @diagnostic disable-line : deprecated
42
44
end
43
45
44
46
vim .api .nvim_buf_set_lines (bufnr , 0 , - 1 , false , lines )
45
- self :render_hl (bufnr , hl_args )
47
+ self :render_hl (bufnr , hl_range_args )
46
48
47
49
if vim .fn .has (" nvim-0.10" ) == 1 then
48
50
vim .api .nvim_set_option_value (" modifiable" , false , { buf = bufnr })
@@ -77,16 +79,18 @@ function Renderer:_draw(bufnr, lines, hl_args, signs, extmarks, virtual_lines)
77
79
end
78
80
79
81
--- @private
80
- function Renderer :render_hl (bufnr , hl )
82
+ --- @param bufnr integer
83
+ --- @param hl_range_args HighlightRangeArgs[]
84
+ function Renderer :render_hl (bufnr , hl_range_args )
81
85
if not bufnr or not vim .api .nvim_buf_is_loaded (bufnr ) then
82
86
return
83
87
end
84
88
vim .api .nvim_buf_clear_namespace (bufnr , namespace_highlights_id , 0 , - 1 )
85
- for _ , data in ipairs (hl ) do
86
- if type ( data [ 1 ] ) == " table " then
87
- for _ , group in ipairs ( data [ 1 ]) do
88
- vim . api . nvim_buf_add_highlight ( bufnr , namespace_highlights_id , group , data [ 2 ], data [ 3 ], data [ 4 ])
89
- end
89
+ for _ , args in ipairs (hl_range_args ) do
90
+ if vim . fn . has ( " nvim-0.11 " ) == 1 then
91
+ vim . hl . range ( bufnr , namespace_highlights_id , args . higroup , args . start , args . finish , {})
92
+ else
93
+ vim . api . nvim_buf_add_highlight ( bufnr , namespace_highlights_id , args . higroup , args . start [ 1 ], args . start [ 2 ], args . finish [ 2 ]) --- @diagnostic disable-line : deprecated
90
94
end
91
95
end
92
96
end
@@ -103,7 +107,7 @@ function Renderer:draw()
103
107
104
108
local builder = Builder (self .explorer ):build ()
105
109
106
- self :_draw (bufnr , builder .lines , builder .hl_args , builder .signs , builder .extmarks , builder .virtual_lines )
110
+ self :_draw (bufnr , builder .lines , builder .hl_range_args , builder .signs , builder .extmarks , builder .virtual_lines )
107
111
108
112
if cursor and # builder .lines >= cursor [1 ] then
109
113
vim .api .nvim_win_set_cursor (view .get_winnr () or 0 , cursor )
0 commit comments