diff options
| author | Simon Hauser <Simon-Hauser@outlook.de> | 2021-11-23 23:51:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-23 23:51:25 +0100 |
| commit | 1c57cc6140644695f0d9bd71b63de45feeca6ae7 (patch) | |
| tree | ca9ddaa4839dcd6c485aa1c249b5a14c79f0d068 /lua/telescope/actions/mt.lua | |
| parent | 7695d224c81e4ceeb3100d759c296814183ccfae (diff) | |
Revert "fix: action mt so we can again concat actions from two different tables (#1143)" (#1486)
This reverts commit 6daf35c88c07dd4b220468968a742cda04889cd3.
Diffstat (limited to 'lua/telescope/actions/mt.lua')
| -rw-r--r-- | lua/telescope/actions/mt.lua | 64 |
1 files changed, 12 insertions, 52 deletions
diff --git a/lua/telescope/actions/mt.lua b/lua/telescope/actions/mt.lua index 02edea5..adb3293 100644 --- a/lua/telescope/actions/mt.lua +++ b/lua/telescope/actions/mt.lua @@ -14,28 +14,7 @@ local run_replace_or_original = function(replacements, original_func, ...) return original_func(...) end -local append_action_copy = function(new, v, old) - table.insert(new, v) - new._func[v] = old._func[v] - new._static_pre[v] = old._static_pre[v] - new._pre[v] = old._pre[v] - new._replacements[v] = old._replacements[v] - new._static_post[v] = old._static_post[v] - new._post[v] = old._post[v] -end - ---TODO(conni2461): Not a fan of this solution/hack. Needs to be addressed -local all_mts = {} - ---- an action is metatable which allows replacement(prepend or append) of the function ----@class Action ----@field _func table<string, function>: the original action function ----@field _static_pre table<string, function>: will allways run before the function even if its replaced ----@field _pre table<string, function>: the functions that will run before the action ----@field _replacements table<string, function>: the function that replaces this action ----@field _static_post table<string, function>: will allways run after the function even if its replaced ----@field _post table<string, function>: the functions that will run after the action -action_mt.create = function() +action_mt.create = function(mod) local mt = { __call = function(t, ...) local values = {} @@ -48,7 +27,7 @@ action_mt.create = function() end local result = { - run_replace_or_original(t._replacements[action_name], t._func[action_name], ...), + run_replace_or_original(t._replacements[action_name], mod[action_name], ...), } for _, res in ipairs(result) do table.insert(values, res) @@ -66,23 +45,18 @@ action_mt.create = function() end, __add = function(lhs, rhs) - local new_action = setmetatable({}, action_mt.create()) + local new_actions = {} for _, v in ipairs(lhs) do - append_action_copy(new_action, v, lhs) + table.insert(new_actions, v) end for _, v in ipairs(rhs) do - append_action_copy(new_action, v, rhs) - end - new_action.clear = function() - lhs.clear() - rhs.clear() + table.insert(new_actions, v) end - return new_action + return setmetatable(new_actions, getmetatable(lhs)) end, - _func = {}, _static_pre = {}, _pre = {}, _replacements = {}, @@ -146,47 +120,33 @@ action_mt.create = function() return self end - table.insert(all_mts, mt) return mt end -action_mt.transform = function(k, mt, _, v) +action_mt.transform = function(k, mt, mod, v) local res = setmetatable({ k }, mt) if type(v) == "table" then res._static_pre[k] = v.pre res._static_post[k] = v.post - res._func[k] = v.action - else - res._func[k] = v + mod[k] = v.action end return res end action_mt.transform_mod = function(mod) + local mt = action_mt.create(mod) + -- Pass the metatable of the module if applicable. -- This allows for custom errors, lookups, etc. local redirect = setmetatable({}, getmetatable(mod) or {}) for k, v in pairs(mod) do - local mt = action_mt.create() - redirect[k] = action_mt.transform(k, mt, _, v) + redirect[k] = action_mt.transform(k, mt, mod, v) end - redirect._clear = function() - for k, v in pairs(redirect) do - if k ~= "_clear" then - pcall(v.clear) - end - end - end + redirect._clear = mt.clear return redirect end -action_mt.clear_all = function() - for _, v in ipairs(all_mts) do - pcall(v.clear) - end -end - return action_mt |
