Skip to content

Commit ef127f2

Browse files
committed
refactor(#3253): add api.config, tidy new config module
1 parent 59b2952 commit ef127f2

9 files changed

Lines changed: 147 additions & 84 deletions

File tree

doc/nvim-tree-lua.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2460,6 +2460,28 @@ get() *nvim_tree.api.commands.get()*
24602460
{opts} (`vim.api.keyset.user_command`) |command-attributes|
24612461

24622462

2463+
==============================================================================
2464+
API: config *nvim-tree-api-config*
2465+
2466+
default() *nvim_tree.api.config.default()*
2467+
Default nvim-tree config.
2468+
2469+
Return: ~
2470+
(`nvim_tree.config`) immutable deep clone
2471+
2472+
global() *nvim_tree.api.config.global()*
2473+
Global current nvim-tree config.
2474+
2475+
Return: ~
2476+
(`nvim_tree.config`) immutable deep clone
2477+
2478+
user() *nvim_tree.api.config.user()*
2479+
Reference to config passed to |nvim-tree-setup|
2480+
2481+
Return: ~
2482+
(`nvim_tree.config?`) nil when no config passed to setup
2483+
2484+
24632485
==============================================================================
24642486
API: events *nvim-tree-api-events*
24652487

lua/nvim-tree.lua

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function M.change_root(path, bufnr)
3636
ft = vim.api.nvim_buf_get_option(bufnr, "filetype") or "" ---@diagnostic disable-line: deprecated
3737
end
3838

39-
for _, value in pairs(config.current().update_focused_file.update_root.ignore_list) do
39+
for _, value in pairs(config.g.update_focused_file.update_root.ignore_list) do
4040
if utils.str_find(path, value) or utils.str_find(ft, value) then
4141
return
4242
end
@@ -68,12 +68,12 @@ function M.change_root(path, bufnr)
6868
end
6969

7070
-- otherwise test M.init_root
71-
if config.current().prefer_startup_root and utils.path_relative(path, M.init_root) ~= path then
71+
if config.g.prefer_startup_root and utils.path_relative(path, M.init_root) ~= path then
7272
explorer_fn("change_dir", M.init_root)
7373
return
7474
end
7575
-- otherwise root_dirs
76-
for _, dir in pairs(config.current().root_dirs) do
76+
for _, dir in pairs(config.g.root_dirs) do
7777
dir = vim.fn.fnamemodify(dir, ":p")
7878
if utils.path_relative(path, dir) ~= path then
7979
explorer_fn("change_dir", dir)
@@ -95,7 +95,7 @@ function M.tab_enter()
9595
ft = vim.api.nvim_buf_get_option(0, "ft") ---@diagnostic disable-line: deprecated
9696
end
9797

98-
for _, filter in ipairs(config.current().tab.sync.ignore) do
98+
for _, filter in ipairs(config.g.tab.sync.ignore) do
9999
if bufname:match(filter) ~= nil or ft:match(filter) ~= nil then
100100
return
101101
end
@@ -110,7 +110,7 @@ function M.tab_enter()
110110
end
111111

112112
function M.open_on_directory()
113-
local should_proceed = config.current().hijack_directories.auto_open or view.is_visible()
113+
local should_proceed = config.g.hijack_directories.auto_open or view.is_visible()
114114
if not should_proceed then
115115
return
116116
end
@@ -131,11 +131,11 @@ function M.open_on_directory()
131131
end
132132

133133
local function manage_netrw()
134-
if config.current().hijack_netrw then
134+
if config.g.hijack_netrw then
135135
vim.cmd("silent! autocmd! FileExplorer *")
136136
vim.cmd("autocmd VimEnter * ++once silent! autocmd! FileExplorer *")
137137
end
138-
if config.current().disable_netrw then
138+
if config.g.disable_netrw then
139139
vim.g.loaded_netrw = 1
140140
vim.g.loaded_netrwPlugin = 1
141141
end
@@ -147,7 +147,7 @@ function M.change_dir(name)
147147
explorer_fn("change_dir", name)
148148
end
149149

150-
if config.current().update_focused_file.update_root.enable then
150+
if config.g.update_focused_file.update_root.enable then
151151
actions.tree.find_file.fn()
152152
end
153153
end
@@ -166,43 +166,43 @@ local function setup_autocommands()
166166
if not utils.is_nvim_tree_buf(0) then
167167
return
168168
end
169-
if config.current().actions.open_file.eject then
169+
if config.g.actions.open_file.eject then
170170
view._prevent_buffer_override()
171171
else
172172
view.abandon_current_window()
173173
end
174174
end,
175175
})
176176

