1
- local utils = require (" nvim-tree.utils" )
2
1
local notify = require (" nvim-tree.notify" )
3
2
4
3
local M = {}
5
4
5
+ --- Create empty sub-tables if not present
6
+ --- @param tbl table to create empty inside of
7
+ --- @param path string dot separated string of sub-tables
8
+ --- @return table deepest sub-table
9
+ local function create (tbl , path )
10
+ local t = tbl
11
+ for s in string.gmatch (path , " ([^%.]+)%.*" ) do
12
+ if t [s ] == nil then
13
+ t [s ] = {}
14
+ end
15
+ t = t [s ]
16
+ end
17
+
18
+ return t
19
+ end
20
+
21
+ --- Move a value from src to dst if value is nil on dst.
22
+ --- Remove value from src
23
+ --- @param src table to copy from
24
+ --- @param src_path string dot separated string of sub-tables
25
+ --- @param src_pos string value pos
26
+ --- @param dst table to copy to
27
+ --- @param dst_path string dot separated string of sub-tables , created when missing
28
+ --- @param dst_pos string value pos
29
+ --- @param remove boolean
30
+ local function move (src , src_path , src_pos , dst , dst_path , dst_pos , remove )
31
+ for pos in string.gmatch (src_path , " ([^%.]+)%.*" ) do
32
+ if src [pos ] and type (src [pos ]) == " table" then
33
+ src = src [pos ]
34
+ else
35
+ return
36
+ end
37
+ end
38
+ local src_val = src [src_pos ]
39
+ if src_val == nil then
40
+ return
41
+ end
42
+
43
+ dst = create (dst , dst_path )
44
+ if dst [dst_pos ] == nil then
45
+ dst [dst_pos ] = src_val
46
+ end
47
+
48
+ if remove then
49
+ src [src_pos ] = nil
50
+ end
51
+ end
52
+
6
53
-- silently move, please add to help nvim-tree-legacy-opts
7
54
local function refactored (opts )
8
55
-- 2022/06/20
9
- utils . move_missing_val (opts , " update_focused_file" , " update_cwd" , opts , " update_focused_file" , " update_root" , true )
10
- utils . move_missing_val (opts , " " , " update_cwd" , opts , " " , " sync_root_with_cwd" , true )
56
+ move (opts , " update_focused_file" , " update_cwd" , opts , " update_focused_file" , " update_root" , true )
57
+ move (opts , " " , " update_cwd" , opts , " " , " sync_root_with_cwd" , true )
11
58
12
59
-- 2022/11/07
13
- utils . move_missing_val (opts , " " , " open_on_tab" , opts , " tab.sync" , " open" , false )
14
- utils . move_missing_val (opts , " " , " open_on_tab" , opts , " tab.sync" , " close" , true )
15
- utils . move_missing_val (opts , " " , " ignore_buf_on_tab_change" , opts , " tab.sync" , " ignore" , true )
60
+ move (opts , " " , " open_on_tab" , opts , " tab.sync" , " open" , false )
61
+ move (opts , " " , " open_on_tab" , opts , " tab.sync" , " close" , true )
62
+ move (opts , " " , " ignore_buf_on_tab_change" , opts , " tab.sync" , " ignore" , true )
16
63
17
64
-- 2022/11/22
18
- utils . move_missing_val (opts , " renderer" , " root_folder_modifier" , opts , " renderer" , " root_folder_label" , true )
65
+ move (opts , " renderer" , " root_folder_modifier" , opts , " renderer" , " root_folder_label" , true )
19
66
20
67
-- 2023/01/01
21
- utils . move_missing_val (opts , " update_focused_file" , " debounce_delay" , opts , " view" , " debounce_delay" , true )
68
+ move (opts , " update_focused_file" , " debounce_delay" , opts , " view" , " debounce_delay" , true )
22
69
23
70
-- 2023/01/08
24
- utils . move_missing_val (opts , " trash" , " require_confirm" , opts , " ui.confirm" , " trash" , true )
71
+ move (opts , " trash" , " require_confirm" , opts , " ui.confirm" , " trash" , true )
25
72
26
73
-- 2023/01/15
27
74
if type (opts .view ) == " table" and opts .view .adaptive_size ~= nil then
@@ -35,13 +82,13 @@ local function refactored(opts)
35
82
end
36
83
37
84
-- 2023/07/15
38
- utils . move_missing_val (opts , " " , " sort_by" , opts , " sort" , " sorter" , true )
85
+ move (opts , " " , " sort_by" , opts , " sort" , " sorter" , true )
39
86
40
87
-- 2023/07/16
41
- utils . move_missing_val (opts , " git" , " ignore" , opts , " filters" , " git_ignored" , true )
88
+ move (opts , " git" , " ignore" , opts , " filters" , " git_ignored" , true )
42
89
43
90
-- 2023/08/26
44
- utils . move_missing_val (opts , " renderer.icons" , " webdev_colors" , opts , " renderer.icons.web_devicons.file" , " color" , true )
91
+ move (opts , " renderer.icons" , " webdev_colors" , opts , " renderer.icons.web_devicons.file" , " color" , true )
45
92
46
93
-- 2023/10/08
47
94
if type (opts .renderer ) == " table" and type (opts .renderer .highlight_diagnostics ) == " boolean" then
@@ -59,7 +106,7 @@ local function refactored(opts)
59
106
opts .update_focused_file .update_root = { enable = opts .update_focused_file .update_root }
60
107
end
61
108
end
62
- utils . move_missing_val (opts , " update_focused_file" , " ignore_list" , opts , " update_focused_file.update_root" , " ignore_list" , true )
109
+ move (opts , " update_focused_file" , " ignore_list" , opts , " update_focused_file.update_root" , " ignore_list" , true )
63
110
64
111
-- 2025/04/30
65
112
if opts .renderer and opts .renderer .icons and type (opts .renderer .icons .padding ) == " string" then
0 commit comments