From aaae362ae8bbd9d284f28594359dda6fe5c8997e Mon Sep 17 00:00:00 2001 From: simrat39 Date: Sat, 24 Apr 2021 14:51:28 -0700 Subject: [PATCH] feat: Add code actions support Uses the default handler, mapped to 'a' --- lua/symbols-outline.lua | 4 ++++ lua/symbols-outline/code_action.lua | 31 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 lua/symbols-outline/code_action.lua diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index d53f772..7ec9fa2 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -143,6 +143,10 @@ local function setup_keymaps(bufnr) vim.api.nvim_buf_set_keymap(bufnr, "n", "r", ":lua require('symbols-outline.rename').rename()", {}) + -- code actions + vim.api.nvim_buf_set_keymap(bufnr, "n", "a", + ":lua require('symbols-outline.code_action').show_code_actions()", + {}) -- close outline when escape is pressed vim.api.nvim_buf_set_keymap(bufnr, "n", "", ":bw!",{}) end diff --git a/lua/symbols-outline/code_action.lua b/lua/symbols-outline/code_action.lua new file mode 100644 index 0000000..0b852c6 --- /dev/null +++ b/lua/symbols-outline/code_action.lua @@ -0,0 +1,31 @@ +local vim = vim + +local main = require('symbols-outline') + +local M = {} + +local function get_action_params(node, winnr) + local bufnr = vim.api.nvim_win_get_buf(winnr) + local fn = "file://" .. vim.api.nvim_buf_get_name(bufnr) + + local pos = {line = node.line, character = node.character} + local diagnostics = vim.lsp.diagnostic.get_line_diagnostics(bufnr, node.line) + return { + textDocument = {uri = fn}, + range = {start = pos, ["end"] = pos}, + context = {diagnostics = diagnostics}, + bufnr = bufnr + } +end + +function M.show_code_actions() + local current_line = vim.api.nvim_win_get_cursor(main.state.outline_win)[1] + local node = main.state.flattened_outline_items[current_line] + + local params = get_action_params(node, main.state.code_win) + + vim.lsp.buf_request(params.bufnr, "textDocument/codeAction", params, + vim.lsp.handlers["textDocument/codeAction"]) +end + +return M