@@ -6,6 +6,7 @@ local view = require "nvim-tree.view"
66local watch = require " nvim-tree.explorer.watch"
77local explorer_node = require " nvim-tree.explorer.node"
88
9+ local BaseNode = require " nvim-tree.node"
910local DirectoryNode = require " nvim-tree.node.directory"
1011local FileNode = require " nvim-tree.node.file"
1112local LinkNode = require " nvim-tree.node.link"
@@ -25,7 +26,7 @@ local FILTER_REASON = require("nvim-tree.enum").FILTER_REASON
2526
2627local config
2728
28- --- @class Explorer
29+ --- @class Explorer : BaseNode
2930--- @field opts table user options
3031--- @field absolute_path string
3132--- @field nodes Node[]
@@ -37,7 +38,7 @@ local config
3738--- @field sorters Sorter
3839--- @field marks Marks
3940--- @field clipboard Clipboard
40- local Explorer = {}
41+ local Explorer = BaseNode : new ()
4142
4243--- @param path string | nil
4344--- @return Explorer | nil
8485
8586function Explorer :destroy ()
8687 local function iterate (node )
87- explorer_node . node_destroy ( node )
88+ node : destroy ( )
8889 if node .nodes then
8990 for _ , child in pairs (node .nodes ) do
9091 iterate (child )
@@ -114,7 +115,7 @@ function Explorer:reload(node, git_status)
114115
115116 local remain_childs = {}
116117
117- local node_ignored = explorer_node . is_git_ignored (node )
118+ local node_ignored = node : is_git_ignored ()
118119 --- @type table<string , Node>
119120 local nodes_by_path = utils .key_by (node .nodes , " absolute_path" )
120121
@@ -147,7 +148,7 @@ function Explorer:reload(node, git_status)
147148
148149 if n .type ~= t then
149150 utils .array_remove (node .nodes , n )
150- explorer_node . node_destroy ( n )
151+ n : destroy ( )
151152 nodes_by_path [abs ] = nil
152153 end
153154 end
@@ -190,14 +191,14 @@ function Explorer:reload(node, git_status)
190191 if remain_childs [n .absolute_path ] then
191192 return remain_childs [n .absolute_path ]
192193 else
193- explorer_node . node_destroy ( n )
194+ n : destroy ( )
194195 return false
195196 end
196197 end , node .nodes )
197198 )
198199
199200 local is_root = not node .parent
200- local child_folder_only = explorer_node . has_one_child_folder (node ) and node .nodes [1 ]
201+ local child_folder_only = node : has_one_child_folder () and node .nodes [1 ]
201202 if config .group_empty and not is_root and child_folder_only then
202203 node .group_next = child_folder_only
203204 local ns = self :reload (child_folder_only , git_status )
@@ -326,7 +327,7 @@ function Explorer:update_parent_statuses(node, project, root)
326327 end
327328
328329 -- update status
329- explorer_node .update_git_status (node , explorer_node . is_git_ignored ( node .parent ), project )
330+ explorer_node .update_git_status (node , node . parent and node .parent : is_git_ignored ( ), project )
330331
331332 -- maybe parent
332333 node = node .parent
340341--- @param git_status table
341342--- @param parent Explorer
342343function Explorer :populate_children (handle , cwd , node , git_status , parent )
343- local node_ignored = explorer_node . is_git_ignored (node )
344+ local node_ignored = node : is_git_ignored ()
344345 local nodes_by_path = utils .bool_record (node .nodes , " absolute_path" )
345346
346347 local filter_status = parent .filters :prepare (git_status )
@@ -414,7 +415,7 @@ function Explorer:explore(node, status, parent)
414415 self :populate_children (handle , cwd , node , status , parent )
415416
416417 local is_root = not node .parent
417- local child_folder_only = explorer_node . has_one_child_folder (node ) and node .nodes [1 ]
418+ local child_folder_only = node : has_one_child_folder () and node .nodes [1 ]
418419 if config .renderer .group_empty and not is_root and child_folder_only then
419420 local child_cwd = child_folder_only .link_to or child_folder_only .absolute_path
420421 local child_status = git .load_project_status (child_cwd )
0 commit comments