diff options
Diffstat (limited to 'lua/clever_f')
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 25 |
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) |
