Skip to content

Commit d8a82bd

Browse files
committed
refactor(#3253): add api.config, tidy new config module
1 parent 58387dd commit d8a82bd

File tree

9 files changed

+159
-85
lines changed

9 files changed

+159
-85
lines changed

doc/nvim-tree-lua.txt

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

23842384

2385+
==============================================================================
2386+
API: config *nvim-tree-api-config*
2387+
2388+
default() *nvim_tree.api.config.default()*
2389+
Default nvim-tree config.
2390+
2391+
Return: ~
2392+
(`nvim_tree.config`) immutable deep clone
2393+
2394+
global() *nvim_tree.api.config.global()*
2395+
Global current nvim-tree config.
2396+
2397+
Return: ~
2398+
(`nvim_tree.config`) immutable deep clone
2399+
2400+
user() *nvim_tree.api.config.user()*
2401+
Reference to config passed to |nvim-tree-setup|
2402+
2403+
Return: ~
2404+
(`nvim_tree.config?`) nil when no config passed to setup
2405+
2406+
23852407
==============================================================================
23862408
API: events *nvim-tree-api-events*
23872409

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
@@ -77,6 +77,7 @@
7777
local api = {
7878
appearance = require("nvim-tree._meta.api.appearance"),
7979
commands = require("nvim-tree._meta.api.commands"),
80+
config = require("nvim-tree._meta.api.config"),
8081
events = require("nvim-tree._meta.api.events"),
8182
filter = require("nvim-tree._meta.api.filter"),
8283
fs = require("nvim-tree._meta.api.fs"),
@@ -88,7 +89,6 @@ local api = {
8889

8990
Decorator = require("nvim-tree._meta.api.decorator"),
9091

91-
config = require("nvim-tree._meta.api.deprecated").config, ---@deprecated
9292
decorator = require("nvim-tree._meta.api.deprecated").decorator, ---@deprecated
9393
diagnostics = require("nvim-tree._meta.api.deprecated").diagnostics, ---@deprecated
9494
live_filter = require("nvim-tree._meta.api.deprecated").live_filter, ---@deprecated

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
local legacy = require("nvim-tree.legacy")
1010

1111
local actions = require("nvim-tree.actions")
12+
local config = require("nvim-tree.config")
1213
local help = require("nvim-tree.help")
1314
local keymap = require("nvim-tree.keymap")
1415
local utils = require("nvim-tree.utils")
@@ -257,6 +258,9 @@ function M.hydrate(api)
257258

258259
api.map.keymap.current = keymap.get_keymap
259260

261+
api.config.global = config.g_clone
262+
api.config.user = config.u_clone
263+
260264
-- (Re)hydrate any legacy by mapping to concrete set above
261265
legacy.map_api(api)
262266
end

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ function M.hydrate(api)
4949

5050
-- lazy functions
5151
api.appearance.hi_test = function() require("nvim-tree.appearance.hi-test")() end
52+
api.config.default = function() return require("nvim-tree.config").d_clone() end
5253

5354
-- classes
5455
api.Decorator = Decorator:extend()

0 commit comments

Comments
 (0)