From fb1385f32ef45a99b8860b2100568d95f565be5a Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 11:14:00 +0200 Subject: Default missing explicit targets --- lua/clever_f/repeat_resolver.lua | 14 ++++++++++++-- tests/run.lua | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua index 2af60bf..32734cb 100644 --- a/lua/clever_f/repeat_resolver.lua +++ b/lua/clever_f/repeat_resolver.lua @@ -235,11 +235,21 @@ RepeatResolver.primary_direction = RepeatResolver.resolve_primary_direction RepeatResolver.effective_primary_descriptor = RepeatResolver.resolve_primary_direction +function M.explicit_target(stored_target) + if stored_target == nil then + return domain.TargetValue.code_fallback(0) + end + return stored_target +end + function M.build_same_direction_request(stored_descriptor, stored_target) if stored_descriptor == nil then return domain.ExplicitRepeatRequest.neutral() end - return domain.ExplicitRepeatRequest.new(stored_descriptor, stored_target) + return domain.ExplicitRepeatRequest.new( + stored_descriptor, + M.explicit_target(stored_target) + ) end M.explicit_same_direction = M.build_same_direction_request @@ -262,7 +272,7 @@ function M.build_opposite_direction_request(stored_descriptor, stored_target) end return domain.ExplicitRepeatRequest.new( domain.Descriptor.swap(stored_descriptor), - stored_target + M.explicit_target(stored_target) ) end diff --git a/tests/run.lua b/tests/run.lua index d360332..11062ac 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4147,6 +4147,23 @@ test("Missing explicit descriptors return a neutral request", function() truthy(resolver:opposite_direction_request("n").neutral) end) +test("Missing explicit targets use character code zero", function() + local _, transitions = fresh_sequence_state() + transitions:BeginAcquisition("n", "T") + local resolver = repeat_resolver.new() + + local same_request = resolver:same_direction_request("n") + local opposite_request = resolver:opposite_direction_request("n") + for _, request in ipairs({ same_request, opposite_request }) do + falsy(request.neutral) + same(domain.TargetKind.CODE_FALLBACK, request.target.kind) + same(0, request.target.first_code) + same("", request.target.value) + end + same(domain.Descriptor.TILL_BACKWARD, same_request.descriptor) + same(domain.Descriptor.TILL_FORWARD, opposite_request.descriptor) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3