diff options
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 10 | ||||
| -rw-r--r-- | tests/run.lua | 26 |
2 files changed, 36 insertions, 0 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index b15d1c5..d4fd7a7 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -801,6 +801,16 @@ function FeedbackService:start_highlight_timer(window) return identity end +function FeedbackService:refresh_primary(resolved_target, window) + if resolved_target == nil then + return nil + end + if not domain.TargetValue.is(resolved_target) then + fail("primary timer refresh requires a resolved TargetValue", 2) + end + return self:start_highlight_timer(window) +end + function FeedbackService:evaluate_feature_links() local record = service_records[self] local rules = record.policy:evaluate_highlight_links() diff --git a/tests/run.lua b/tests/run.lua index 2d343b6..2f470d8 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -6835,6 +6835,32 @@ test("Primary repetition restores feedback before movement", function() truthy(create_index < movement_index) end) +test("Resolved primary actions refresh the highlight timer", function() + local state, transitions = fresh_sequence_state() + local host = MemoryHost.new({ + configuration = { + mark_char = true, + highlight_timeout_ms = 15, + }, + }) + local feedback = feedback_service.new({ + host = host, + transitions = transitions, + }) + local resolved = target("a") + + local fresh = feedback:refresh_primary(resolved, "window-1") + same(fresh, state.highlight_timer) + local repeated = feedback:refresh_primary(resolved, "window-1") + same(repeated, state.highlight_timer) + falsy(fresh == repeated) + falsy(host:timers()[fresh].active) + truthy(host:timers()[repeated].active) + + same(nil, feedback:refresh_primary(nil, "window-1")) + same(repeated, state.highlight_timer) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
