import save and auto format

pull/429/merge
ray-x 3 months ago
parent 872612174c
commit 3c497f6e5e

@ -24,12 +24,6 @@ local goimport_args = _GO_NVIM_CFG.goimport_args
'--base-formatter=goimports', '--base-formatter=goimports',
} }
if vim.lsp.buf.format == nil then
-- vim.notify('the vim.lsp.buf.format is not available, some feature is missing if you are running old version of neovim (<0.8.0)', vim.log.levels.DEBUG)
-- neovim < 0.7 only
require('go.lsp') -- this set default value of format
end
local M = {} local M = {}
M.lsp_format = function() M.lsp_format = function()
vim.lsp.buf.format({ vim.lsp.buf.format({
@ -49,6 +43,7 @@ end
local run = function(fmtargs, bufnr, cmd) local run = function(fmtargs, bufnr, cmd)
bufnr = bufnr or vim.api.nvim_get_current_buf() bufnr = bufnr or vim.api.nvim_get_current_buf()
log(fmtargs, bufnr, cmd) log(fmtargs, bufnr, cmd)
cmd = cmd or _GO_NVIM_CFG.gofmt or 'gofumpt'
if vim.o.mod == true then if vim.o.mod == true then
vim.cmd('noautocmd write') vim.cmd('noautocmd write')
end end
@ -65,11 +60,7 @@ local run = function(fmtargs, bufnr, cmd)
log('formatting buffer... ' .. vim.inspect(args), vim.log.levels.DEBUG) log('formatting buffer... ' .. vim.inspect(args), vim.log.levels.DEBUG)
local old_lines = api.nvim_buf_get_lines(0, 0, -1, true) local old_lines = api.nvim_buf_get_lines(0, 0, -1, true)
if cmd then table.insert(args, 1, cmd)
table.insert(args, 1, cmd)
else
table.insert(args, 1, 'golines')
end
log('fmt cmd:', args) log('fmt cmd:', args)
local j = vfn.jobstart(args, { local j = vfn.jobstart(args, {
@ -101,6 +92,9 @@ local run = function(fmtargs, bufnr, cmd)
end end
old_lines = nil old_lines = nil
vim.defer_fn(function() vim.defer_fn(function()
if cmd == 'goimport' then
return M.lsp_format()
end
if vfn.getbufinfo('%')[1].changed == 1 then if vfn.getbufinfo('%')[1].changed == 1 then
vim.cmd('noautocmd write') vim.cmd('noautocmd write')
end end
@ -159,9 +153,7 @@ M.gofmt = function(...)
end end
M.org_imports = function() M.org_imports = function()
require('go.lsp').codeaction('', 'source.organizeImports', function() require('go.lsp').codeaction('', 'source.organizeImports', M.gofmt)
M.gofmt()
end)
end end
M.goimport = function(...) M.goimport = function(...)

@ -82,7 +82,7 @@ local on_attach = function(client, bufnr)
table.insert(keymaps, { table.insert(keymaps, {
key = '<space>ff', key = '<space>ff',
func = function() func = function()
vim.lsp.buf.format({ async = true }) vim.lsp.buf.format({ async = _GO_NVIM_CFG.lsp_format_async })
end, end,
desc = 'format', desc = 'format',
}) })
@ -257,6 +257,7 @@ write", "source", "source.organizeImports" }
-- action / fix to take -- action / fix to take
-- only gopls -- only gopls
M.codeaction = function(gopls_cmd, only, hdlr) M.codeaction = function(gopls_cmd, only, hdlr)
hdlr = hdlr or function () end
local params = vim.lsp.util.make_range_params() local params = vim.lsp.util.make_range_params()
if not gopls_cmd:find('gopls') then if not gopls_cmd:find('gopls') then
gopls_cmd = 'gopls.' .. gopls_cmd gopls_cmd = 'gopls.' .. gopls_cmd
@ -277,7 +278,7 @@ M.codeaction = function(gopls_cmd, only, hdlr)
end end
if gopls == nil then if gopls == nil then
log('gopls not found') log('gopls not found')
return return hdlr()
end end
local ctx = { bufnr = bufnr, client_id = gopls.id } local ctx = { bufnr = bufnr, client_id = gopls.id }
@ -294,6 +295,7 @@ M.codeaction = function(gopls_cmd, only, hdlr)
if fn then if fn then
local enriched_ctx = vim.deepcopy(ctx) local enriched_ctx = vim.deepcopy(ctx)
fn(command, enriched_ctx) fn(command, enriched_ctx)
hdlr()
else else
gopls.request('workspace/executeCommand', { gopls.request('workspace/executeCommand', {
command = command.command, command = command.command,
@ -303,8 +305,12 @@ M.codeaction = function(gopls_cmd, only, hdlr)
if _err then if _err then
log('error', _err) log('error', _err)
end end
log('workspace/executeCommand', command.command, r)
hdlr()
end, bufnr) end, bufnr)
end end
else
hdlr()
end end
end end
local function ca_hdlr(err, result) local function ca_hdlr(err, result)
@ -314,7 +320,7 @@ M.codeaction = function(gopls_cmd, only, hdlr)
log('gocodeaction', err, result) log('gocodeaction', err, result)
if not result or next(result) == nil then if not result or next(result) == nil then
log('nil result for codeaction with parameters', gopls_cmd, only, bufnr, params) log('nil result for codeaction with parameters', gopls_cmd, only, bufnr, params)
return return hdlr()
end end
local actions = {} local actions = {}
for _, res in pairs(result) do for _, res in pairs(result) do
@ -326,7 +332,7 @@ M.codeaction = function(gopls_cmd, only, hdlr)
if #actions == 0 then if #actions == 0 then
log('no code actions available') log('no code actions available')
vim.notify('No code actions available', vim.log.levels.INFO) vim.notify('No code actions available', vim.log.levels.INFO)
return return hdlr()
end end
local action = actions[1] local action = actions[1]
@ -339,6 +345,7 @@ M.codeaction = function(gopls_cmd, only, hdlr)
else else
log('resolved', resolved_acrtion) log('resolved', resolved_acrtion)
vim.notify('No code actions available', vim.log.levels.INFO) vim.notify('No code actions available', vim.log.levels.INFO)
hdlr()
end end
else else
apply_action(resolved_acrtion) apply_action(resolved_acrtion)

Loading…
Cancel
Save