summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/feedback_service.lua10
-rw-r--r--tests/run.lua26
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