neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

commit 78e0e044529a4aca167d047d002ded524919c53c
parent 4ad7ecc188b1a43592b0ce0fdd3ecb0c58f9b1bc
Author: Tomas Nemec <owl@gtms.dev>
Date:   Fri, 21 Feb 2025 16:10:41 +0100

update

Diffstat:
Mafter/plugin/lsp.lua | 25++++++++++++++++---------
Aftplugin/qf.lua | 33+++++++++++++++++++++++++++++++++
Mlua/tms/lsp/references.lua | 6+++---
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