* 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:
committed by
GitHub
parent
45a93d9979
commit
03ae60313b
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user