adjust and consolidate duplicated predicate code

This commit is contained in:
jgmdev
2022-05-12 22:15:29 -04:00
parent fd0a433f59
commit 59d91087e9
3 changed files with 24 additions and 24 deletions
+20 -2
View File
@@ -6,15 +6,33 @@ command.map = {}
local always_true = function() return true end
function command.add(predicate, map)
---Used iternally by command.add, statusview, and contextmenu to generate a
---function with a condition to evaluate returning the boolean result of this
---evaluation.
---
---If a string predicate is given it is treated as a require import that should
---return a valid object which is checked against the current active view, the
---sames applies if a table is given. A function that returns a boolean can be
---used instead to perform a custom evaluation, setting to nil means always
---evaluates to true.
---
---@param predicate string | table | function
---@return function
function command.generate_predicate(predicate)
predicate = predicate or always_true
if type(predicate) == "string" then
predicate = require(predicate)
end
if type(predicate) == "table" then
local class = predicate
predicate = function() return core.active_view:is(class) end
predicate = function() return core.active_view:extends(class) end
end
return predicate
end
function command.add(predicate, map)
predicate = command.generate_predicate(predicate)
for name, fn in pairs(map) do
assert(not command.map[name], "command already exists: " .. name)
command.map[name] = { predicate = predicate, perform = fn }