#1166 validate config (#1195)

This commit is contained in:
Kiyan
2022-04-26 21:11:24 +02:00
committed by GitHub
parent a94f5bf776
commit 3ac443207f
5 changed files with 81 additions and 31 deletions

View File

@@ -117,7 +117,6 @@ require'nvim-tree'.setup {
require'nvim-tree'.setup { -- BEGIN_DEFAULT_OPTS require'nvim-tree'.setup { -- BEGIN_DEFAULT_OPTS
auto_reload_on_write = true, auto_reload_on_write = true,
disable_netrw = false, disable_netrw = false,
hide_root_folder = false,
hijack_cursor = false, hijack_cursor = false,
hijack_netrw = true, hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false, hijack_unnamed_buffer_when_opening = false,
@@ -130,6 +129,7 @@ require'nvim-tree'.setup { -- BEGIN_DEFAULT_OPTS
view = { view = {
width = 30, width = 30,
height = 30, height = 30,
hide_root_folder = false,
side = "left", side = "left",
preserve_window_proportions = false, preserve_window_proportions = false,
number = false, number = false,
@@ -166,7 +166,7 @@ require'nvim-tree'.setup { -- BEGIN_DEFAULT_OPTS
}, },
ignore_ft_on_setup = {}, ignore_ft_on_setup = {},
system_open = { system_open = {
cmd = nil, cmd = "",
args = {}, args = {},
}, },
diagnostics = { diagnostics = {

View File

@@ -82,11 +82,11 @@ SETUP *nvim-tree.setup*
To configure the tree (and make it runnable), you should call the setup To configure the tree (and make it runnable), you should call the setup
function. function.
Values may be functions. Warning: this may result in unexpected behaviour.
> >
require("nvim-tree").setup { -- BEGIN_DEFAULT_OPTS require("nvim-tree").setup { -- BEGIN_DEFAULT_OPTS
auto_reload_on_write = true, auto_reload_on_write = true,
disable_netrw = false, disable_netrw = false,
hide_root_folder = false,
hijack_cursor = false, hijack_cursor = false,
hijack_netrw = true, hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false, hijack_unnamed_buffer_when_opening = false,
@@ -99,6 +99,7 @@ function.
view = { view = {
width = 30, width = 30,
height = 30, height = 30,
hide_root_folder = false,
side = "left", side = "left",
preserve_window_proportions = false, preserve_window_proportions = false,
number = false, number = false,
@@ -135,7 +136,7 @@ function.
}, },
ignore_ft_on_setup = {}, ignore_ft_on_setup = {},
system_open = { system_open = {
cmd = nil, cmd = "",
args = {}, args = {},
}, },
diagnostics = { diagnostics = {
@@ -311,10 +312,10 @@ Here is a list of the options available in the setup call:
*nvim-tree.system_open* *nvim-tree.system_open*
- |system_open|: configuration options for the system open command - |system_open|: configuration options for the system open command
- |system_open.cmd|: the command to run, leaving nil should work but - |system_open.cmd|: the command to run, leaving empty should work but
useful if you want to override the default command with another one. useful if you want to override the default command with another one.
type: `string` type: `string`
default: `nil` default: `""`
- |system_open.args|: the command arguments as a list - |system_open.args|: the command arguments as a list
type: `{string}` type: `{string}`

View File

@@ -311,7 +311,6 @@ end
local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
auto_reload_on_write = true, auto_reload_on_write = true,
disable_netrw = false, disable_netrw = false,
hide_root_folder = false,
hijack_cursor = false, hijack_cursor = false,
hijack_netrw = true, hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false, hijack_unnamed_buffer_when_opening = false,
@@ -324,6 +323,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
view = { view = {
width = 30, width = 30,
height = 30, height = 30,
hide_root_folder = false,
side = "left", side = "left",
preserve_window_proportions = false, preserve_window_proportions = false,
number = false, number = false,
@@ -360,7 +360,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
}, },
ignore_ft_on_setup = {}, ignore_ft_on_setup = {},
system_open = { system_open = {
cmd = nil, cmd = "",
args = {}, args = {},
}, },
diagnostics = { diagnostics = {
@@ -429,16 +429,53 @@ local function merge_options(conf)
return vim.tbl_deep_extend("force", DEFAULT_OPTS, conf or {}) return vim.tbl_deep_extend("force", DEFAULT_OPTS, conf or {})
end end
local function validate_options(conf)
local msg
local function validate(user, def, prefix)
-- only compare tables with contents that are not integer indexed
if type(user) ~= "table" or type(def) ~= "table" or not next(def) or type(next(def)) == "number" then
return
end
for k, v in pairs(user) do
local invalid
if def[k] == nil then
-- option does not exist
invalid = string.format("unknown option: %s%s", prefix, k)
elseif type(v) ~= type(def[k]) and type(v) ~= "function" then
-- option is of the wrong type and is not a function
invalid = string.format("invalid option: %s%s expected: %s actual: %s", prefix, k, type(def[k]), type(v))
end
if invalid then
if msg then
msg = string.format("%s | %s", msg, invalid)
else
msg = string.format("%s", invalid)
end
user[k] = nil
else
validate(v, def[k], prefix .. k .. ".")
end
end
end
validate(conf, DEFAULT_OPTS, "")
if msg then
utils.warn(msg)
end
end
function M.setup(conf) function M.setup(conf)
legacy.migrate_legacy_options(conf or {}) legacy.migrate_legacy_options(conf or {})
validate_options(conf)
local opts = merge_options(conf) local opts = merge_options(conf)
local netrw_disabled = opts.disable_netrw or opts.hijack_netrw local netrw_disabled = opts.disable_netrw or opts.hijack_netrw
if opts.auto_close then
utils.warn "auto close feature has been removed, see note in the README (tips & reminder section)"
end
_config.update_focused_file = opts.update_focused_file _config.update_focused_file = opts.update_focused_file
_config.open_on_setup = opts.open_on_setup _config.open_on_setup = opts.open_on_setup
_config.open_on_setup_file = opts.open_on_setup_file _config.open_on_setup_file = opts.open_on_setup_file

View File

@@ -9,7 +9,7 @@ local M = {
} }
function M.fn(node) function M.fn(node)
if not M.config.system_open.cmd then if #M.config.system_open.cmd == 0 then
require("nvim-tree.utils").warn "Cannot open file with system application. Unrecognized platform." require("nvim-tree.utils").warn "Cannot open file with system application. Unrecognized platform."
return return
end end
@@ -53,7 +53,7 @@ end
function M.setup(opts) function M.setup(opts)
M.config.system_open = opts or {} M.config.system_open = opts or {}
if not M.config.system_open.cmd then if #M.config.system_open.cmd == 0 then
if M.config.is_windows then if M.config.is_windows then
M.config.system_open = { M.config.system_open = {
cmd = "cmd", cmd = "cmd",

View File

@@ -5,7 +5,7 @@ local M = {}
-- TODO update git.io/JPhyt when adding a migration -- TODO update git.io/JPhyt when adding a migration
-- migrate the g: to o if the user has not specified that when calling setup -- migrate the g: to o if the user has not specified that when calling setup
local migrations = { local g_migrations = {
nvim_tree_disable_netrw = function(o) nvim_tree_disable_netrw = function(o)
if o.disable_netrw == nil then if o.disable_netrw == nil then
o.disable_netrw = vim.g.nvim_tree_disable_netrw ~= 0 o.disable_netrw = vim.g.nvim_tree_disable_netrw ~= 0
@@ -178,22 +178,7 @@ local migrations = {
end, end,
} }
function M.migrate_legacy_options(opts) local function refactored(opts)
local msg = nil
-- g: options
for g, m in pairs(migrations) do
if vim.fn.exists("g:" .. g) ~= 0 then
m(opts)
msg = (msg and msg .. ", " or "Following options were moved to setup, see git.io/JPhyt: ") .. g
end
end
if msg then
require("nvim-tree.utils").warn(msg)
end
-- regular opts
if opts.view then if opts.view then
if opts.view.mappings then if opts.view.mappings then
if opts.view.mappings.list then if opts.view.mappings.list then
@@ -207,4 +192,31 @@ function M.migrate_legacy_options(opts)
end end
end end
local function removed(opts)
if opts.auto_close then
utils.warn "auto close feature has been removed, see note in the README (tips & reminder section)"
opts.auto_close = nil
end
end
function M.migrate_legacy_options(opts)
-- g: options
local msg
for g, m in pairs(g_migrations) do
if vim.fn.exists("g:" .. g) ~= 0 then
m(opts)
msg = (msg and msg .. ", " or "Following options were moved to setup, see git.io/JPhyt: ") .. g
end
end
if msg then
utils.warn(msg)
end
-- silently move
refactored(opts)
-- warn and delete
removed(opts)
end
return M return M