feat: add repo map display (#727)
Co-authored-by: yetone <yetoneful@gmail.com>
This commit is contained in:
parent
26bf8d67e8
commit
36b23cef16
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@ -61,7 +61,7 @@ jobs:
|
|||||||
- uses: Swatinem/rust-cache@v2
|
- uses: Swatinem/rust-cache@v2
|
||||||
- uses: dtolnay/rust-toolchain@master
|
- uses: dtolnay/rust-toolchain@master
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: "1.80.1"
|
||||||
components: clippy, rustfmt
|
components: clippy, rustfmt
|
||||||
- name: Run rustfmt
|
- name: Run rustfmt
|
||||||
run: make rustlint
|
run: make rustlint
|
||||||
|
@ -150,6 +150,7 @@ Respect and use existing conventions, libraries, etc that are already present in
|
|||||||
debug = "<leader>ad",
|
debug = "<leader>ad",
|
||||||
hint = "<leader>ah",
|
hint = "<leader>ah",
|
||||||
suggestion = "<leader>as",
|
suggestion = "<leader>as",
|
||||||
|
repomap = "<leader>ar",
|
||||||
},
|
},
|
||||||
sidebar = {
|
sidebar = {
|
||||||
apply_all = "A",
|
apply_all = "A",
|
||||||
|
@ -174,6 +174,11 @@ H.keymaps = function()
|
|||||||
function() M.toggle.suggestion() end,
|
function() M.toggle.suggestion() end,
|
||||||
{ desc = "avante: toggle suggestion" }
|
{ desc = "avante: toggle suggestion" }
|
||||||
)
|
)
|
||||||
|
Utils.safe_keymap_set("n", Config.mappings.toggle.repomap, function() require("avante.repo_map").show() end, {
|
||||||
|
desc = "avante: display repo map",
|
||||||
|
noremap = true,
|
||||||
|
silent = true,
|
||||||
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
if Config.behaviour.auto_suggestions then
|
if Config.behaviour.auto_suggestions then
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
local Popup = require("nui.popup")
|
||||||
local Utils = require("avante.utils")
|
local Utils = require("avante.utils")
|
||||||
|
local event = require("nui.utils.autocmd").event
|
||||||
|
|
||||||
local filetype_map = {
|
local filetype_map = {
|
||||||
["javascriptreact"] = "javascript",
|
["javascriptreact"] = "javascript",
|
||||||
@ -38,6 +40,10 @@ function RepoMap._build_repo_map(project_root, file_ext)
|
|||||||
local filepaths = Utils.scan_directory(project_root, ignore_patterns, negate_patterns)
|
local filepaths = Utils.scan_directory(project_root, ignore_patterns, negate_patterns)
|
||||||
vim.iter(filepaths):each(function(filepath)
|
vim.iter(filepaths):each(function(filepath)
|
||||||
if not Utils.is_same_file_ext(file_ext, filepath) then return end
|
if not Utils.is_same_file_ext(file_ext, filepath) then return end
|
||||||
|
if not repo_map_lib then
|
||||||
|
Utils.error("Failed to load avante_repo_map")
|
||||||
|
return
|
||||||
|
end
|
||||||
local definitions =
|
local definitions =
|
||||||
repo_map_lib.stringify_definitions(RepoMap.get_ts_lang(filepath), Utils.file.read_content(filepath) or "")
|
repo_map_lib.stringify_definitions(RepoMap.get_ts_lang(filepath), Utils.file.read_content(filepath) or "")
|
||||||
if definitions == "" then return end
|
if definitions == "" then return end
|
||||||
@ -141,7 +147,8 @@ function RepoMap._get_repo_map(file_ext)
|
|||||||
vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
|
vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
|
||||||
callback = function(ev)
|
callback = function(ev)
|
||||||
vim.defer_fn(function()
|
vim.defer_fn(function()
|
||||||
local filepath = vim.api.nvim_buf_get_name(ev.buf)
|
local ok, filepath = pcall(vim.api.nvim_buf_get_name, ev.buf)
|
||||||
|
if not ok or not filepath then return end
|
||||||
if not vim.startswith(filepath, project_root) then return end
|
if not vim.startswith(filepath, project_root) then return end
|
||||||
local rel_filepath = Utils.relative_path(filepath)
|
local rel_filepath = Utils.relative_path(filepath)
|
||||||
update_repo_map(rel_filepath)
|
update_repo_map(rel_filepath)
|
||||||
@ -152,4 +159,53 @@ function RepoMap._get_repo_map(file_ext)
|
|||||||
return repo_map
|
return repo_map
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function RepoMap.show()
|
||||||
|
local file_ext = vim.fn.expand("%:e")
|
||||||
|
local repo_map = RepoMap.get_repo_map(file_ext)
|
||||||
|
|
||||||
|
if not repo_map or next(repo_map) == nil then
|
||||||
|
Utils.warn("The repo map is empty or not supported for this language: " .. file_ext)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local popup = Popup({
|
||||||
|
position = "50%",
|
||||||
|
enter = true,
|
||||||
|
focusable = true,
|
||||||
|
border = {
|
||||||
|
style = "rounded",
|
||||||
|
padding = { 1, 1 },
|
||||||
|
text = {
|
||||||
|
top = " Avante Repo Map ",
|
||||||
|
top_align = "center",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
size = {
|
||||||
|
width = math.floor(vim.o.columns * 0.8),
|
||||||
|
height = math.floor(vim.o.lines * 0.8),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
popup:mount()
|
||||||
|
|
||||||
|
popup:map("n", "q", function() popup:unmount() end, { noremap = true, silent = true })
|
||||||
|
|
||||||
|
popup:on(event.BufLeave, function() popup:unmount() end)
|
||||||
|
|
||||||
|
-- Format the repo map for display
|
||||||
|
local lines = {}
|
||||||
|
for _, entry in ipairs(repo_map) do
|
||||||
|
table.insert(lines, string.format("Path: %s", entry.path))
|
||||||
|
table.insert(lines, string.format("Lang: %s", entry.lang))
|
||||||
|
table.insert(lines, "Defs:")
|
||||||
|
for def_line in entry.defs:gmatch("[^\r\n]+") do
|
||||||
|
table.insert(lines, def_line)
|
||||||
|
end
|
||||||
|
table.insert(lines, "") -- Add an empty line between entries
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Set the buffer content
|
||||||
|
vim.api.nvim_buf_set_lines(popup.bufnr, 0, -1, false, lines)
|
||||||
|
end
|
||||||
|
|
||||||
return RepoMap
|
return RepoMap
|
||||||
|
Loading…
x
Reference in New Issue
Block a user