77 lines
3.5 KiB
Lua
77 lines
3.5 KiB
Lua
return {
|
|
{
|
|
"NickvanDyke/opencode.nvim",
|
|
dependencies = {
|
|
"folke/snacks.nvim",
|
|
"ThePrimeagen/harpoon",
|
|
},
|
|
---@type opencode.Config
|
|
opts = {
|
|
auto_reload = true, -- Automatically reload buffers edited by opencode
|
|
auto_focus = false, -- Focus the opencode window after prompting
|
|
win = {
|
|
position = "right",
|
|
enter = false,
|
|
width = 0.4, -- 40% of screen width
|
|
},
|
|
context = {
|
|
-- Custom context: include harpooned files in prompts
|
|
["@harpoon"] = function()
|
|
local ok, harpoon = pcall(require, "harpoon")
|
|
if not ok then
|
|
return nil
|
|
end
|
|
|
|
local list = harpoon:list()
|
|
if not list or list:length() == 0 then
|
|
return nil
|
|
end
|
|
|
|
local paths = {}
|
|
for i = 1, list:length() do
|
|
local item = list:get(i)
|
|
if item and item.value then
|
|
table.insert(paths, item.value)
|
|
end
|
|
end
|
|
|
|
if #paths == 0 then
|
|
return nil
|
|
end
|
|
return "Harpooned files:\n" .. table.concat(paths, "\n")
|
|
end,
|
|
},
|
|
},
|
|
-- stylua: ignore
|
|
keys = {
|
|
-- Core commands
|
|
{ "<leader>kk", function() require("opencode").toggle() end, desc = "Toggle opencode" },
|
|
{ "<leader>ka", function() require("opencode").ask() end, desc = "Ask opencode", mode = { "n", "v" } },
|
|
{ "<leader>kA", function() require("opencode").ask("@file ") end, desc = "Ask opencode about current file", mode = { "n", "v" } },
|
|
{ "<leader>kn", function() require("opencode").command("/new") end, desc = "New session" },
|
|
|
|
-- Code understanding
|
|
{ "<leader>ke", function() require("opencode").prompt("Explain @cursor and its context") end, desc = "Explain code near cursor" },
|
|
{ "<leader>kE", function() require("opencode").prompt("Explain @selection in detail") end, desc = "Explain selection", mode = "v" },
|
|
|
|
-- Code review & quality
|
|
{ "<leader>kr", function() require("opencode").prompt("Review @file for correctness and readability") end, desc = "Review file" },
|
|
{ "<leader>kg", function() require("opencode").prompt("Review @diff for bugs, edge cases, and improvements") end, desc = "Review git diff" },
|
|
{ "<leader>kq", function() require("opencode").prompt("Help me fix these issues from @quickfix") end, desc = "Fix quickfix items" },
|
|
|
|
-- Code fixes & improvements
|
|
{ "<leader>kf", function() require("opencode").prompt("Fix these @diagnostics") end, desc = "Fix errors" },
|
|
{ "<leader>ko", function() require("opencode").prompt("Optimize @selection for performance and readability") end, desc = "Optimize selection", mode = "v" },
|
|
{ "<leader>kR", function() require("opencode").prompt("Refactor @selection to be more maintainable") end, desc = "Refactor selection", mode = "v" },
|
|
|
|
-- Code generation
|
|
{ "<leader>kd", function() require("opencode").prompt("Add documentation comments for @selection") end, desc = "Document selection", mode = "v" },
|
|
{ "<leader>kt", function() require("opencode").prompt("Add tests for @selection") end, desc = "Test selection", mode = "v" },
|
|
|
|
-- Harpoon integration
|
|
{ "<leader>kh", function() require("opencode").ask("@harpoon ") end, desc = "Ask about harpooned files" },
|
|
{ "<leader>kH", function() require("opencode").prompt("Analyze the relationships between @harpoon and suggest improvements") end, desc = "Analyze harpooned files" },
|
|
},
|
|
},
|
|
}
|