Skip to content

Commit 24eb27e

Browse files
committed
feat(#2948): add UserDecorator
1 parent 099de58 commit 24eb27e

File tree

11 files changed

+186
-87
lines changed

11 files changed

+186
-87
lines changed

lua/nvim-tree/renderer/decorator/bookmarks.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ local DecoratorBookmarks = Decorator:extend()
1313
function DecoratorBookmarks:new(explorer)
1414
self.explorer = explorer
1515

16-
DecoratorBookmarks.super.new(self, {
17-
enabled = true,
18-
hl_pos = self.explorer.opts.renderer.highlight_bookmarks or "none",
19-
icon_placement = self.explorer.opts.renderer.icons.bookmarks_placement or "none",
20-
})
16+
---@type DecoratorArgs
17+
local args = {
18+
enabled = true,
19+
highlight_range = self.explorer.opts.renderer.highlight_bookmarks or "none",
20+
icon_placement = self.explorer.opts.renderer.icons.bookmarks_placement or "none",
21+
}
22+
23+
DecoratorBookmarks.super.new(self, args)
2124

2225
if self.explorer.opts.renderer.icons.show.bookmarks then
2326
self.icon = {
@@ -41,7 +44,7 @@ end
4144
---@param node Node
4245
---@return string|nil group
4346
function DecoratorBookmarks:calculate_highlight(node)
44-
if self.range ~= "none" and self.explorer.marks:get(node) then
47+
if self.highlight_range ~= "none" and self.explorer.marks:get(node) then
4548
return "NvimTreeBookmarkHL"
4649
end
4750
end

lua/nvim-tree/renderer/decorator/copied.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,21 @@ local DecoratorCopied = Decorator:extend()
1212
function DecoratorCopied:new(explorer)
1313
self.explorer = explorer
1414

15-
DecoratorCopied.super.new(self, {
16-
enabled = true,
17-
hl_pos = self.explorer.opts.renderer.highlight_clipboard or "none",
18-
icon_placement = "none",
19-
})
15+
---@type DecoratorArgs
16+
local args = {
17+
enabled = true,
18+
highlight_range = self.explorer.opts.renderer.highlight_clipboard or "none",
19+
icon_placement = "none",
20+
}
21+
22+
DecoratorCopied.super.new(self, args)
2023
end
2124

2225
---Copied highlight: renderer.highlight_clipboard and node is copied
2326
---@param node Node
2427
---@return string|nil group
2528
function DecoratorCopied:calculate_highlight(node)
26-
if self.range ~= "none" and self.explorer.clipboard:is_copied(node) then
29+
if self.highlight_range ~= "none" and self.explorer.clipboard:is_copied(node) then
2730
return "NvimTreeCopiedHL"
2831
end
2932
end

lua/nvim-tree/renderer/decorator/cut.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,21 @@ local DecoratorCut = Decorator:extend()
1212
function DecoratorCut:new(explorer)
1313
self.explorer = explorer
1414

15-
DecoratorCut.super.new(self, {
16-
enabled = true,
17-
hl_pos = self.explorer.opts.renderer.highlight_clipboard or "none",
18-
icon_placement = "none",
19-
})
15+
---@type DecoratorArgs
16+
local args = {
17+
enabled = true,
18+
highlight_range = self.explorer.opts.renderer.highlight_clipboard or "none",
19+
icon_placement = "none",
20+
}
21+
22+
DecoratorCut.super.new(self, args)
2023
end
2124

2225
---Cut highlight: renderer.highlight_clipboard and node is cut
2326
---@param node Node
2427
---@return string|nil group
2528
function DecoratorCut:calculate_highlight(node)
26-
if self.range ~= "none" and self.explorer.clipboard:is_cut(node) then
29+
if self.highlight_range ~= "none" and self.explorer.clipboard:is_cut(node) then
2730
return "NvimTreeCutHL"
2831
end
2932
end

lua/nvim-tree/renderer/decorator/diagnostics.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ local DecoratorDiagnostics = Decorator:extend()
4343
function DecoratorDiagnostics:new(explorer)
4444
self.explorer = explorer
4545

46-
DecoratorDiagnostics.super.new(self, {
47-
enabled = true,
48-
hl_pos = self.explorer.opts.renderer.highlight_diagnostics or "none",
49-
icon_placement = self.explorer.opts.renderer.icons.diagnostics_placement or "none",
50-
})
46+
---@type DecoratorArgs
47+
local args = {
48+
enabled = true,
49+
highlight_range = self.explorer.opts.renderer.highlight_diagnostics or "none",
50+
icon_placement = self.explorer.opts.renderer.icons.diagnostics_placement or "none",
51+
}
52+
53+
DecoratorDiagnostics.super.new(self, args)
5154

5255
if not self.enabled then
5356
return
@@ -83,7 +86,7 @@ end
8386
---@param node Node
8487
---@return string|nil group
8588
function DecoratorDiagnostics:calculate_highlight(node)
86-
if not node or not self.enabled or self.range == "none" then
89+
if not node or not self.enabled or self.highlight_range == "none" then
8790
return nil
8891
end
8992

lua/nvim-tree/renderer/decorator/git.lua

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,20 @@ local DecoratorGit = Decorator:extend()
2828
function DecoratorGit:new(explorer)
2929
self.explorer = explorer
3030

31-
DecoratorGit.super.new(self, {
32-
enabled = self.explorer.opts.git.enable,
33-
hl_pos = self.explorer.opts.renderer.highlight_git or "none",
34-
icon_placement = self.explorer.opts.renderer.icons.git_placement or "none",
35-
})
31+
---@type DecoratorArgs
32+
local args = {
33+
enabled = self.explorer.opts.git.enable,
34+
highlight_range = self.explorer.opts.renderer.highlight_git or "none",
35+
icon_placement = self.explorer.opts.renderer.icons.git_placement or "none",
36+
}
37+
38+
DecoratorGit.super.new(self, args)
3639

3740
if not self.enabled then
3841
return
3942
end
4043

41-
if self.range ~= "none" then
44+
if self.highlight_range ~= "none" then
4245
self:build_file_folder_hl_by_xy()
4346
end
4447

@@ -161,7 +164,7 @@ function DecoratorGit:calculate_icons(node)
161164
for _, s in pairs(git_xy) do
162165
local icons = self.icons_by_xy[s]
163166
if not icons then
164-
if self.range == "none" then
167+
if self.highlight_range == "none" then
165168
notify.warn(string.format("Unrecognized git state '%s'", git_xy))
166169
end
167170
return nil
@@ -207,7 +210,7 @@ end
207210
---@param node Node
208211
---@return string|nil group
209212
function DecoratorGit:calculate_highlight(node)
210-
if not node or not self.enabled or self.range == "none" then
213+
if not node or not self.enabled or self.highlight_range == "none" then
211214
return nil
212215
end
213216

lua/nvim-tree/renderer/decorator/hidden.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ local DecoratorHidden = Decorator:extend()
1414
function DecoratorHidden:new(explorer)
1515
self.explorer = explorer
1616

17-
DecoratorHidden.super.new(self, {
18-
enabled = true,
19-
hl_pos = self.explorer.opts.renderer.highlight_hidden or "none",
20-
icon_placement = self.explorer.opts.renderer.icons.hidden_placement or "none",
21-
})
17+
---@type DecoratorArgs
18+
local args = {
19+
enabled = true,
20+
highlight_range = self.explorer.opts.renderer.highlight_hidden or "none",
21+
icon_placement = self.explorer.opts.renderer.icons.hidden_placement or "none",
22+
}
23+
24+
DecoratorHidden.super.new(self, args)
2225

2326
if self.explorer.opts.renderer.icons.show.hidden then
2427
self.icon = {
@@ -42,7 +45,7 @@ end
4245
---@param node Node
4346
---@return string|nil group
4447
function DecoratorHidden:calculate_highlight(node)
45-
if not self.enabled or self.range == "none" or not node:is_dotfile() then
48+
if not self.enabled or self.highlight_range == "none" or not node:is_dotfile() then
4649
return nil
4750
end
4851

lua/nvim-tree/renderer/decorator/init.lua

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,38 @@
11
local Class = require("nvim-tree.classic")
22

3-
---@alias DecoratorRange "none" | "icon" | "name" | "all"
4-
---@alias DecoratorIconPlacement "none" | "before" | "after" | "signcolumn" | "right_align"
5-
63
---Abstract Decorator
74
---@class (exact) Decorator: Class
85
---@field protected enabled boolean
9-
---@field protected range DecoratorRange
6+
---@field protected highlight_range DecoratorHighlightRange
107
---@field protected icon_placement DecoratorIconPlacement
118
local Decorator = Class:extend()
129

13-
---@class (exact) DecoratorArgs
14-
---@field enabled boolean
15-
---@field hl_pos DecoratorRange
16-
---@field icon_placement DecoratorIconPlacement
17-
1810
---@protected
1911
---@param args DecoratorArgs
2012
function Decorator:new(args)
21-
self.enabled = args.enabled
22-
self.range = args.hl_pos
23-
self.icon_placement = args.icon_placement
13+
if args then
14+
self.enabled = args.enabled
15+
self.highlight_range = args.highlight_range
16+
self.icon_placement = args.icon_placement
17+
else
18+
self.enabled = false
19+
end
2420
end
2521

2622
---Maybe highlight groups
2723
---@param node Node
28-
---@return string|nil icon highlight group
29-
---@return string|nil name highlight group
24+
---@return string? icon highlight group
25+
---@return string? name highlight group
3026
function Decorator:groups_icon_name(node)
3127
local icon_hl, name_hl
3228

33-
if self.enabled and self.range ~= "none" then
29+
if self.enabled and self.highlight_range ~= "none" then
3430
local hl = self:calculate_highlight(node)
3531

36-
if self.range == "all" or self.range == "icon" then
32+
if self.highlight_range == "all" or self.highlight_range == "icon" then
3733
icon_hl = hl
3834
end
39-
if self.range == "all" or self.range == "name" then
35+
if self.highlight_range == "all" or self.highlight_range == "name" then
4036
name_hl = hl
4137
end
4238
end
@@ -46,7 +42,7 @@ end
4642

4743
---Maybe icon sign
4844
---@param node Node
49-
---@return string|nil name
45+
---@return string? name
5046
function Decorator:sign_name(node)
5147
if not self.enabled or self.icon_placement ~= "signcolumn" then
5248
return
@@ -60,7 +56,7 @@ end
6056

6157
---Icons when "before"
6258
---@param node Node
63-
---@return HighlightedString[]|nil icons
59+
---@return HighlightedString[]? icons
6460
function Decorator:icons_before(node)
6561
if not self.enabled or self.icon_placement ~= "before" then
6662
return
@@ -71,7 +67,7 @@ end
7167

7268
---Icons when "after"
7369
---@param node Node
74-
---@return HighlightedString[]|nil icons
70+
---@return HighlightedString[]? icons
7571
function Decorator:icons_after(node)
7672
if not self.enabled or self.icon_placement ~= "after" then
7773
return
@@ -82,7 +78,7 @@ end
8278

8379
---Icons when "right_align"
8480
---@param node Node
85-
---@return HighlightedString[]|nil icons
81+
---@return HighlightedString[]? icons
8682
function Decorator:icons_right_align(node)
8783
if not self.enabled or self.icon_placement ~= "right_align" then
8884
return
@@ -93,23 +89,23 @@ end
9389

9490
---Maybe icons, optionally implemented
9591
---@protected
96-
---@param _ Node
97-
---@return HighlightedString[]|nil icons
98-
function Decorator:calculate_icons(_)
99-
return nil
92+
---@param node Node
93+
---@return HighlightedString[]? icons
94+
function Decorator:calculate_icons(node)
95+
self:nop(node)
10096
end
10197

10298
---Maybe highlight group, optionally implemented
10399
---@protected
104-
---@param _ Node
105-
---@return string|nil group
106-
function Decorator:calculate_highlight(_)
107-
return nil
100+
---@param node Node
101+
---@return string? group
102+
function Decorator:calculate_highlight(node)
103+
self:nop(node)
108104
end
109105

110106
---Define a sign
111107
---@protected
112-
---@param icon HighlightedString|nil
108+
---@param icon HighlightedString?
113109
function Decorator:define_sign(icon)
114110
if icon and #icon.hl > 0 then
115111
local name = icon.hl[1]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---@meta
2+
3+
---Highlight group range as per nvim-tree.renderer.highlight_*
4+
---@alias DecoratorHighlightRange "none" | "icon" | "name" | "all"
5+
6+
---Icon position as per renderer.icons.*_placement
7+
---@alias DecoratorIconPlacement "none" | "before" | "after" | "signcolumn" | "right_align"
8+
9+
---Decorator Constructor Arguments
10+
---@class (exact) DecoratorArgs
11+
---@field enabled boolean
12+
---@field highlight_range DecoratorHighlightRange
13+
---@field icon_placement DecoratorIconPlacement

lua/nvim-tree/renderer/decorator/modified.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ local DecoratorModified = Decorator:extend()
1616
function DecoratorModified:new(explorer)
1717
self.explorer = explorer
1818

19-
DecoratorModified.super.new(self, {
20-
enabled = true,
21-
hl_pos = self.explorer.opts.renderer.highlight_modified or "none",
22-
icon_placement = self.explorer.opts.renderer.icons.modified_placement or "none",
23-
})
19+
---@type DecoratorArgs
20+
local args = {
21+
enabled = true,
22+
highlight_range = self.explorer.opts.renderer.highlight_modified or "none",
23+
icon_placement = self.explorer.opts.renderer.icons.modified_placement or "none",
24+
}
25+
26+
DecoratorModified.super.new(self, args)
2427

2528
if not self.enabled then
2629
return
@@ -48,7 +51,7 @@ end
4851
---@param node Node
4952
---@return string|nil group
5053
function DecoratorModified:calculate_highlight(node)
51-
if not self.enabled or self.range == "none" or not buffers.is_modified(node) then
54+
if not self.enabled or self.highlight_range == "none" or not buffers.is_modified(node) then
5255
return nil
5356
end
5457

lua/nvim-tree/renderer/decorator/opened.lua

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,21 @@ local DecoratorOpened = Decorator:extend()
1515
function DecoratorOpened:new(explorer)
1616
self.explorer = explorer
1717

18-
DecoratorOpened.super.new(self, {
19-
enabled = true,
20-
hl_pos = self.explorer.opts.renderer.highlight_opened_files or "none",
21-
icon_placement = "none",
22-
})
18+
---@type DecoratorArgs
19+
local args = {
20+
enabled = true,
21+
highlight_range = self.explorer.opts.renderer.highlight_opened_files or "none",
22+
icon_placement = "none",
23+
}
24+
25+
DecoratorOpened.super.new(self, args)
2326
end
2427

2528
---Opened highlight: renderer.highlight_opened_files and node has an open buffer
2629
---@param node Node
2730
---@return string|nil group
2831
function DecoratorOpened:calculate_highlight(node)
29-
if self.range ~= "none" and buffers.is_opened(node) then
32+
if self.highlight_range ~= "none" and buffers.is_opened(node) then
3033
return "NvimTreeOpenedHL"
3134
end
3235
end

0 commit comments

Comments
 (0)