@@ -11,6 +11,8 @@ local namespace_highlights_id = vim.api.nvim_create_namespace("NvimTreeHighlight
1111local namespace_extmarks_id = vim .api .nvim_create_namespace (" NvimTreeExtmarks" )
1212local namespace_virtual_lines_id = vim .api .nvim_create_namespace (" NvimTreeVirtualLines" )
1313
14+ --- @alias HighlightRangeArgs { higroup : string , start : integer[] , finish : integer[] } [] named arguments for vim.hl.range
15+
1416--- @class (exact ) Renderer : Class
1517--- @field explorer Explorer
1618local Renderer = Class :extend ()
3032--- @private
3133--- @param bufnr number
3234--- @param lines string[]
33- --- @param hl_args AddHighlightArgs []
35+ --- @param hl_range_args HighlightRangeArgs []
3436--- @param signs string[]
3537--- @param extmarks table[] extra marks for right icon placement
3638--- @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 )
3840 if vim .fn .has (" nvim-0.10" ) == 1 then
3941 vim .api .nvim_set_option_value (" modifiable" , true , { buf = bufnr })
4042 else
4143 vim .api .nvim_buf_set_option (bufnr , " modifiable" , true ) --- @diagnostic disable-line : deprecated
4244 end
4345
4446 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 )
4648
4749 if vim .fn .has (" nvim-0.10" ) == 1 then
4850 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)
7779end
7880
7981--- @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 )
8185 if not bufnr or not vim .api .nvim_buf_is_loaded (bufnr ) then
8286 return
8387 end
8488 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
9094 end
9195 end
9296end
@@ -103,7 +107,7 @@ function Renderer:draw()
103107
104108 local builder = Builder (self .explorer ):build ()
105109
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 )
107111
108112 if cursor and # builder .lines >= cursor [1 ] then
109113 vim .api .nvim_win_set_cursor (view .get_winnr () or 0 , cursor )
0 commit comments