From 165714cfea1cbd1ac810b243b415a13bd8e76ade Mon Sep 17 00:00:00 2001 From: ray-x Date: Thu, 11 Nov 2021 13:01:14 +1100 Subject: [PATCH] allow godoc focusable --- lua/go.lua | 7 +++++-- lua/go/godoc.lua | 5 ++++- lua/go/gopls.lua | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 lua/go/gopls.lua diff --git a/lua/go.lua b/lua/go.lua index ddc06d0..4ce15f3 100644 --- a/lua/go.lua +++ b/lua/go.lua @@ -23,7 +23,7 @@ _GO_NVIM_CFG = { dap_debug_gui = true, dap_vt = true, -- false, true and 'all frames' gopls_cmd = nil, --- you can provide gopls path and cmd if it not in PATH, e.g. cmd = { "/home/ray/.local/nvim/data/lspinstall/go/gopls" } - build_tags = "", --- you can provide extra build tags for tests or debugger + build_tags = "" --- you can provide extra build tags for tests or debugger } local dap_config = function() @@ -71,8 +71,11 @@ function go.setup(cfg) -- vim.cmd( -- [[command! -nargs=* GoTest :setl makeprg=go\ test\ -v\ ./...| lua require'go.asyncmake'.make()]]) + local sep = require('go.utils').sep() + local cmd = [[command! -nargs=* GoTest :setl makeprg=go\ test\ -v\ .]] .. sep + .. [[...| lua require'go.runner'.make(]] -- example to running test in split buffer - vim.cmd([[command! -nargs=* GoTest :setl makeprg=go\ test\ -v\ ./...| lua require'go.runner'.make()]]) + vim.cmd(cmd) vim.cmd([[command! -nargs=* GoCoverage lua require'go.coverage'.run()]]) -- vim.cmd([[command! GoTestCompile :setl makeprg=go\ build | :GoMake]]) diff --git a/lua/go/godoc.lua b/lua/go/godoc.lua index b013a6b..da49671 100644 --- a/lua/go/godoc.lua +++ b/lua/go/godoc.lua @@ -12,7 +12,10 @@ local run = function(func, ...) if not data then return end - vim.lsp.util.open_floating_preview(data, 'go', {border = 'single'}) + + local close_events = {"CursorMoved", "CursorMovedI", "BufHidden", "InsertCharPre"} + local config = {close_events = close_events, focusable = true, border = 'single'} + vim.lsp.util.open_floating_preview(data, 'go', config) end }) end diff --git a/lua/go/gopls.lua b/lua/go/gopls.lua new file mode 100644 index 0000000..e05b99d --- /dev/null +++ b/lua/go/gopls.lua @@ -0,0 +1,48 @@ +local utils = require 'go.utils' +local log = utils.log + +local M = {} +-- https://go.googlesource.com/tools/+/refs/heads/master/gopls/doc/commands.md +-- "executeCommandProvider":{"commands":["gopls.add_dependency","gopls.add_import","gopls.apply_fix","gopls.check_upgrades","gopls.gc_details","gopls.generate","gopls.generate_gopls_mod","gopls.go_get_package","gopls.list_known_packages","gopls.regenerate_cgo","gopls.remove_dependency","gopls.run_tests","gopls.start_debugging","gopls.test","gopls.tidy","gopls.toggle_gc_details","gopls.update_go_sum","gopls.upgrade_dependency","gopls.vendor","gopls.workspace_metadata"]} + +local gopls_cmds = { + "gopls.add_dependency", "gopls.add_import", "gopls.apply_fix", "gopls.check_upgrades", + "gopls.gc_details", "gopls.generate", "gopls.generate_gopls_mod", "gopls.go_get_package", + "gopls.list_known_packages", "gopls.regenerate_cgo", "gopls.remove_dependency", "gopls.run_tests", + "gopls.start_debugging", "gopls.test", "gopls.tidy", "gopls.toggle_gc_details", + "gopls.update_go_sum", "gopls.upgrade_dependency", "gopls.vendor", "gopls.workspace_metadata" +} + +local function check_for_error(msg) + if msg ~= nil and type(msg[1]) == 'table' then + for k, v in pairs(msg[1]) do + if k == 'error' then + log.error('LSP', v.message) + break + end + end + end +end + +for _, value in ipairs(gopls_cmds) do + local fname = string.sub(value, #'gopls.' + 1) + M[fname] = function(arg) + log(fname) + local b = vim.api.nvim_get_current_buf() + local uri = vim.uri_from_bufnr(b) + local arguments = {{URI = uri, URIs = {uri}}} + arguments = vim.tbl_extend('keep', arguments, arg or {}) + + local resp = vim.lsp.buf_request_sync(b, 'workspace/executeCommand', { + command = value, + arguments = arguments + }) + check_for_error(resp) + log(resp) + return resp + end +end + +-- check_for_upgrades({Modules = {'package'}}) + +return M