add opencode
This commit is contained in:
76
lua/plugins/opencode.lua
Normal file
76
lua/plugins/opencode.lua
Normal file
@@ -0,0 +1,76 @@
|
||||
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" },
|
||||
},
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user