From 2ff9db36ece97ecdee8daf51edc8dc80c960a3ae Mon Sep 17 00:00:00 2001 From: "Schmidt, Tibor" Date: Sat, 13 Jan 2024 09:54:43 +0100 Subject: [PATCH] chore: wip backup --- lua/gp/init.lua | 26 +++++++++++++++++++++++++- lua/gp/lsp/ft/cpp.lua | 9 +++++++++ lua/gp/lsp/init.lua | 41 +++++++++++++++++++++++++++++++++++++++++ lua/gp/spinner.lua | 2 +- 4 files changed, 76 insertions(+), 2 deletions(-) diff --git a/lua/gp/init.lua b/lua/gp/init.lua index e04d7495..699dfee3 100644 --- a/lua/gp/init.lua +++ b/lua/gp/init.lua @@ -3486,7 +3486,31 @@ M.cmd.LspProbe = function(params) vim.split(vim.inspect(results) .. "\n\n" .. vim.json.encode(results), "\n") ) vim.api.nvim_win_set_buf(0, tbuf) - end, 2, false) + end, 2, true) +end + +M.cmd.LspWorkspaceSymbols = function(params) + local lsp = require("gp.lsp") + + local buf = vim.api.nvim_get_current_buf() + + lsp.workspace_symbols(buf, "", function(results) + local tbuf = vim.api.nvim_create_buf(false, true) + vim.api.nvim_buf_set_lines(tbuf, 0, -1, false, vim.split(vim.inspect(results), "\n")) + vim.api.nvim_win_set_buf(0, tbuf) + end) +end + +M.cmd.LspDocumentSymbols = function(params) + local lsp = require("gp.lsp") + + local buf = vim.api.nvim_get_current_buf() + + lsp.root_document_symbols(buf, function(results) + local tbuf = vim.api.nvim_create_buf(false, true) + vim.api.nvim_buf_set_lines(tbuf, 0, -1, false, vim.split(vim.inspect(results), "\n")) + vim.api.nvim_win_set_buf(0, tbuf) + end) end return M diff --git a/lua/gp/lsp/ft/cpp.lua b/lua/gp/lsp/ft/cpp.lua index 200f3869..0ac25d1f 100644 --- a/lua/gp/lsp/ft/cpp.lua +++ b/lua/gp/lsp/ft/cpp.lua @@ -37,6 +37,15 @@ return { Function = { ["gp_lsp_probe()"] = "void", }, + Module = { + std = {}, + }, + Struct = { + ["std::uses_allocator"] = {}, + }, + Class = { + ["std::uniform_int_distribution"] = {}, + }, Interface = { Class = {}, FILE = {}, diff --git a/lua/gp/lsp/init.lua b/lua/gp/lsp/init.lua index 3379e6a0..6b6ccbb4 100644 --- a/lua/gp/lsp/init.lua +++ b/lua/gp/lsp/init.lua @@ -177,4 +177,45 @@ M.completion = function(row, col, bufnr, callback, filtered) end end) end + +---@param bufnr integer|nil buffer handle or 0 for current, defaults to current +---@param callback function | nil receives document symbol result +---@param filtered table | nil filtered out items with given label +M.root_document_symbols = function(bufnr, callback, filtered) + local params = M.make_given_position_param(0, 0, bufnr) + + vim.lsp.buf_request_all( + bufnr, + "textDocument/documentSymbol", + { textDocument = params.textDocument }, + function(results) + local items = {} + for _, r in pairs(results) do + local result = r.result and r.result or {} + for _, item in ipairs(result) do + local kind = vim.lsp.protocol.SymbolKind[item.kind] or "" + local label = item.name:match("^[%s•]*(.-)[%s•]*$") + local detail = item.detail or "" + if not (filtered and filtered[kind] and filtered[kind][label]) then + items[kind] = items[kind] or {} + items[kind][label] = detail or "" + end + end + end + if callback then + callback(items) + end + end + ) +end + +M.workspace_symbols = function(bufnr, query, callback) + local params = { query = query or "" } + vim.lsp.buf_request_all(bufnr, "workspace/symbol", params, function(results) + if callback then + callback(results) + end + end) +end + return M diff --git a/lua/gp/spinner.lua b/lua/gp/spinner.lua index c926b918..a5e62252 100644 --- a/lua/gp/spinner.lua +++ b/lua/gp/spinner.lua @@ -49,7 +49,7 @@ function M.stop_spinner() M._spinner_timer:stop() M._spinner_timer:close() M._spinner_timer = nil - vim.api.nvim_echo({ { " ", "Normal" } }, false, {}) + vim.api.nvim_echo({ { " ", "Normal" } }, false, {}) end end