diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:34:56 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:34:56 +0200 |
| commit | 0809f1eb0c73648cae15806cf8a43ad35f445f7c (patch) | |
| tree | d6cc1fe0dfc2b8670fbf335d30e3c9d7d5e6cdeb /lua/clever_f/feedback_service.lua | |
| parent | 4df4d9e046d40f32ddb08ebba0cb026e9546178b (diff) | |
Preserve colorscheme default labels
Diffstat (limited to 'lua/clever_f/feedback_service.lua')
| -rw-r--r-- | lua/clever_f/feedback_service.lua | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lua/clever_f/feedback_service.lua b/lua/clever_f/feedback_service.lua index 0b9c8cd..f7e1dd6 100644 --- a/lua/clever_f/feedback_service.lua +++ b/lua/clever_f/feedback_service.lua @@ -1,4 +1,11 @@ local M = {} +local FeedbackService = {} +FeedbackService.__index = FeedbackService +M.FeedbackService = FeedbackService + +M.DEFAULT_LABEL_GROUP = "CleverFDefaultLabel" + +local service_records = setmetatable({}, { __mode = "k" }) local DEFAULT_LABEL_DEFINITION = { guifg = "red", @@ -30,4 +37,66 @@ function M.default_label_definition() return copy(DEFAULT_LABEL_DEFINITION) end +local function fail(message, level) + error(message, (level or 1) + 1) +end + +local function normalize_options(options) + if type(options) ~= "table" then + fail("FeedbackService options must be a table", 3) + end + if options.host == nil then + return { host = options } + end + return options +end + +local function require_host(host) + if type(host) ~= "table" or type(host.read_highlight_group) ~= "function" then + fail("FeedbackService host must provide highlight groups", 3) + end + return host +end + +function FeedbackService.new(options) + if FeedbackService.is(options) then + return options + end + options = normalize_options(options) + local service = setmetatable({}, FeedbackService) + service_records[service] = { + host = require_host(options.host), + } + return service +end + +function FeedbackService.is(value) + return type(value) == "table" and service_records[value] ~= nil +end + +function FeedbackService:ensure_default_label() + local existing = service_records[self].host:read_highlight_group( + M.DEFAULT_LABEL_GROUP + ) + if existing ~= nil then + return { + group = M.DEFAULT_LABEL_GROUP, + definition = existing, + source = "colorscheme", + applied = false, + } + end + return nil +end + +function M.new(options) + return FeedbackService.new(options) +end + +setmetatable(M, { + __call = function(_, options) + return FeedbackService.new(options) + end, +}) + return M |
