diff options
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 13 | ||||
| -rw-r--r-- | tests/run.lua | 14 |
2 files changed, 24 insertions, 3 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index 086282b..6bf5205 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -62,12 +62,15 @@ function RepeatResolver:previous_landing(context) return resolver_records[self].state:get_previous_landing(context) end -function RepeatResolver:decide(context, current_position) +function RepeatResolver:decide(context, current_position, macro_state) 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 + if domain.MacroState.new(macro_state).executing then + return M.Decision.ACQUIRE + end return nil end @@ -82,8 +85,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) +function M.decide(context, current_position, macro_state, options) + return RepeatResolver.new(options):decide( + context, + current_position, + macro_state + ) end M.eligibility = M.decide diff --git a/tests/run.lua b/tests/run.lua index d5b97da..cccf8dd 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -3816,6 +3816,20 @@ test("Primary eligibility acquires for missing and different landings", function same(nil, resolver:decide("n", domain.Position.new(2, 5))) end) +test("Primary eligibility acquires while a macro executes", function() + local _, transitions = fresh_sequence_state() + local landing = domain.Position.new(1, 6) + transitions:BeginAcquisition("n", "f") + transitions:CommitCommandSuccess("n", landing, true) + local resolver = repeat_resolver.new() + + same( + repeat_resolver.Decision.ACQUIRE, + resolver:decide("n", landing, domain.MacroState.new("q")) + ) + same(nil, resolver:decide("n", landing, domain.MacroState.new(nil))) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
