#1166 validate user's options (#1177)

This commit is contained in:
Alexander Courtis
2022-04-24 19:17:05 +10:00
committed by GitHub
parent 74ae97098f
commit 5bbd3a0a91
5 changed files with 77 additions and 31 deletions

View File

@@ -311,7 +311,6 @@ end
local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
auto_reload_on_write = true,
disable_netrw = false,
hide_root_folder = false,
hijack_cursor = false,
hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false,
@@ -324,6 +323,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
view = {
width = 30,
height = 30,
hide_root_folder = false,
side = "left",
preserve_window_proportions = false,
number = false,
@@ -360,7 +360,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
},
ignore_ft_on_setup = {},
system_open = {
cmd = nil,
cmd = "",
args = {},
},
diagnostics = {
@@ -429,16 +429,50 @@ local function merge_options(conf)
return vim.tbl_deep_extend("force", DEFAULT_OPTS, conf or {})
end
local function validate_options(conf)
local msg
local function validate(user, def, prefix)
if type(user) ~= "table" or type(def) ~= "table" or not next(def) then
return
end
for k, v in pairs(user) do
local invalid
if def[k] == nil then
invalid = string.format("unknown option: %s%s", prefix, k)
elseif type(v) ~= type(def[k]) then
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)
legacy.migrate_legacy_options(conf or {})
validate_options(conf)
local opts = merge_options(conf)
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.open_on_setup = opts.open_on_setup
_config.open_on_setup_file = opts.open_on_setup_file

View File

@@ -9,7 +9,7 @@ local M = {
}
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."
return
end
@@ -53,7 +53,7 @@ end
function M.setup(opts)
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
M.config.system_open = {
cmd = "cmd",

View File

@@ -5,7 +5,7 @@ local M = {}
-- TODO update git.io/JPhyt when adding a migration
-- 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)
if o.disable_netrw == nil then
o.disable_netrw = vim.g.nvim_tree_disable_netrw ~= 0
@@ -178,22 +178,7 @@ local migrations = {
end,
}
function M.migrate_legacy_options(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
local function refactored(opts)
if opts.view then
if opts.view.mappings then
if opts.view.mappings.list then
@@ -207,4 +192,31 @@ function M.migrate_legacy_options(opts)
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