From a5651aa580f650d156dffa9704956ccdb81e4320 Mon Sep 17 00:00:00 2001 From: Mike Smith <10135646+mikesmithgh@users.noreply.github.com> Date: Wed, 24 Apr 2024 07:20:29 -0400 Subject: [PATCH 1/4] fix: replace vim.tbl_list with vim.islist for v0.10+ closes #488 --- lua/diffview/logger.lua | 2 +- lua/diffview/stream.lua | 2 +- lua/diffview/utils.lua | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lua/diffview/logger.lua b/lua/diffview/logger.lua index 4eb2c9e8..f7975d5b 100644 --- a/lua/diffview/logger.lua +++ b/lua/diffview/logger.lua @@ -174,7 +174,7 @@ function Logger.dstring(object) if mt and mt.__tostring then return tostring(object) - elseif vim.tbl_islist(object) then + elseif utils.islist(object) then if #object == 0 then return "[]" end local s = "" diff --git a/lua/diffview/stream.lua b/lua/diffview/stream.lua index d1bb8e88..03552a13 100644 --- a/lua/diffview/stream.lua +++ b/lua/diffview/stream.lua @@ -33,7 +33,7 @@ end ---@param src table|function function Stream:create_src(src) if type(src) == "table" then - if vim.tbl_islist(src) then + if utils.islist(src) then local itr = ipairs(src) return function() diff --git a/lua/diffview/utils.lua b/lua/diffview/utils.lua index 7f5db36c..08cc86c2 100644 --- a/lua/diffview/utils.lua +++ b/lua/diffview/utils.lua @@ -1344,6 +1344,8 @@ function M.merge_sort(t, comparator) split_merge(t, 1, #t, comparator) end +M.islist = vim.fn.has('nvim-0.10') == 1 and vim.islist or vim.tbl_islist + M.path_sep = path_sep --- @param t table From 0215474cebbe2762626cd5d9e60ea8dfcfe1de8c Mon Sep 17 00:00:00 2001 From: Mike Smith <10135646+mikesmithgh@users.noreply.github.com> Date: Wed, 24 Apr 2024 08:04:32 -0400 Subject: [PATCH 2/4] fix: replace vim.tbl_flatten with Iter:flatten for v0.10+ closes #488 --- lua/diffview/lib.lua | 8 ++++---- lua/diffview/multi_job.lua | 4 ++-- lua/diffview/utils.lua | 6 +++++- lua/diffview/vcs/adapter.lua | 2 +- lua/diffview/vcs/adapters/git/init.lua | 4 ++-- lua/diffview/vcs/adapters/hg/init.lua | 4 ++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/lua/diffview/lib.lua b/lua/diffview/lib.lua index fa47b3be..ae8ea605 100644 --- a/lua/diffview/lib.lua +++ b/lua/diffview/lib.lua @@ -18,10 +18,10 @@ M.views = {} function M.diffview_open(args) local default_args = config.get_config().default_args.DiffviewOpen - local argo = arg_parser.parse(vim.tbl_flatten({ default_args, args })) + local argo = arg_parser.parse(utils.flatten({ default_args, args })) local rev_arg = argo.args[1] - logger:info("[command call] :DiffviewOpen " .. table.concat(vim.tbl_flatten({ + logger:info("[command call] :DiffviewOpen " .. table.concat(utils.flatten({ default_args, args, }), " ")) @@ -69,9 +69,9 @@ end ---@param args string[] function M.file_history(range, args) local default_args = config.get_config().default_args.DiffviewFileHistory - local argo = arg_parser.parse(vim.tbl_flatten({ default_args, args })) + local argo = arg_parser.parse(utils.flatten({ default_args, args })) - logger:info("[command call] :DiffviewFileHistory " .. table.concat(vim.tbl_flatten({ + logger:info("[command call] :DiffviewFileHistory " .. table.concat(utils.flatten({ default_args, args, }), " ")) diff --git a/lua/diffview/multi_job.lua b/lua/diffview/multi_job.lua index 855d7ef9..94aec69e 100644 --- a/lua/diffview/multi_job.lua +++ b/lua/diffview/multi_job.lua @@ -217,7 +217,7 @@ end ---@return string[] function MultiJob:stdout() - return vim.tbl_flatten( + return utils.flatten( ---@param value diffview.Job vim.tbl_map(function(value) return value.stdout @@ -227,7 +227,7 @@ end ---@return string[] function MultiJob:stderr() - return vim.tbl_flatten( + return utils.flatten( ---@param value diffview.Job vim.tbl_map(function(value) return value.stderr diff --git a/lua/diffview/utils.lua b/lua/diffview/utils.lua index 08cc86c2..cdb6260b 100644 --- a/lua/diffview/utils.lua +++ b/lua/diffview/utils.lua @@ -1344,7 +1344,11 @@ function M.merge_sort(t, comparator) split_merge(t, 1, #t, comparator) end -M.islist = vim.fn.has('nvim-0.10') == 1 and vim.islist or vim.tbl_islist +M.islist = vim.fn.has("nvim-0.10") == 1 and vim.islist or vim.tbl_islist ---@diagnostic disable-line: deprecated + +M.flatten = vim.fn.has("nvim-0.10") == 1 and function(...) + return vim.iter(...):flatten():totable() +end or vim.tbl_flatten ---@diagnostic disable-line: deprecated M.path_sep = path_sep diff --git a/lua/diffview/vcs/adapter.lua b/lua/diffview/vcs/adapter.lua index d4916d39..5129b41e 100644 --- a/lua/diffview/vcs/adapter.lua +++ b/lua/diffview/vcs/adapter.lua @@ -154,7 +154,7 @@ end function VCSAdapter:exec_sync(args, cwd_or_opt) if not self.class.bootstrap.done then self.class.run_bootstrap() end - local cmd = vim.tbl_flatten({ self:get_command(), args }) + local cmd = utils.flatten({ self:get_command(), args }) if not self.class.bootstrap.ok then logger:error( diff --git a/lua/diffview/vcs/adapters/git/init.lua b/lua/diffview/vcs/adapters/git/init.lua index 4374922d..51a07dc5 100644 --- a/lua/diffview/vcs/adapters/git/init.lua +++ b/lua/diffview/vcs/adapters/git/init.lua @@ -98,7 +98,7 @@ function GitAdapter.run_bootstrap() return err(fmt("Configured `git_cmd` is not executable: '%s'", git_cmd[1])) end - local out = utils.job(vim.tbl_flatten({ git_cmd, "version" })) + local out = utils.job(utils.flatten({ git_cmd, "version" })) bs.version_string = out[1] and out[1]:match("git version (%S+)") or nil if not bs.version_string then @@ -170,7 +170,7 @@ end ---@param path string ---@return string? local function get_toplevel(path) - local out, code = utils.job(vim.tbl_flatten({ + local out, code = utils.job(utils.flatten({ config.get_config().git_cmd, { "rev-parse", "--path-format=absolute", "--show-toplevel" }, }), path) diff --git a/lua/diffview/vcs/adapters/hg/init.lua b/lua/diffview/vcs/adapters/hg/init.lua index 5a54b9d6..94d25942 100644 --- a/lua/diffview/vcs/adapters/hg/init.lua +++ b/lua/diffview/vcs/adapters/hg/init.lua @@ -58,7 +58,7 @@ function HgAdapter.run_bootstrap() return err(fmt("Configured `hg_cmd` is not executable: '%s'", hg_cmd[1])) end - local out = utils.job(vim.tbl_flatten({ hg_cmd, "version" })) + local out = utils.job(utils.flatten({ hg_cmd, "version" })) local version = out[1] and out[1]:match("Mercurial .*%(version (%S*)%)") or nil if not version then return err("Could not get Mercurial version!") @@ -127,7 +127,7 @@ end ---@param path string ---@return string? local function get_toplevel(path) - local out, code = utils.job(vim.tbl_flatten({config.get_config().hg_cmd, {"root"}}), path) + local out, code = utils.job(utils.flatten({config.get_config().hg_cmd, {"root"}}), path) if code ~= 0 then return nil end From 8397e117ebbff56c9265b1ece93206ed54b0f26a Mon Sep 17 00:00:00 2001 From: Mike Smith <10135646+mikesmithgh@users.noreply.github.com> Date: Tue, 30 Apr 2024 08:19:40 -0400 Subject: [PATCH 3/4] chore: fix util.flatten use math.huge depth --- lua/diffview/utils.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/diffview/utils.lua b/lua/diffview/utils.lua index cdb6260b..1631636e 100644 --- a/lua/diffview/utils.lua +++ b/lua/diffview/utils.lua @@ -1347,7 +1347,7 @@ end M.islist = vim.fn.has("nvim-0.10") == 1 and vim.islist or vim.tbl_islist ---@diagnostic disable-line: deprecated M.flatten = vim.fn.has("nvim-0.10") == 1 and function(...) - return vim.iter(...):flatten():totable() + return vim.iter(...):flatten(math.huge):totable() end or vim.tbl_flatten ---@diagnostic disable-line: deprecated M.path_sep = path_sep From 1f4982f009870b120b9bfb4cb5828d2a11c8736c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sindre=20T=2E=20Str=C3=B8m?= Date: Sat, 18 May 2024 13:59:27 +0200 Subject: [PATCH 4/4] use old 'tbl_flatten()' impl from neovim Unlike the `iter(...):flatten()` alternative, this handles lists with holes. --- lua/diffview/utils.lua | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/lua/diffview/utils.lua b/lua/diffview/utils.lua index 1631636e..621ec3e9 100644 --- a/lua/diffview/utils.lua +++ b/lua/diffview/utils.lua @@ -1344,11 +1344,31 @@ function M.merge_sort(t, comparator) split_merge(t, 1, #t, comparator) end -M.islist = vim.fn.has("nvim-0.10") == 1 and vim.islist or vim.tbl_islist ---@diagnostic disable-line: deprecated +--- @diagnostic disable-next-line: deprecated +M.islist = vim.fn.has("nvim-0.10") == 1 and vim.islist or vim.tbl_islist -M.flatten = vim.fn.has("nvim-0.10") == 1 and function(...) - return vim.iter(...):flatten(math.huge):totable() -end or vim.tbl_flatten ---@diagnostic disable-line: deprecated +--- @param t table +--- @return any[] +function M.flatten(t) + local result = {} + + --- @param _t table + local function recurse(_t) + local n = #_t + for i = 1, n do + local v = _t[i] + if type(v) == 'table' then + recurse(v) + elseif v then + table.insert(result, v) + end + end + end + + recurse(t) + + return result +end M.path_sep = path_sep