From 68bf7f530ca90cba3eb5db5c70644f3899440da4 Mon Sep 17 00:00:00 2001 From: ant Date: Sat, 4 Jan 2025 18:37:16 +0100 Subject: [PATCH] lsp signature (stealed from nvchad/ui) --- lua/configs/lspconfig.lua | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/lua/configs/lspconfig.lua b/lua/configs/lspconfig.lua index acad02c..15c6cf3 100644 --- a/lua/configs/lspconfig.lua +++ b/lua/configs/lspconfig.lua @@ -58,3 +58,56 @@ vim.diagnostic.config({ -- update_in_insert = false, -- severity_sort = false, }) + +vim.api.nvim_create_autocmd("LspAttach", { + callback = function(args) + vim.schedule(function() + local client = vim.lsp.get_client_by_id(args.data.client_id) + + if client then + local signatureProvider = client.server_capabilities.signatureHelpProvider + if signatureProvider and signatureProvider.triggerCharacters then + local M = {} + local api = vim.api + + vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + focusable = false, + silent = true, + max_height = 7, + }) + + local function check_triggeredChars(triggerChars) + local cur_line = api.nvim_get_current_line() + local pos = api.nvim_win_get_cursor(0)[2] + local prev_char = cur_line:sub(pos - 1, pos - 1) + local cur_char = cur_line:sub(pos, pos) + + for _, char in ipairs(triggerChars) do + if cur_char == char or prev_char == char then + return true + end + end + end + + M.setup = function(client, bufnr) + local group = api.nvim_create_augroup("LspSignature", { clear = false }) + api.nvim_clear_autocmds { group = group, buffer = bufnr } + + local triggerChars = client.server_capabilities.signatureHelpProvider.triggerCharacters + + api.nvim_create_autocmd("TextChangedI", { + group = group, + buffer = bufnr, + callback = function() + if check_triggeredChars(triggerChars) then + vim.lsp.buf.signature_help() + end + end, + }) + end + M.setup(client, args.buf) + end + end + end) + end, +})