177-
if config.current().tab.sync.open then
177+
if config.g.tab.sync.open then
178178
create_nvim_tree_autocmd("TabEnter", { callback = vim.schedule_wrap(M.tab_enter) })
179179
end
180-
if config.current().sync_root_with_cwd then
180+
if config.g.sync_root_with_cwd then
181181
create_nvim_tree_autocmd("DirChanged", {
182182
callback = function()
183183
M.change_dir(vim.loop.cwd())
184184
end,
185185
})
186186
end
187-
if config.current().update_focused_file.enable then
187+
if config.g.update_focused_file.enable then
188188
create_nvim_tree_autocmd("BufEnter", {
189189
callback = function(event)
190-
local exclude = config.current().update_focused_file.exclude
190+
local exclude = config.g.update_focused_file.exclude
191191
if type(exclude) == "function" and exclude(event) then
192192
return
193193
end
194-
utils.debounce("BufEnter:find_file", config.current().view.debounce_delay, function()
194+
utils.debounce("BufEnter:find_file", config.g.view.debounce_delay, function()
195195
actions.tree.find_file.fn()
196196
end)
197197
end,
198198
})
199199
end
200200

201-
if config.current().hijack_directories.enable and (config.current().disable_netrw or config.current().hijack_netrw) then
201+
if config.g.hijack_directories.enable and (config.g.disable_netrw or config.g.hijack_netrw) then
202202
create_nvim_tree_autocmd({ "BufEnter", "BufNewFile" }, { callback = M.open_on_directory, nested = true })
203203
end
204204

205-
if config.current().view.centralize_selection then
205+
if config.g.view.centralize_selection then
206206
create_nvim_tree_autocmd("BufEnter", {
207207
pattern = "NvimTree_*",
208208
callback = function()
@@ -219,7 +219,7 @@ local function setup_autocommands()
219219
})
220220
end
221221

222-
if config.current().diagnostics.enable then
222+
if config.g.diagnostics.enable then
223223
create_nvim_tree_autocmd("DiagnosticChanged", {
224224
callback = function(ev)
225225
log.line("diagnostics", "DiagnosticChanged")
@@ -235,7 +235,7 @@ local function setup_autocommands()
235235
})
236236
end
237237

238-
if config.current().view.float.enable and config.current().view.float.quit_on_focus_loss then
238+
if config.g.view.float.enable and config.g.view.float.quit_on_focus_loss then
239239
create_nvim_tree_autocmd("WinLeave", {
240240
pattern = "NvimTree_*",
241241
callback = function()
@@ -278,41 +278,41 @@ end
278278
-- TODO #3253 ensure that we can call setup twice
279279

280280

281-
---@param conf? nvim_tree.config
282-
function M.setup(conf)
281+
---@param config_user? nvim_tree.config user supplied subset of config
282+
function M.setup(config_user)
283283
if vim.fn.has("nvim-0.9") == 0 then
284284
notify.warn("nvim-tree.lua requires Neovim 0.9 or higher")
285285
return
286286
end
287287

288288
M.init_root = vim.fn.getcwd()
289289

290-
config.setup(conf)
290+
config.setup(config_user)
291291

292292
manage_netrw()
293293

294-
require("nvim-tree.notify").setup(config.current())
295-
require("nvim-tree.log").setup(config.current())
294+
require("nvim-tree.notify").setup(config.g)
295+
require("nvim-tree.log").setup(config.g)
296296

297297
if log.enabled("config") then
298298
log.line("config", "default config + user")
299-
log.raw("config", "%s\n", vim.inspect(config.current()))
299+
log.raw("config", "%s\n", vim.inspect(config.g))
300300
end
301301

302-
require("nvim-tree.actions").setup(config.current())
303-
require("nvim-tree.keymap").setup(config.current())
302+
require("nvim-tree.actions").setup(config.g)
303+
require("nvim-tree.keymap").setup(config.g)
304304
require("nvim-tree.appearance").setup()
305-
require("nvim-tree.diagnostics").setup(config.current())
306-
require("nvim-tree.explorer"):setup(config.current())
307-
require("nvim-tree.explorer.watch").setup(config.current())
308-
require("nvim-tree.git").setup(config.current())
309-
require("nvim-tree.git.utils").setup(config.current())
310-
require("nvim-tree.view").setup(config.current())
311-
require("nvim-tree.lib").setup(config.current())
312-
require("nvim-tree.renderer.components").setup(config.current())
313-
require("nvim-tree.buffers").setup(config.current())
314-
require("nvim-tree.help").setup(config.current())
315-
require("nvim-tree.watcher").setup(config.current())
305+
require("nvim-tree.diagnostics").setup(config.g)
306+
require("nvim-tree.explorer"):setup(config.g)
307+
require("nvim-tree.explorer.watch").setup(config.g)
308+
require("nvim-tree.git").setup(config.g)
309+
require("nvim-tree.git.utils").setup(config.g)
310+
require("nvim-tree.view").setup(config.g)
311+
require("nvim-tree.lib").setup(config.g)
312+
require("nvim-tree.renderer.components").setup(config.g)
313+
require("nvim-tree.buffers").setup(config.g)
314+
require("nvim-tree.help").setup(config.g)
315+
require("nvim-tree.watcher").setup(config.g)
316316

317317
setup_autocommands()
318318

lua/nvim-tree/_meta/api/config.lua

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---@meta
2+
local nvim_tree = { api = { config = {} } }
3+
4+
---
5+
---Default nvim-tree config.
6+
---
7+
---@return nvim_tree.config immutable deep clone
8+
function nvim_tree.api.config.default() end
9+
10+
---
11+
---Global current nvim-tree config.
12+
---
13+
---@return nvim_tree.config immutable deep clone
14+
function nvim_tree.api.config.global() end
15+
16+
---
17+
---Reference to config passed to [nvim-tree-setup]
18+
---
19+
---@return nvim_tree.config? nil when no config passed to setup
20+
function nvim_tree.api.config.user() end
21+
22+
nvim_tree.api.config.mappings = {}
23+
24+
---@deprecated use `nvim_tree.api.map.keymap.current()`
25+
function nvim_tree.api.config.mappings.get_keymap() end
26+
27+
---@deprecated use `nvim_tree.api.map.keymap.default()`
28+
function nvim_tree.api.config.mappings.get_keymap_default() end
29+
30+
---@deprecated use `nvim_tree.api.map.on_attach.default()`
31+
function nvim_tree.api.config.mappings.default_on_attach(bufnr) end
32+
33+
return nvim_tree.api.config

lua/nvim-tree/_meta/api/deprecated.lua

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,6 @@
44

55
local nvim_tree = { api = {} }
66

7-
nvim_tree.api.config = {}
8-
9-
nvim_tree.api.config.mappings = {}
10-
11-
---@deprecated use `nvim_tree.api.map.keymap.current()`
12-
function nvim_tree.api.config.mappings.get_keymap() end
13-
14-
---@deprecated use `nvim_tree.api.map.keymap.default()`
15-
function nvim_tree.api.config.mappings.get_keymap_default() end
16-
17-
---@deprecated use `nvim_tree.api.map.on_attach.default()`
18-
function nvim_tree.api.config.mappings.default_on_attach(bufnr) end
19-
207
nvim_tree.api.live_filter = {}
218

229
---@deprecated use `nvim_tree.api.filter.live.start()`

lua/nvim-tree/api.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ local deprecated = require("nvim-tree._meta.api.deprecated")
7979
---@nodoc
8080
local api = {
8181
commands = require("nvim-tree._meta.api.commands"),
82+
config = require("nvim-tree._meta.api.config"),
8283
events = require("nvim-tree._meta.api.events"),
8384
filter = require("nvim-tree._meta.api.filter"),
8485
fs = require("nvim-tree._meta.api.fs"),
@@ -89,7 +90,6 @@ local api = {
8990
node = require("nvim-tree._meta.api.node"),
9091
tree = require("nvim-tree._meta.api.tree"),
9192

92-
config = deprecated.config, ---@deprecated
9393
diagnostics = deprecated.diagnostics, ---@deprecated
9494
live_filter = deprecated.live_filter, ---@deprecated
9595
}

lua/nvim-tree/api/impl/post.lua

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
---until after setup has been called, so that the user may require API cheaply.
88

99
local actions = require("nvim-tree.actions")
10+
local config = require("nvim-tree.config")
1011
local help = require("nvim-tree.help")
1112
local keymap = require("nvim-tree.keymap")
1213
local utils = require("nvim-tree.utils")
@@ -252,6 +253,9 @@ local function hydrate_post(api)
252253
api.marks.navigate.select = wrap_explorer_member("marks", "navigate_select")
253254

254255
api.map.keymap.current = keymap.get_keymap
256+
257+
api.config.global = config.g_clone
258+
api.config.user = config.u_clone
255259
end
256260

257261
---Re-hydrate api

lua/nvim-tree/api/impl/pre.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ local function hydrate_pre(api)
4545
-- May be lazily requried on execution
4646
--
4747
api.health.hi_test = function() require("nvim-tree.appearance.hi-test")() end
48+
api.config.default = function() return require("nvim-tree.config").d_clone() end
4849

4950

5051
--

0 commit comments

Comments
 (0)