Skip to content

Commit 03ae603

Browse files
authored
refactor(#2875): multi instance renderer (#2900)
* refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): deal with some cyclic require * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer * refactor(#2875): multi instance renderer
1 parent 45a93d9 commit 03ae603

28 files changed

+263
-193
lines changed

lua/nvim-tree.lua

+17-14
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
local lib = require "nvim-tree.lib"
22
local log = require "nvim-tree.log"
33
local appearance = require "nvim-tree.appearance"
4-
local renderer = require "nvim-tree.renderer"
54
local view = require "nvim-tree.view"
6-
local commands = require "nvim-tree.commands"
75
local utils = require "nvim-tree.utils"
86
local actions = require "nvim-tree.actions"
9-
local legacy = require "nvim-tree.legacy"
107
local core = require "nvim-tree.core"
11-
local git = require "nvim-tree.git"
12-
local buffers = require "nvim-tree.buffers"
138
local notify = require "nvim-tree.notify"
149

1510
local _config = {}
@@ -97,7 +92,11 @@ function M.tab_enter()
9792
end
9893
end
9994
view.open { focus_tree = false }
100-
renderer.draw()
95+
96+
local explorer = core.get_explorer()
97+
if explorer then
98+
explorer.renderer:draw()
99+
end
101100
end
102101
end
103102

@@ -179,7 +178,11 @@ local function setup_autocommands(opts)
179178
callback = function()
180179
appearance.setup()
181180
view.reset_winhl()
182-
renderer.draw()
181+
182+
local explorer = core.get_explorer()
183+
if explorer then
184+
explorer.renderer:draw()
185+
end
183186
end,
184187
})
185188

