Compare commits

..

2 Commits

Author SHA1 Message Date
femkromek 79572a45dd feat: add provider system 2026-06-26 16:45:04 +02:00
femkromek 15467ba8f0 refactor: improve buffer system 2026-06-26 14:26:03 +02:00
6 changed files with 93 additions and 7 deletions
+21 -5
View File
@@ -2,6 +2,10 @@
local M = {}
local buffer_list = {
'test',
}
local buffers = {}
function M.setup()
@@ -10,11 +14,11 @@ end
-- should return created chai buffer
local function resolve_buffer_path(path)
if string.match(path, '^chai://test/?$') then
local buffer = vim.deepcopy(require('chai.buffers.test'))
buffer.args = {}
return buffer
for _, value in ipairs(buffer_list) do
local buf = require('chai.buffers.' .. value).check(path)
if buf ~= nil then
return buf
end
end
-- user is idiot imbecyle etc
@@ -29,6 +33,9 @@ function M.create_buffer(buffer)
end
function M.destroy_buffer(buffer)
if buffers[buffer] == nil then
return
end
if type(buffers[buffer].destroy) == 'function' then
buffers[buffer].destroy(buffer)
end
@@ -36,18 +43,27 @@ function M.destroy_buffer(buffer)
end
function M.on_hide(buffer)
if buffers[buffer] == nil then
return
end
if type(buffers[buffer].on_hide) == 'function' then
buffers[buffer].on_hide(buffer)
end
end
function M.on_enter(buffer)
if buffers[buffer] == nil then
return
end
if type(buffers[buffer].on_enter) == 'function' then
buffers[buffer].on_enter(buffer)
end
end
function M.on_write(buffer)
if buffers[buffer] == nil then
return
end
if type(buffers[buffer].on_write) == 'function' then
buffers[buffer].on_write(buffer)
end
+21 -1
View File
@@ -1,8 +1,18 @@
local M = {}
function M.init(vim_buffer)
local Buffer = {}
function Buffer.init(vim_buffer)
vim.api.nvim_buf_set_lines(vim_buffer, 0, -1, false, { "press q to exit" })
local provider_list = { "Providers:" }
for key, value in pairs(require('chai.config').options.providers) do
table.insert(provider_list, key .. " " .. value.url)
end
vim.api.nvim_buf_set_lines(vim_buffer, 3, -1, false, provider_list)
vim.keymap.set({ "n", "x" }, "q", function()
vim.api.nvim_buf_delete(vim_buffer, { force = true })
end, { buffer = vim_buffer })
@@ -11,4 +21,14 @@ function M.init(vim_buffer)
vim.bo[vim_buffer].modified = false
end
function M.check(path)
if string.match(path, '^chai://test/?$') then
local buffer = vim.deepcopy(Buffer)
buffer.args = {}
return buffer
end
return nil
end
return M
+1 -1
View File
@@ -1,7 +1,7 @@
local M = {}
M.defaults = {
servers = {},
providers = {},
}
M.options = {}
+26
View File
@@ -0,0 +1,26 @@
local M = {}
local config = require('chai.config')
local provider_instances = {}
-- lazy loads providers of course
function M.get_provider(name)
if provider_instances[name] ~= nil then
return provider_instances[name]
end
if config.options.providers[name] == nil then
error('unknown provider')
end
local provider_config = config.options.providers[name]
local provider = require('chai.providers.' .. provider_config.type)
local provider_instance = provider.init(provider_config)
provider_instances[name] = provider_instance
return provider_instance
end
return M
+12
View File
@@ -0,0 +1,12 @@
local M
local GiteaProvider = {}
function M.init(config)
local provider = vim.deepcopy(GiteaProvider)
provider.config = config
return provider
end
return M
+12
View File
@@ -0,0 +1,12 @@
local M
local GithubProvider = {}
function M.init(config)
local provider = vim.deepcopy(GithubProvider)
provider.config = config
return provider
end
return M