commit 78e0e044529a4aca167d047d002ded524919c53c
parent 4ad7ecc188b1a43592b0ce0fdd3ecb0c58f9b1bc
Author: Tomas Nemec <owl@gtms.dev>
Date: Fri, 21 Feb 2025 16:10:41 +0100
update
Diffstat:
3 files changed, 52 insertions(+), 12 deletions(-)
diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua
@@ -18,8 +18,11 @@ local function keymap(client, buf)
end
if client.supports_method('textDocument/definition') then
- vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts 'LSP Definition')
vim.keymap.set('n', prefix .. 'd', vim.lsp.buf.definition, opts 'LSP Definition')
+ vim.keymap.set('n', '<c-s><c-]>', function()
+ vim.cmd.vsplit()
+ vim.lsp.buf.definition()
+ end, opts 'LSP Definition (VSplit)')
end
if client.supports_method('textDocument/typeDefinition') then
@@ -36,20 +39,24 @@ local function keymap(client, buf)
if client.supports_method('textDocument/implementation') then
vim.keymap.set('n', prefix .. 'm', vim.lsp.buf.implementation, opts 'LSP Implementation')
- vim.keymap.set('i', '<c-r><c-m>', function()
+ vim.keymap.set('n', '<c-w>' .. prefix .. 'm', function()
vim.cmd.split()
vim.lsp.buf.implementation()
end, opts 'LSP Implementation (Split)')
+ vim.keymap.set('n', '<c-s>' .. prefix .. 'm', function()
+ vim.cmd.vsplit()
+ vim.lsp.buf.implementation()
+ end, opts 'LSP Implementation (VSplit)')
end
if client.supports_method('textDocument/signatureHelp') then
- vim.keymap.set({ 'n', 'i' }, '<c-s>', function()
+ vim.keymap.set('i', '<c-s>', function()
vim.lsp.buf.signature_help { border = 'single' }
end, opts 'LSP Signature Help')
end
if client.supports_method('textDocument/references') then
- local rhs = {
+ local references = {
all = function() vim.lsp.buf.references { includeDeclaration = false } end,
first_in_file = function()
vim.lsp.buf.references(nil,
@@ -71,11 +78,11 @@ local function keymap(client, buf)
end
}
- vim.keymap.set('n', '[<c-r>', rhs.all, opts 'All References')
- vim.keymap.set('n', '[R', rhs.first_in_file, opts 'First References in File')
- vim.keymap.set('n', ']R', rhs.curr_file, opts 'Local References')
- vim.keymap.set('n', '[r', rhs.prev, opts 'Previous Reference')
- vim.keymap.set('n', ']r', rhs.next, opts 'Next Reference')
+ vim.keymap.set('n', '[<c-r>', references.all, opts 'All References')
+ vim.keymap.set('n', '[R', references.first_in_file, opts 'First References in File')
+ vim.keymap.set('n', ']R', references.curr_file, opts 'Local References')
+ vim.keymap.set('n', '[r', references.prev, opts 'Previous Reference')
+ vim.keymap.set('n', ']r', references.next, opts 'Next Reference')
end
if client.supports_method('textDocument/codeAction') then
diff --git a/ftplugin/qf.lua b/ftplugin/qf.lua
@@ -0,0 +1,33 @@
+local function decide(item, templates, other)
+ local data = item.user_data
+ if not data then
+ table.insert(other, item)
+ return
+ end
+
+ local uri = data.uri
+ if not uri then
+ table.insert(other, item)
+ return
+ end
+
+ if string.match(uri, ".template.dart") then
+ table.insert(templates, item)
+ else
+ table.insert(other, item)
+ end
+end
+
+-- TODO(tms) 21.02.25: Make it filter local and external by uri
+vim.keymap.set('n', '<leader>at', function()
+ local items = vim.fn.getqflist()
+ local templates = {}
+ local other = {}
+
+ for _, item in ipairs(items) do
+ decide(item, templates, other)
+ end
+
+ vim.fn.setqflist({}, 'r', { title = "Templates", items = templates })
+ vim.fn.setqflist({}, ' ', { title = "References", items = other })
+end, { buffer = true, desc = 'Quickfix Split Template Files', nowait = true })
diff --git a/lua/tms/lsp/references.lua b/lua/tms/lsp/references.lua
@@ -58,7 +58,7 @@ function M.first_in_file(opts)
end
local client = assert(vim.lsp.get_client_by_id(opts.context.client_id))
- vim.lsp.util.jump_to_location(opts.items[1].user_data, client.offset_encoding)
+ vim.lsp.util.show_document(opts.items[1].user_data, client.offset_encoding, { focus = true })
opts.title = 'Local References'
vim.fn.setloclist(0, {}, ' ', opts)
@@ -73,7 +73,7 @@ function M.next(opts)
end
local client = assert(vim.lsp.get_client_by_id(opts.context.client_id))
- vim.lsp.util.jump_to_location(opts.items[1].user_data, client.offset_encoding)
+ vim.lsp.util.show_document(opts.items[1].user_data, client.offset_encoding, { focus = true })
end
function M.prev(opts)
@@ -85,7 +85,7 @@ function M.prev(opts)
end
local client = assert(vim.lsp.get_client_by_id(opts.context.client_id))
- vim.lsp.util.jump_to_location(opts.items[#opts.items].user_data, client.offset_encoding)
+ vim.lsp.util.show_document(opts.items[#opts.items].user_data, client.offset_encoding, { focun = true })
end
return M