summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorThePrimeAgain <theprimeagain@theprimeagain.com>2025-12-26 15:25:30 -0700
committerThePrimeAgain <theprimeagain@theprimeagain.com>2025-12-26 15:25:30 -0700
commit6da68cdb8edea79f721479561ddc8d79e91981fe (patch)
treee7e64edd62a76759ba891346a9b7bb3a3670d93d /lua
parent9f82332f402a51c17bb69ca5937d4ba7d8cf004a (diff)
downloada4-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.lua6
-rw-r--r--lua/99/init.lua11
-rw-r--r--lua/99/logger/logger.lua55
-rw-r--r--lua/99/ops/context.lua2
-rw-r--r--lua/99/ops/fill-in-function.lua13
-rw-r--r--lua/99/ops/init.lua2
-rw-r--r--lua/99/ops/marks.lua2
-rw-r--r--lua/99/ops/visual.lua (renamed from lua/99/ops/query.lua)4
-rw-r--r--lua/99/request/init.lua15
-rw-r--r--lua/99/test/fill_in_function_spec.lua2
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[]