@@ -217,7 +220,7 @@ local function setup_autocommands(opts)
217220
return
218221
end
219222
if
220-
(explorer.filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == ""
223+
(explorer.filters.config.filter_no_buffer or explorer.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == ""
221224
then
222225
utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function()
223226
explorer:reload_explorer()
@@ -234,7 +237,7 @@ local function setup_autocommands(opts)
234237
return
235238
end
236239
if
237-
(explorer.filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == ""
240+
(explorer.filters.config.filter_no_buffer or explorer.opts.highlight_opened_files ~= "none") and vim.bo[data.buf].buftype == ""
238241
then
239242
utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function()
240243
explorer:reload_explorer()
@@ -351,7 +354,7 @@ local function setup_autocommands(opts)
351354
create_nvim_tree_autocmd({ "BufModifiedSet", "BufWritePost" }, {
352355
callback = function()
353356
utils.debounce("Buf:modified", opts.view.debounce_delay, function()
354-
buffers.reload_modified()
357+
require("nvim-tree.buffers").reload_modified()
355358
local explorer = core.get_explorer()
356359
if explorer then
357360
explorer:reload_explorer()
@@ -801,7 +804,7 @@ function M.purge_all_state()
801804
view.close_all_tabs()
802805
view.abandon_all_windows()
803806
if core.get_explorer() ~= nil then
804-
git.purge_state()
807+
require("nvim-tree.git").purge_state()
805808
core.reset_explorer()
806809
end
807810
end
@@ -817,7 +820,7 @@ function M.setup(conf)
817820

818821
localise_default_opts()
819822

820-
legacy.migrate_legacy_options(conf or {})
823+
require("nvim-tree.legacy").migrate_legacy_options(conf or {})
821824

822825
validate_options(conf)
823826

@@ -851,7 +854,7 @@ function M.setup(conf)
851854
require("nvim-tree.git.utils").setup(opts)
852855
require("nvim-tree.view").setup(opts)
853856
require("nvim-tree.lib").setup(opts)
854-
require("nvim-tree.renderer").setup(opts)
857+
require("nvim-tree.renderer.components").setup(opts)
855858
require("nvim-tree.buffers").setup(opts)
856859
require("nvim-tree.help").setup(opts)
857860
require("nvim-tree.watcher").setup(opts)
@@ -863,7 +866,7 @@ function M.setup(conf)
863866

864867
if vim.g.NvimTreeSetup ~= 1 then
865868
-- first call to setup
866-
commands.setup()
869+
require("nvim-tree.commands").setup()
867870
else
868871
-- subsequent calls to setup
869872
M.purge_all_state()

lua/nvim-tree/actions/finders/find-file.lua

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
local log = require "nvim-tree.log"
22
local view = require "nvim-tree.view"
33
local utils = require "nvim-tree.utils"
4-
local renderer = require "nvim-tree.renderer"
54
local core = require "nvim-tree.core"
65
local Iterator = require "nvim-tree.iterators.node-iterator"
76

@@ -76,7 +75,7 @@ function M.fn(path)
7675
:iterate()
7776

7877
if found and view.is_visible() then
79-
renderer.draw()
78+
explorer.renderer:draw()
8079
view.set_cursor { line, 0 }
8180
end
8281

lua/nvim-tree/actions/fs/clipboard.lua

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ local utils = require "nvim-tree.utils"
44
local core = require "nvim-tree.core"
55
local events = require "nvim-tree.events"
66
local notify = require "nvim-tree.notify"
7-
local renderer = require "nvim-tree.renderer"
87

98
local find_file = require("nvim-tree.actions.finders.find-file").fn
109

@@ -193,23 +192,23 @@ function Clipboard:clear_clipboard()
193192
self.data[ACTION.copy] = {}
194193
self.data[ACTION.cut] = {}
195194
notify.info "Clipboard has been emptied."
196-
renderer.draw()
195+
self.explorer.renderer:draw()
197196
end
198197

199198
---Copy one node
200199
---@param node Node
201200
function Clipboard:copy(node)
202201
utils.array_remove(self.data[ACTION.cut], node)
203202
toggle(node, self.data[ACTION.copy])
204-
renderer.draw()
203+
self.explorer.renderer:draw()
205204
end
206205

207206
---Cut one node
208207
---@param node Node
209208
function Clipboard:cut(node)
210209
utils.array_remove(self.data[ACTION.copy], node)
211210
toggle(node, self.data[ACTION.cut])
212-
renderer.draw()
211+
self.explorer.renderer:draw()
213212
end
214213

215214
---Paste cut or cop

lua/nvim-tree/actions/moves/parent.lua

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
local renderer = require "nvim-tree.renderer"
21
local view = require "nvim-tree.view"
32
local utils = require "nvim-tree.utils"
43
local core = require "nvim-tree.core"
@@ -11,11 +10,16 @@ local M = {}
1110
function M.fn(should_close)
1211
should_close = should_close or false
1312

13+
local explorer = core.get_explorer()
14+
1415
return function(node)
1516
node = lib.get_last_group_node(node)
1617
if should_close and node.open then
1718
node.open = false
18-
return renderer.draw()
19+
if explorer then
20+
explorer.renderer:draw()
21+
end
22+
return
1923
end
2024

2125
local parent = utils.get_parent_of_group(node).parent
@@ -31,7 +35,9 @@ function M.fn(should_close)
3135
view.set_cursor { line + 1, 0 }
3236
if should_close then
3337
parent.open = false
34-
renderer.draw()
38+
if explorer then
39+
explorer.renderer:draw()
40+
end
3541
end
3642
end
3743
end

lua/nvim-tree/actions/root/change-dir.lua

+4-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ M.force_dirchange = add_profiling_to(function(foldername, should_open_view)
9191
if should_open_view then
9292
require("nvim-tree.lib").open()
9393
else
94-
require("nvim-tree.renderer").draw()
94+
local explorer = core.get_explorer()
95+
if explorer then
96+
explorer.renderer:draw()
97+
end
9598
end
9699
end)
97100

lua/nvim-tree/actions/tree/modifiers/collapse-all.lua

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
local renderer = require "nvim-tree.renderer"
21
local utils = require "nvim-tree.utils"
32
local core = require "nvim-tree.core"
43
local lib = require "nvim-tree.lib"
@@ -46,7 +45,7 @@ function M.fn(keep_buffers)
4645
end)
4746
:iterate()
4847

49-
renderer.draw()
48+
explorer.renderer:draw()
5049
utils.focus_node_or_parent(node)
5150
end
5251

lua/nvim-tree/actions/tree/modifiers/expand-all.lua

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
local core = require "nvim-tree.core"
2-
local renderer = require "nvim-tree.renderer"
32
local Iterator = require "nvim-tree.iterators.node-iterator"
43
local notify = require "nvim-tree.notify"
54
local lib = require "nvim-tree.lib"
@@ -65,11 +64,14 @@ end
6564

6665
---@param base_node table
6766
function M.fn(base_node)
68-
local node = base_node.nodes and base_node or core.get_explorer()
67+
local explorer = core.get_explorer()
68+
local node = base_node.nodes and base_node or explorer
6969
if gen_iterator()(node) then
7070
notify.warn("expansion iteration was halted after " .. M.MAX_FOLDER_DISCOVERY .. " discovered folders")
7171
end
72-
renderer.draw()
72+
if explorer then
73+
explorer.renderer:draw()
74+
end
7375
end
7476

7577
function M.setup(opts)

lua/nvim-tree/core.lua

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
local events = require "nvim-tree.events"
2-
local explorer = require "nvim-tree.explorer"
32
local view = require "nvim-tree.view"
43
local log = require "nvim-tree.log"
54

@@ -16,7 +15,7 @@ function M.init(foldername)
1615
if TreeExplorer then
1716
TreeExplorer:destroy()
1817
end
19-
TreeExplorer = explorer:new(foldername)
18+
TreeExplorer = require("nvim-tree.explorer"):new(foldername)
2019
if not first_init_done then
2120
events._dispatch_ready()
2221
first_init_done = true

lua/nvim-tree/diagnostics.lua

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
local core = require "nvim-tree.core"
12
local utils = require "nvim-tree.utils"
23
local view = require "nvim-tree.view"
34
local log = require "nvim-tree.log"
@@ -165,7 +166,10 @@ function M.update()
165166
end
166167
log.profile_end(profile)
167168
if view.is_buf_valid(view.get_bufnr()) then
168-
require("nvim-tree.renderer").draw()
169+
local explorer = core.get_explorer()
170+
if explorer then
171+
explorer.renderer:draw()
172+
end
169173
end
170174
end)
171175
end

lua/nvim-tree/explorer/init.lua

+13-13
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ local builders = require "nvim-tree.explorer.node-builders"
22
local git = require "nvim-tree.git"
33
local log = require "nvim-tree.log"
44
local notify = require "nvim-tree.notify"
5-
local renderer = {} -- circular dependency, will become a member
65
local utils = require "nvim-tree.utils"
76
local view = require "nvim-tree.view"
87
local watch = require "nvim-tree.explorer.watch"
@@ -13,19 +12,23 @@ local NodeIterator = require "nvim-tree.iterators.node-iterator"
1312
local Watcher = require "nvim-tree.watcher"
1413

1514
local Filters = require "nvim-tree.explorer.filters"
16-
local Marks = {} -- circular dependencies
15+
local Marks = require "nvim-tree.marks"
1716
local LiveFilter = require "nvim-tree.explorer.live-filter"
1817
local Sorters = require "nvim-tree.explorer.sorters"
19-
local Clipboard = {} -- circular dependencies
18+
local Clipboard = require "nvim-tree.actions.fs.clipboard"
19+
local Renderer = require "nvim-tree.renderer"
2020

2121
local FILTER_REASON = require("nvim-tree.enum").FILTER_REASON
2222

2323
local config
2424

2525
---@class Explorer
26+
---@field opts table user options
2627
---@field absolute_path string
2728
---@field nodes Node[]
2829
---@field open boolean
30+
---@field watcher Watcher|nil
31+
---@field renderer Renderer
2932
---@field filters Filters
3033
---@field live_filter LiveFilter
3134
---@field sorters Sorter
@@ -48,17 +51,19 @@ function Explorer:new(path)
4851
return
4952
end
5053

51-
---@class Explorer
52-
local o = setmetatable({
54+
local o = {
55+
opts = config,
5356
absolute_path = path,
5457
nodes = {},
5558
open = true,
5659
sorters = Sorters:new(config),
57-
}, Explorer)
60+
}
61+
5862
setmetatable(o, self)
5963
self.__index = self
6064

6165
o.watcher = watch.create_watcher(o)
66+
o.renderer = Renderer:new(config, o)
6267
o.filters = Filters:new(config, o)
6368
o.live_filter = LiveFilter:new(config, o)
6469
o.marks = Marks:new(config, o)
@@ -454,7 +459,7 @@ function Explorer:reload_explorer()
454459
local projects = git.reload()
455460
self:refresh_nodes(projects)
456461
if view.is_visible() then
457-
renderer.draw()
462+
self.renderer:draw()
458463
end
459464
event_running = false
460465
end
@@ -467,19 +472,14 @@ function Explorer:reload_git()
467472

468473
local projects = git.reload()
469474
explorer_node.reload_node_status(self, projects)
470-
renderer.draw()
475+
self.renderer:draw()
471476
event_running = false
472477
end
473478

474479
function Explorer.setup(opts)
475480
config = opts
476481
require("nvim-tree.explorer.node").setup(opts)
477482
require("nvim-tree.explorer.watch").setup(opts)
478-
479-
renderer = require "nvim-tree.renderer"
480-
481-
Marks = require "nvim-tree.marks"
482-
Clipboard = require "nvim-tree.actions.fs.clipboard"
483483
end
484484

485485
return Explorer

lua/nvim-tree/explorer/live-filter.lua

+3-7
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ function LiveFilter:new(opts, explorer)
2323
return o
2424
end
2525

26-
local function redraw()
27-
require("nvim-tree.renderer").draw()
28-
end
29-
3026
---@param node_ Node|nil
3127
local function reset_filter(self, node_)
3228
node_ = node_ or self.explorer
@@ -129,7 +125,7 @@ local function record_char(self)
129125
vim.schedule(function()
130126
self.filter = vim.api.nvim_buf_get_lines(overlay_bufnr, 0, -1, false)[1]
131127
self:apply_filter()
132-
redraw()
128+
self.explorer.renderer:draw()
133129
end)
134130
end
135131

@@ -199,7 +195,7 @@ function LiveFilter:start_filtering()
199195
view.View.live_filter.prev_focused_node = require("nvim-tree.lib").get_node_at_cursor()
200196
self.filter = self.filter or ""
201197

202-
redraw()
198+
self.explorer.renderer:draw()
203199
local row = require("nvim-tree.core").get_nodes_starting_line() - 1
204200
local col = #self.prefix > 0 and #self.prefix - 1 or 1
205201
view.set_cursor { row, col }
@@ -215,7 +211,7 @@ function LiveFilter:clear_filter()
215211

216212
self.filter = nil
217213
reset_filter(self)
218-
redraw()
214+
self.explorer.renderer:draw()
219215

220216
if node then
221217
utils.focus_file(node.absolute_path)

0 commit comments

Comments
 (0)