summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/clever_f/repeat_resolver.lua25
1 files changed, 25 insertions, 0 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 1b74420..086282b 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -5,6 +5,13 @@ local M = {}
local RepeatResolver = {}
M.RepeatResolver = RepeatResolver
+M.Decision = {
+ ACQUIRE = "acquire",
+ REPEAT = "repeat",
+}
+M.ACQUIRE = M.Decision.ACQUIRE
+M.REPEAT = M.Decision.REPEAT
+
local resolver_records = setmetatable({}, { __mode = "k" })
local function fail(message, level)
@@ -55,6 +62,18 @@ function RepeatResolver:previous_landing(context)
return resolver_records[self].state:get_previous_landing(context)
end
+function RepeatResolver:decide(context, current_position)
+ current_position = domain.Position.coerce(current_position)
+ local landing = self:previous_landing(context)
+ if landing == nil or not domain.Position.equal(landing, current_position) then
+ return M.Decision.ACQUIRE
+ end
+ return nil
+end
+
+RepeatResolver.eligibility = RepeatResolver.decide
+RepeatResolver.resolve_eligibility = RepeatResolver.decide
+
function M.new(options)
return RepeatResolver.new(options)
end
@@ -63,6 +82,12 @@ M.landing = function(context, options)
return RepeatResolver.new(options):previous_landing(context)
end
+function M.decide(context, current_position, options)
+ return RepeatResolver.new(options):decide(context, current_position)
+end
+
+M.eligibility = M.decide
+
setmetatable(M, {
__call = function(_, options)
return RepeatResolver.new(options)