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

@@ -1,14 +1,10 @@
local core = require "nvim-tree.core"
local log = require "nvim-tree.log"
local view = require "nvim-tree.view"
local events = require "nvim-tree.events"
local _padding = require "nvim-tree.renderer.components.padding"
local icon_component = require "nvim-tree.renderer.components.icons"
local full_name = require "nvim-tree.renderer.components.full-name"
local Builder = require "nvim-tree.renderer.builder"
local M = {}
local Builder = require "nvim-tree.renderer.builder"
local SIGN_GROUP = "NvimTreeRendererSigns"
@@ -16,11 +12,36 @@ local namespace_highlights_id = vim.api.nvim_create_namespace "NvimTreeHighlight
local namespace_extmarks_id = vim.api.nvim_create_namespace "NvimTreeExtmarks"
local namespace_virtual_lines_id = vim.api.nvim_create_namespace "NvimTreeVirtualLines"
---@class (exact) Renderer
---@field private __index? table
---@field private opts table user options
---@field private explorer Explorer
---@field private builder Builder
local Renderer = {}
---@param opts table user options
---@param explorer Explorer
---@return Renderer
function Renderer:new(opts, explorer)
---@type Renderer
local o = {
opts = opts,
explorer = explorer,
builder = Builder:new(opts, explorer),
}
setmetatable(o, self)
self.__index = self
return o
end
---@private
---@param bufnr number
---@param lines string[]
---@param hl_args AddHighlightArgs[]
---@param signs string[]
local function _draw(bufnr, lines, hl_args, signs, extmarks, virtual_lines)
function Renderer:_draw(bufnr, lines, hl_args, signs, extmarks, virtual_lines)
if vim.fn.has "nvim-0.10" == 1 then
vim.api.nvim_set_option_value("modifiable", true, { buf = bufnr })
else
@@ -28,7 +49,7 @@ local function _draw(bufnr, lines, hl_args, signs, extmarks, virtual_lines)
end
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
M.render_hl(bufnr, hl_args)
self:render_hl(bufnr, hl_args)
if vim.fn.has "nvim-0.10" == 1 then
vim.api.nvim_set_option_value("modifiable", false, { buf = bufnr })
@@ -62,7 +83,8 @@ local function _draw(bufnr, lines, hl_args, signs, extmarks, virtual_lines)
end
end
function M.render_hl(bufnr, hl)
---@private
function Renderer:render_hl(bufnr, hl)
if not bufnr or not vim.api.nvim_buf_is_loaded(bufnr) then
return
end
@@ -76,9 +98,9 @@ function M.render_hl(bufnr, hl)
end
end
function M.draw()
function Renderer:draw()
local bufnr = view.get_bufnr()
if not core.get_explorer() or not bufnr or not vim.api.nvim_buf_is_loaded(bufnr) then
if not bufnr or not vim.api.nvim_buf_is_loaded(bufnr) then
return
end
@@ -87,9 +109,9 @@ function M.draw()
local cursor = vim.api.nvim_win_get_cursor(view.get_winnr() or 0)
icon_component.reset_config()
local builder = Builder:new():build()
local builder = Builder:new(self.opts, self.explorer):build()
_draw(bufnr, builder.lines, builder.hl_args, builder.signs, builder.extmarks, builder.virtual_lines)
self:_draw(bufnr, builder.lines, builder.hl_args, builder.signs, builder.extmarks, builder.virtual_lines)
if cursor and #builder.lines >= cursor[1] then
vim.api.nvim_win_set_cursor(view.get_winnr() or 0, cursor)
@@ -102,14 +124,4 @@ function M.draw()
events._dispatch_on_tree_rendered(bufnr, view.get_winnr())
end
function M.setup(opts)
M.config = opts.renderer
_padding.setup(opts)
full_name.setup(opts)
icon_component.setup(opts)
Builder.setup(opts)
end
return M
return Renderer