diff options
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 26 | ||||
| -rw-r--r-- | tests/run.lua | 26 |
2 files changed, 50 insertions, 2 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index 72ee1dc..3575f27 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -61,6 +61,11 @@ local DIRECT_FINALIZER_EVENTS = { TextChanged = true, } +local EAGER_EVENT_SET = {} +for _, event_name in ipairs(M.EAGER_EVENTS) do + EAGER_EVENT_SET[event_name] = true +end + local DEFAULT_LABEL_DEFINITION = { guifg = "red", guibg = "NONE", @@ -191,6 +196,7 @@ function FeedbackService.new(options) owned_finalizer = nil, activation = nil, eager_registration = nil, + last_eager_decision = nil, } return service end @@ -819,8 +825,24 @@ function FeedbackService:refresh_primary(resolved_target, window) return self:start_highlight_timer(window) end -function FeedbackService:handle_eager_event() - return false +function FeedbackService:handle_eager_event(name, payload) + if not EAGER_EVENT_SET[name] then + return false + end + local record = service_records[self] + local decision = { + event = name, + payload = payload, + mark_char = record.policy:sample_markers().mark_char, + cleaned = false, + } + record.last_eager_decision = decision + return decision +end + +function FeedbackService:last_eager_decision() + local decision = service_records[self].last_eager_decision + return decision and copy(decision) or nil end function FeedbackService:activate() diff --git a/tests/run.lua b/tests/run.lua index 7947ab1..4290460 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -6929,6 +6929,32 @@ test("Activation installs eager hooks from sampled setup policy", function() same(0, map_size(disabled_host:event_registrations())) end) +test("Every eager event samples live character-marker policy", function() + fresh_sequence_state() + local host = MemoryHost.new({ + configuration = { + clean_labels_eagerly = true, + mark_char = false, + }, + }) + local feedback = feedback_service.new(host) + feedback:activate() + + for _, event_name in ipairs(feedback_service.EAGER_EVENTS) do + host:set_configuration("mark_char", false) + host:deliver_event(event_name, { window = "window-1" }) + local disabled = feedback:last_eager_decision() + same(event_name, disabled.event) + falsy(disabled.mark_char) + + host:set_configuration("mark_char", true) + host:deliver_event(event_name, { window = "window-1" }) + local enabled = feedback:last_eager_decision() + same(event_name, enabled.event) + truthy(enabled.mark_char) + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
