refactor(#2826): instrument View:get_bufnr
This commit is contained in:
parent
3b792d4015
commit
223693b4d4
@ -185,7 +185,7 @@ function M.update_coc()
|
|||||||
|
|
||||||
local bufnr
|
local bufnr
|
||||||
if explorer then
|
if explorer then
|
||||||
bufnr = explorer.view:get_bufnr()
|
bufnr = explorer.view:get_bufnr("diagnostics.update_coc")
|
||||||
end
|
end
|
||||||
|
|
||||||
local should_draw = bufnr and vim.api.nvim_buf_is_valid(bufnr) and vim.api.nvim_buf_is_loaded(bufnr)
|
local should_draw = bufnr and vim.api.nvim_buf_is_valid(bufnr) and vim.api.nvim_buf_is_loaded(bufnr)
|
||||||
|
|||||||
@ -31,6 +31,7 @@ local DEFAULT_PADDING = 1
|
|||||||
---@field private width (fun():integer)|integer|string
|
---@field private width (fun():integer)|integer|string
|
||||||
---@field private max_width integer
|
---@field private max_width integer
|
||||||
---@field private padding integer
|
---@field private padding integer
|
||||||
|
---@field private bufnr_by_tab table<integer, integer> for diagnostics during multi instance
|
||||||
local View = Class:extend()
|
local View = Class:extend()
|
||||||
|
|
||||||
---@class View
|
---@class View
|
||||||
@ -53,6 +54,7 @@ function View:new(args)
|
|||||||
self.preserve_window_proportions = self.explorer.opts.view.preserve_window_proportions
|
self.preserve_window_proportions = self.explorer.opts.view.preserve_window_proportions
|
||||||
self.side = (self.explorer.opts.view.side == "right") and "right" or "left"
|
self.side = (self.explorer.opts.view.side == "right") and "right" or "left"
|
||||||
self.live_filter = { prev_focused_node = nil, }
|
self.live_filter = { prev_focused_node = nil, }
|
||||||
|
self.bufnr_by_tab = {}
|
||||||
|
|
||||||
self.winopts = {
|
self.winopts = {
|
||||||
relativenumber = self.explorer.opts.view.relativenumber,
|
relativenumber = self.explorer.opts.view.relativenumber,
|
||||||
@ -127,16 +129,17 @@ function View:create_buffer(bufnr)
|
|||||||
|
|
||||||
local tab = vim.api.nvim_get_current_tabpage()
|
local tab = vim.api.nvim_get_current_tabpage()
|
||||||
globals.BUFNR_PER_TAB[tab] = bufnr or vim.api.nvim_create_buf(false, false)
|
globals.BUFNR_PER_TAB[tab] = bufnr or vim.api.nvim_create_buf(false, false)
|
||||||
vim.api.nvim_buf_set_name(self:get_bufnr(), "NvimTree_" .. tab)
|
self.bufnr_by_tab[tab] = globals.BUFNR_PER_TAB[tab]
|
||||||
|
vim.api.nvim_buf_set_name(self:get_bufnr("View:create_buffer1"), "NvimTree_" .. tab)
|
||||||
|
|
||||||
bufnr = self:get_bufnr()
|
bufnr = self:get_bufnr("View:create_buffer2")
|
||||||
for _, option in ipairs(BUFFER_OPTIONS) do
|
for _, option in ipairs(BUFFER_OPTIONS) do
|
||||||
vim.api.nvim_set_option_value(option.name, option.value, { buf = bufnr })
|
vim.api.nvim_set_option_value(option.name, option.value, { buf = bufnr })
|
||||||
end
|
end
|
||||||
|
|
||||||
require("nvim-tree.keymap").on_attach(self:get_bufnr())
|
require("nvim-tree.keymap").on_attach(self:get_bufnr("View:create_buffer3"))
|
||||||
|
|
||||||
events._dispatch_tree_attached_post(self:get_bufnr())
|
events._dispatch_tree_attached_post(self:get_bufnr("View:create_buffer4"))
|
||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
@ -171,7 +174,7 @@ local move_tbl = {
|
|||||||
-- setup_tabpage sets up the initial state of a tab
|
-- setup_tabpage sets up the initial state of a tab
|
||||||
---@private
|
---@private
|
||||||
---@param tabpage integer
|
---@param tabpage integer
|
||||||
---@param callsite string?
|
---@param callsite string
|
||||||
function View:setup_tabpage(tabpage, callsite)
|
function View:setup_tabpage(tabpage, callsite)
|
||||||
local winnr = vim.api.nvim_get_current_win()
|
local winnr = vim.api.nvim_get_current_win()
|
||||||
|
|
||||||
@ -188,7 +191,7 @@ end
|
|||||||
|
|
||||||
---@private
|
---@private
|
||||||
function View:set_window_options_and_buffer()
|
function View:set_window_options_and_buffer()
|
||||||
pcall(vim.api.nvim_command, "buffer " .. self:get_bufnr())
|
pcall(vim.api.nvim_command, "buffer " .. self:get_bufnr("View:set_window_options_and_buffer"))
|
||||||
|
|
||||||
if vim.fn.has("nvim-0.10") == 1 then
|
if vim.fn.has("nvim-0.10") == 1 then
|
||||||
local eventignore = vim.api.nvim_get_option_value("eventignore", {})
|
local eventignore = vim.api.nvim_get_option_value("eventignore", {})
|
||||||
@ -348,7 +351,7 @@ end
|
|||||||
---@private
|
---@private
|
||||||
function View:grow()
|
function View:grow()
|
||||||
local starts_at = self:is_root_folder_visible(require("nvim-tree.core").get_cwd()) and 1 or 0
|
local starts_at = self:is_root_folder_visible(require("nvim-tree.core").get_cwd()) and 1 or 0
|
||||||
local lines = vim.api.nvim_buf_get_lines(self:get_bufnr(), starts_at, -1, false)
|
local lines = vim.api.nvim_buf_get_lines(self:get_bufnr("View:grow1"), starts_at, -1, false)
|
||||||
-- number of columns of right-padding to indicate end of path
|
-- number of columns of right-padding to indicate end of path
|
||||||
local padding = self:get_size(self.padding)
|
local padding = self:get_size(self.padding)
|
||||||
|
|
||||||
@ -372,7 +375,7 @@ function View:grow()
|
|||||||
for line_nr, l in pairs(lines) do
|
for line_nr, l in pairs(lines) do
|
||||||
local count = vim.fn.strchars(l)
|
local count = vim.fn.strchars(l)
|
||||||
-- also add space for right-aligned icons
|
-- also add space for right-aligned icons
|
||||||
local extmarks = vim.api.nvim_buf_get_extmarks(self:get_bufnr(), ns_id, { line_nr, 0 }, { line_nr, -1 }, { details = true })
|
local extmarks = vim.api.nvim_buf_get_extmarks(self:get_bufnr("View:grow2"), ns_id, { line_nr, 0 }, { line_nr, -1 }, { details = true })
|
||||||
count = count + utils.extmarks_length(extmarks)
|
count = count + utils.extmarks_length(extmarks)
|
||||||
if resizing_width < count then
|
if resizing_width < count then
|
||||||
resizing_width = count
|
resizing_width = count
|
||||||
@ -449,7 +452,7 @@ function View:set_current_win(callsite)
|
|||||||
local current_win = vim.api.nvim_get_current_win()
|
local current_win = vim.api.nvim_get_current_win()
|
||||||
|
|
||||||
if self.explorer.opts.experimental.multi_instance_debug then
|
if self.explorer.opts.experimental.multi_instance_debug then
|
||||||
log.line("dev", "View:set_current_win(%-20.20s) t%d w%3d->w%3d %s",
|
log.line("dev", "View:set_current_win(%-20.20s) t%d w%3s->w%3s %s",
|
||||||
callsite,
|
callsite,
|
||||||
current_tab,
|
current_tab,
|
||||||
globals.TABPAGES[current_tab].winnr,
|
globals.TABPAGES[current_tab].winnr,
|
||||||
@ -483,6 +486,7 @@ end
|
|||||||
function View:abandon_current_window()
|
function View:abandon_current_window()
|
||||||
local tab = vim.api.nvim_get_current_tabpage()
|
local tab = vim.api.nvim_get_current_tabpage()
|
||||||
globals.BUFNR_PER_TAB[tab] = nil
|
globals.BUFNR_PER_TAB[tab] = nil
|
||||||
|
self.bufnr_by_tab[tab] = nil
|
||||||
if globals.TABPAGES[tab] then
|
if globals.TABPAGES[tab] then
|
||||||
globals.TABPAGES[tab].winnr = nil
|
globals.TABPAGES[tab].winnr = nil
|
||||||
end
|
end
|
||||||
@ -491,6 +495,7 @@ end
|
|||||||
function View:abandon_all_windows()
|
function View:abandon_all_windows()
|
||||||
for tab, _ in pairs(vim.api.nvim_list_tabpages()) do
|
for tab, _ in pairs(vim.api.nvim_list_tabpages()) do
|
||||||
globals.BUFNR_PER_TAB[tab] = nil
|
globals.BUFNR_PER_TAB[tab] = nil
|
||||||
|
self.bufnr_by_tab[tab] = nil
|
||||||
if globals.TABPAGES[tab] then
|
if globals.TABPAGES[tab] then
|
||||||
globals.TABPAGES[tab].winnr = nil
|
globals.TABPAGES[tab].winnr = nil
|
||||||
end
|
end
|
||||||
@ -568,7 +573,7 @@ end
|
|||||||
|
|
||||||
--- Returns the window number for nvim-tree within the tabpage specified
|
--- Returns the window number for nvim-tree within the tabpage specified
|
||||||
---@param tabpage number|nil (optional) the number of the chosen tabpage. Defaults to current tabpage.
|
---@param tabpage number|nil (optional) the number of the chosen tabpage. Defaults to current tabpage.
|
||||||
---@param callsite string? for logging purposes
|
---@param callsite string for logging purposes
|
||||||
---@return number|nil
|
---@return number|nil
|
||||||
function View:get_winnr(tabpage, callsite)
|
function View:get_winnr(tabpage, callsite)
|
||||||
if self.explorer.opts.experimental.multi_instance_debug then
|
if self.explorer.opts.experimental.multi_instance_debug then
|
||||||
@ -603,14 +608,24 @@ function View:get_winnr(tabpage, callsite)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--- Returns the current nvim tree bufnr
|
--- Returns the current nvim tree bufnr
|
||||||
|
---@param callsite string
|
||||||
---@return number
|
---@return number
|
||||||
function View:get_bufnr()
|
function View:get_bufnr(callsite)
|
||||||
return globals.BUFNR_PER_TAB[vim.api.nvim_get_current_tabpage()]
|
local tab = vim.api.nvim_get_current_tabpage()
|
||||||
|
if self.explorer.opts.experimental.multi_instance_debug then
|
||||||
|
log.line("dev", "View:get_bufnr(%-20.20s) t%d global b%s member b%s %s",
|
||||||
|
callsite,
|
||||||
|
tab,
|
||||||
|
globals.BUFNR_PER_TAB[tab],
|
||||||
|
self.bufnr_by_tab[tab],
|
||||||
|
(globals.BUFNR_PER_TAB[tab] == self.bufnr_by_tab[tab]) and "" or "MISMATCH")
|
||||||
|
end
|
||||||
|
return globals.BUFNR_PER_TAB[tab]
|
||||||
end
|
end
|
||||||
|
|
||||||
function View:prevent_buffer_override()
|
function View:prevent_buffer_override()
|
||||||
local view_winnr = self:get_winnr(nil, "View:prevent_buffer_override")
|
local view_winnr = self:get_winnr(nil, "View:prevent_buffer_override")
|
||||||
local view_bufnr = self:get_bufnr()
|
local view_bufnr = self:get_bufnr("View:prevent_buffer_override")
|
||||||
|
|
||||||
-- need to schedule to let the new buffer populate the window
|
-- need to schedule to let the new buffer populate the window
|
||||||
-- because this event needs to be run on bufWipeout.
|
-- because this event needs to be run on bufWipeout.
|
||||||
|
|||||||
@ -101,7 +101,7 @@ function Renderer:render_hl(bufnr, hl_range_args)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Renderer:draw()
|
function Renderer:draw()
|
||||||
local bufnr = self.explorer.view:get_bufnr()
|
local bufnr = self.explorer.view:get_bufnr("Renderer:draw")
|
||||||
if 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
|
return
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user