From d0a4b41cae2390d90bb9353756f67330a3ef8e80 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 12:42:23 +0200 Subject: Compare TILL movement directions --- lua/clever_f/feedback_service.lua | 12 ++++++++++++ tests/run.lua | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index eab03e6..22925f4 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -617,6 +617,18 @@ function M.repeated_till_migration_candidate(request) and request.first_move == false end +function M.till_direction_changed(request) + if not M.repeated_till_migration_candidate(request) then + return false + end + if type(request.moved_forward) ~= "boolean" + or type(request.previous_moved_forward) ~= "boolean" + then + fail("TILL feedback migration requires movement directions", 2) + end + return request.moved_forward ~= request.previous_moved_forward +end + function M.command_migration_reason(request) if type(request) ~= "table" then fail("command feedback migration request must be a table", 2) diff --git a/tests/run.lua b/tests/run.lua index 792f15b..b770884 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -6455,6 +6455,23 @@ test("TILL migration requires a repeated move", function() })) end) +test("Repeated TILL migration compares movement directions", function() + local shared_target = target_plan.build(target("a"), matching_policy()) + local till = motion_plan.build(shared_target, "T") + local request = { + resolved_motion_plan = till, + first_move = false, + moved_forward = false, + previous_moved_forward = true, + } + + truthy(feedback_service.till_direction_changed(request)) + request.previous_moved_forward = false + falsy(feedback_service.till_direction_changed(request)) + request.first_move = true + falsy(feedback_service.till_direction_changed(request)) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3