diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:14:00 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:14:00 +0200 |
| commit | fb1385f32ef45a99b8860b2100568d95f565be5a (patch) | |
| tree | a1992d180f6e4e59fb35afd1be8adf46695ab8ea | |
| parent | ed9688ce68f0e6cded2e54e64057b58e040d26e4 (diff) | |
Default missing explicit targets
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 14 | ||||
| -rw-r--r-- | 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 |
