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
This commit is contained in:
Alexander Courtis
2024-09-21 10:41:35 +10:00
committed by GitHub
parent 45a93d9979
commit 03ae60313b
28 changed files with 263 additions and 193 deletions

View File

@@ -2,7 +2,6 @@ local builders = require "nvim-tree.explorer.node-builders"
local git = require "nvim-tree.git"
local log = require "nvim-tree.log"
local notify = require "nvim-tree.notify"
local renderer = {} -- circular dependency, will become a member
local utils = require "nvim-tree.utils"
local view = require "nvim-tree.view"
local watch = require "nvim-tree.explorer.watch"
@@ -13,19 +12,23 @@ local NodeIterator = require "nvim-tree.iterators.node-iterator"
local Watcher = require "nvim-tree.watcher"
local Filters = require "nvim-tree.explorer.filters"
local Marks = {} -- circular dependencies
local Marks = require "nvim-tree.marks"
local LiveFilter = require "nvim-tree.explorer.live-filter"
local Sorters = require "nvim-tree.explorer.sorters"
local Clipboard = {} -- circular dependencies
local Clipboard = require "nvim-tree.actions.fs.clipboard"
local Renderer = require "nvim-tree.renderer"
local FILTER_REASON = require("nvim-tree.enum").FILTER_REASON
local config
---@class Explorer
---@field opts table user options
---@field absolute_path string
---@field nodes Node[]
---@field open boolean
---@field watcher Watcher|nil
---@field renderer Renderer
---@field filters Filters
---@field live_filter LiveFilter
---@field sorters Sorter
@@ -48,17 +51,19 @@ function Explorer:new(path)
return
end
---@class Explorer
local o = setmetatable({
local o = {
opts = config,
absolute_path = path,
nodes = {},
open = true,
sorters = Sorters:new(config),
}, Explorer)
}
setmetatable(o, self)
self.__index = self
o.watcher = watch.create_watcher(o)
o.renderer = Renderer:new(config, o)
o.filters = Filters:new(config, o)
o.live_filter = LiveFilter:new(config, o)
o.marks = Marks:new(config, o)
@@ -454,7 +459,7 @@ function Explorer:reload_explorer()
local projects = git.reload()
self:refresh_nodes(projects)
if view.is_visible() then
renderer.draw()
self.renderer:draw()
end
event_running = false
end
@@ -467,7 +472,7 @@ function Explorer:reload_git()
local projects = git.reload()
explorer_node.reload_node_status(self, projects)
renderer.draw()
self.renderer:draw()
event_running = false
end
@@ -475,11 +480,6 @@ function Explorer.setup(opts)
config = opts
require("nvim-tree.explorer.node").setup(opts)
require("nvim-tree.explorer.watch").setup(opts)
renderer = require "nvim-tree.renderer"
Marks = require "nvim-tree.marks"
Clipboard = require "nvim-tree.actions.fs.clipboard"
end
return Explorer

View File

@@ -23,10 +23,6 @@ function LiveFilter:new(opts, explorer)
return o
end
local function redraw()
require("nvim-tree.renderer").draw()
end
---@param node_ Node|nil
local function reset_filter(self, node_)
node_ = node_ or self.explorer
@@ -129,7 +125,7 @@ local function record_char(self)
vim.schedule(function()
self.filter = vim.api.nvim_buf_get_lines(overlay_bufnr, 0, -1, false)[1]
self:apply_filter()
redraw()
self.explorer.renderer:draw()
end)
end
@@ -199,7 +195,7 @@ function LiveFilter:start_filtering()
view.View.live_filter.prev_focused_node = require("nvim-tree.lib").get_node_at_cursor()
self.filter = self.filter or ""
redraw()
self.explorer.renderer:draw()
local row = require("nvim-tree.core").get_nodes_starting_line() - 1
local col = #self.prefix > 0 and #self.prefix - 1 or 1
view.set_cursor { row, col }
@@ -215,7 +211,7 @@ function LiveFilter:clear_filter()
self.filter = nil
reset_filter(self)
redraw()
self.explorer.renderer:draw()
if node then
utils.focus_file(node.absolute_path)

View File

@@ -79,7 +79,7 @@ function M.create_watcher(node)
local explorer = require("nvim-tree.core").get_explorer()
if explorer then
explorer:refresh_node(node, function()
require("nvim-tree.renderer").draw()
explorer.renderer:draw()
end)
end
end)