/
stacktrace.lua
47 lines (47 loc) · 1.35 KB
/
stacktrace.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
vim.api.nvim_create_user_command("Stacktrace", function(params)
local bufnr = vim.api.nvim_create_buf(false, true)
vim.bo[bufnr].bufhidden = "wipe"
local winid = vim.api.nvim_open_win(bufnr, true, {
relative = "editor",
width = vim.o.columns,
height = vim.o.lines,
row = 1,
col = 1,
border = "rounded",
style = "minimal",
title = "Stacktrace",
title_pos = "center",
})
local cancel
local confirm
cancel = function()
cancel = function() end
confirm = function() end
vim.api.nvim_win_close(winid, true)
end
confirm = function()
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, true)
cancel()
local items = vim.fn.getqflist({
lines = lines,
}).items
-- Use :Stacktrace! to not filter out invalid lines
if not params.bang then
items = vim.tbl_filter(function(item)
return item.valid == 1
end, items)
end
vim.fn.setqflist({}, " ", {
title = "Stacktrace",
items = items,
})
vim.cmd("copen")
end
vim.keymap.set("n", "q", cancel, { buffer = bufnr })
vim.keymap.set({ "n", "i" }, "<C-c>", cancel, { buffer = bufnr })
vim.keymap.set("n", "<CR>", confirm, { buffer = bufnr })
vim.keymap.set({ "n", "i" }, "<C-s>", confirm, { buffer = bufnr })
end, {
desc = "Parse a stacktrace using errorformat and add to quickfix",
bang = true,
})