From a5ae8899d5b8281c301807eb7cdcb57a9500b245 Mon Sep 17 00:00:00 2001 From: Galen Rowell Date: Sat, 4 Sep 2021 13:35:46 +1000 Subject: [PATCH] fix: merge_tables bug caught --- lua/core/utils.lua | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lua/core/utils.lua b/lua/core/utils.lua index df3f81d..3ef5977 100644 --- a/lua/core/utils.lua +++ b/lua/core/utils.lua @@ -255,7 +255,8 @@ M.merge_table = function(into, from, nodes_to_replace) if type(nodes_to_replace) == "table" then -- function that will be executed with loadstring - local base_fn = [[ + local replace_fn = function(node) + local base_fn = [[ return function(table1, table2) local t1, t2 = table1_node or false , table2_node or false if t1 and t2 then @@ -263,11 +264,20 @@ return function(table1, table2) end return table1 end]] - for _, node in ipairs(nodes_to_replace) do + -- replace the _node in base_fn to actual given node value local fn = base_fn:gsub("_node", node) - -- if the node if found, it is replaced, otherwise table 1 is returned - table1 = loadstring(fn)()(table1, table2) + -- return the function created from the string base_fn + return loadstring(fn)()(table1, table2) + end + + for _, node in ipairs(nodes_to_replace) do + -- pcall() is a poor workaround for if "['mappings']['plugin']['esc_insertmode']" 'plugin' sub-table does not exist + local ok, result = pcall(replace_fn, node) + if ok then + -- if the node is found then replace + table1 = result + end end end