diff options
| author | ThePrimeAgain <theprimeagain@theprimeagain.com> | 2025-12-26 15:25:30 -0700 |
|---|---|---|
| committer | ThePrimeAgain <theprimeagain@theprimeagain.com> | 2025-12-26 15:25:30 -0700 |
| commit | 6da68cdb8edea79f721479561ddc8d79e91981fe (patch) | |
| tree | e7e64edd62a76759ba891346a9b7bb3a3670d93d /lua | |
| parent | 9f82332f402a51c17bb69ca5937d4ba7d8cf004a (diff) | |
| download | a4-6da68cdb8edea79f721479561ddc8d79e91981fe.tar.xz a4-6da68cdb8edea79f721479561ddc8d79e91981fe.zip | |
mid way through refactor when i realize i have another refactor
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/99/id.lua | 6 | ||||
| -rw-r--r-- | lua/99/init.lua | 11 | ||||
| -rw-r--r-- | lua/99/logger/logger.lua | 55 | ||||
| -rw-r--r-- | lua/99/ops/context.lua | 2 | ||||
| -rw-r--r-- | lua/99/ops/fill-in-function.lua | 13 | ||||
| -rw-r--r-- | lua/99/ops/init.lua | 2 | ||||
| -rw-r--r-- | lua/99/ops/marks.lua | 2 | ||||
| -rw-r--r-- | lua/99/ops/visual.lua (renamed from lua/99/ops/query.lua) | 4 | ||||
| -rw-r--r-- | lua/99/request/init.lua | 15 | ||||
| -rw-r--r-- | lua/99/test/fill_in_function_spec.lua | 2 |
10 files changed, 83 insertions, 29 deletions
diff --git a/lua/99/id.lua b/lua/99/id.lua new file mode 100644 index 0000000..4acaa9e --- /dev/null +++ b/lua/99/id.lua @@ -0,0 +1,6 @@ +local _id = 0 +return function() + _id = _id + 1 + return _id +end + diff --git a/lua/99/init.lua b/lua/99/init.lua index 030a479..1fef9a9 100644 --- a/lua/99/init.lua +++ b/lua/99/init.lua @@ -5,6 +5,7 @@ local Languages = require("99.language") local Window = require("99.window") local geo = require("99.geo") local Range = geo.Range +local get_id = require("99.id") --- @alias _99.Cleanup fun(): nil @@ -97,16 +98,22 @@ local _99 = { } function _99.implement_fn() - ops.implement_fn(_99_state) + local trace_id = get_id() + Logger:debug("99 Request", "method", "implement_fn", "id", trace_id) + ops.implement_fn(_99_state, trace_id) end function _99.fill_in_function() + local trace_id = get_id() + Logger:debug("99 Request", "method", "fill_in_function", "id", trace_id) ops.fill_in_function(_99_state) end function _99.visual() + local trace_id = get_id() local range = Range.from_visual_selection() - ops.query(_99_state, range) + Logger:debug("99 Request", "method", "visual", "id", trace_id) + ops.visual(_99_state, range) end --- View all the logs that are currently cached. Cached log count is determined diff --git a/lua/99/logger/logger.lua b/lua/99/logger/logger.lua index 40848af..a56d908 100644 --- a/lua/99/logger/logger.lua +++ b/lua/99/logger/logger.lua @@ -50,6 +50,17 @@ end --- @class LoggerSink --- @field write_line fun(LoggerSink, string): nil +--- @class VoidLogger : LoggerSink +local VoidLogger = {} +VoidLogger.__index = VoidLogger + +function VoidLogger.new() + return setmetatable({}, VoidLogger) +end + +--- @param _ string +function VoidLogger:write_line(_) end + --- @class FileSink : LoggerSink --- @field fd number local FileSink = {} @@ -92,7 +103,7 @@ function PrintSink:write_line(str) print(str) end ---- @class Logger +--- @class _99.Logger --- @field level number --- @field sink LoggerSink --- @field print_on_error boolean @@ -101,6 +112,7 @@ end --- @field max_errors_cached number --- @field error_cache string[] --- @field error_cache_level number +--- @field extra_params string[] local Logger = {} Logger.__index = Logger @@ -108,7 +120,7 @@ Logger.__index = Logger function Logger:new(level) level = level or levels.FATAL return setmetatable({ - sink = PrintSink:new(), + sink = VoidLogger:new(), level = level, print_on_error = false, log_cache = {}, @@ -119,27 +131,58 @@ function Logger:new(level) }, self) end +function Logger:clone() + return setmetatable({ + sink = self.sink, + level = self.level, + print_on_error = self.print_on_error, + log_cache = {}, + error_cache = {}, + error_cache_level = self.error_cache_level, + max_errors_cached = self.max_errors_cached, + max_logs_cached = self.max_logs_cached, + }, Logger) +end + --- @param path string ---- @return Logger +--- @return _99.Logger function Logger:file_sink(path) self.sink = FileSink:new(path) return self end ---- @return Logger +--- @return _99.Logger function Logger:print_sink() self.sink = PrintSink:new() return self end +--- @param area string +--- @return _99.Logger +function Logger:set_area(area) + local new_logger = self:clone() + table.insert(new_logger.extra_params, "Area") + table.insert(new_logger.extra_params, area) + return new_logger +end + +--- @param xid number +--- @return _99.Logger +function Logger:set_id(xid) + local new_logger = self:clone() + table.insert(new_logger.extra_params, "id") + table.insert(new_logger.extra_params, xid) + return new_logger +end + --- @param level number ---- @return Logger +--- @return _99.Logger function Logger:set_level(level) self.level = level return self end ---- @return Logger +--- @return _99.Logger function Logger:on_error_print_message() self.print_on_error = true return self diff --git a/lua/99/ops/context.lua b/lua/99/ops/context.lua index eeadab7..3a06dd5 100644 --- a/lua/99/ops/context.lua +++ b/lua/99/ops/context.lua @@ -10,7 +10,7 @@ local Context = {} Context.__index = Context --- @param _99 _99.State -function Context.new(_99) +function Context.new(_99, xid) local mds = {} for _, md in ipairs(_99.md_files) do table.insert(mds, md) diff --git a/lua/99/ops/fill-in-function.lua b/lua/99/ops/fill-in-function.lua index 2214d50..d959897 100644 --- a/lua/99/ops/fill-in-function.lua +++ b/lua/99/ops/fill-in-function.lua @@ -38,14 +38,16 @@ local function update_file_with_changes(res, location) end --- @param _99 _99.State -local function fill_in_function(_99) +--- @param xid number +local function fill_in_function(_99, xid) + local logger = Logger:set_area("fill_in_function"):set_id(xid) local ts = editor.treesitter local buffer = vim.api.nvim_get_current_buf() local cursor = Point:from_cursor() local func = ts.containing_function(buffer, cursor) if not func then - Logger:fatal("fill_in_function: unable to find any containing function") + logger:fatal("fill_in_function: unable to find any containing function") return end @@ -57,6 +59,7 @@ local function fill_in_function(_99) local context = Context.new(_99):finalize(_99, location) local request = Request.new({ + xid = xid, provider = _99.provider_override, model = _99.model, tmp_file = context.tmp_file, @@ -98,11 +101,11 @@ local function fill_in_function(_99) ) ) end - Logger:error( + logger:error( "unable to fill in function, enable and check logger for more details" ) elseif status == "cancelled" then - Logger:debug("fill_in_function was cancelled") + logger:debug("fill_in_function was cancelled") -- TODO: small status window here elseif status == "success" then update_file_with_changes(response, location) @@ -110,7 +113,7 @@ local function fill_in_function(_99) clean_up() end, on_stderr = function(line) - Logger:debug("fill_in_function#on_stderr", "line", line) + logger:debug("fill_in_function#on_stderr", "line", line) end, }) end diff --git a/lua/99/ops/init.lua b/lua/99/ops/init.lua index 9ceb9bc..c01c044 100644 --- a/lua/99/ops/init.lua +++ b/lua/99/ops/init.lua @@ -1,6 +1,6 @@ return { fill_in_function = require("99.ops.fill-in-function"), implement_fn = require("99.ops.implement-fn"), - query = require("99.ops.query"), + visual = require("99.ops.query"), Context = require("99.ops.context"), } diff --git a/lua/99/ops/marks.lua b/lua/99/ops/marks.lua index db3c0ee..d1bf7e6 100644 --- a/lua/99/ops/marks.lua +++ b/lua/99/ops/marks.lua @@ -37,6 +37,8 @@ end --- @return boolean function Mark:is_valid() + local pos = vim.api.nvim_buf_get_extmark_by_id(self.buffer, self.nsid, self.id, {}) + return #pos > 0 end --- @param buffer number diff --git a/lua/99/ops/query.lua b/lua/99/ops/visual.lua index 9004c3b..11725c3 100644 --- a/lua/99/ops/query.lua +++ b/lua/99/ops/visual.lua @@ -8,7 +8,7 @@ local Range = require("99.geo").Range --- @param _99 _99.State --- @param range _99.Range -local function query(_99, range) +local function visual(_99, range) local location = Location.from_range(range) local context = Context.new(_99):finalize(_99, location) local request = Request.new({ @@ -69,4 +69,4 @@ local function query(_99, range) }) end -return query +return visual diff --git a/lua/99/request/init.lua b/lua/99/request/init.lua index 408cc87..d154e93 100644 --- a/lua/99/request/init.lua +++ b/lua/99/request/init.lua @@ -1,19 +1,11 @@ local Logger = require("99.logger.logger") -local _id = 1 ---- no, i am not going to use a uuid, in case of collision, call the police ---- @return string -local function get_id() - local id = _id - _id = _id + 1 - return tostring(id) -end - --- @param opts _99.Request.Opts local function validate_opts(opts) assert(opts.model, "you must provide a model for hange requests to work") assert(opts.tmp_file, "you must provide context") assert(opts.provider, "you must provide a model provider") + assert(opts.xid, "you must provide a request id") end --- @alias _99.Request.State "ready" | "calling-model" | "parsing-result" | "updating-file" | "cancelled" @@ -60,7 +52,7 @@ function OpenCodeProvider:make_request(query, request, observer) observer.on_complete(status, text) end) - local id = get_id() + local id = request.config.xid Logger:debug("make_request", "tmp_file", request.config.tmp_file, "id", id) vim.system( { "opencode", "run", "-m", request.config.model, query }, @@ -155,11 +147,13 @@ end --- @field model string --- @field tmp_file string --- @field provider _99.Provider? +--- @field xid number --- @class _99.Request.Config --- @field model string --- @field tmp_file string --- @field provider _99.Provider +--- @field xid number --- @class _99.Request --- @field config _99.Request.Config @@ -184,6 +178,7 @@ function Request.new(opts) end function Request:cancel() + Logger:debug("Request#cancel", "id", self.config.xid) self.state = "cancelled" end diff --git a/lua/99/test/fill_in_function_spec.lua b/lua/99/test/fill_in_function_spec.lua index 437c2f7..3ce5fd0 100644 --- a/lua/99/test/fill_in_function_spec.lua +++ b/lua/99/test/fill_in_function_spec.lua @@ -2,8 +2,6 @@ local _99 = require("99") local test_utils = require("99.test.test_utils") local eq = assert.are.same -local test_content = require("99.test.test_content") -local Logger = require("99.logger.logger") local Levels = require("99.logger.level") --- @param content string[] |
