You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go.nvim/lua/go/commands.lua

301 lines
9.8 KiB
Lua

local vfn = vim.fn
local create_cmd = function(cmd, func, opt)
opt = vim.tbl_extend("force", { desc = "go.nvim " .. cmd }, opt or {})
vim.api.nvim_create_user_command(cmd, func, opt)
end
local dap_config = function()
local dap = require("dap")
create_cmd("BreakCondition", function(_)
dap.set_breakpoint(vfn.input("Breakpoint condition: "))
end)
create_cmd("ReplRun", function(_)
dap.repl.run_last()
end)
create_cmd("ReplToggle", function(_)
dap.repl.toggle()
end)
create_cmd("ReplOpen", function(_)
dap.repl.open()
vim.cmd("split")
end)
create_cmd("DapRerun", function(_)
dap.disconnect()
dap.close()
dap.run_last()
end)
end
return {
add_cmds = function()
vim.cmd([[
augroup go.filetype
autocmd!
autocmd FileType go setlocal omnifunc=v:lua.vim.lsp.omnifunc
autocmd FileType go au QuickFixCmdPost [^l]* nested cwindow
autocmd FileType go au QuickFixCmdPost l* nested lwindow
augroup end
]])
create_cmd("GoMake", function(_)
require("go.asyncmake").make()
end)
create_cmd("GoFmt", function(opts)
require("go.format").gofmt(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoImport", function(opts)
require("go.format").goimport(unpack(opts.fargs))
end, { complete = package.loaded.go.doc_complete, nargs = "*" })
create_cmd("GoGet", function(opts)
require("go.goget").run(unpack(opts.fargs), { nargs = "*" })
end)
local gobin = _GO_NVIM_CFG.go
local cmd = string.format([[command! GoGenerate :setl makeprg=%s\ generate | :GoMake]], gobin)
vim.cmd(cmd)
cmd = string.format(
[[command! -nargs=* -complete=custom,v:lua.package.loaded.go.package_complete GoBuild :setl makeprg=%s\ build | lua require'go.asyncmake'.make(<f-args>)]],
gobin
)
vim.cmd(cmd)
cmd = string.format(
[[command! -nargs=* -complete=custom,v:lua.package.loaded.go.package_complete GoVet :setl makeprg=%s\ vet | lua require'go.asyncmake'.make(<f-args>)]],
gobin
)
vim.cmd(cmd)
cmd = string.format(
[[command! -nargs=* -complete=custom,v:lua.package.loaded.go.package_complete GoRun :setl makeprg=%s\ run | lua require'go.asyncmake'.make(<f-args>)]],
gobin
)
vim.cmd(cmd)
create_cmd("GoStop", function(opts)
require("go.asyncmake").stopjob(unpack(opts.fargs), { nargs = "*" })
end)
-- if you want to output to quickfix
-- example to running test in split buffer
-- vim.cmd(
-- [[command! -nargs=* -complete=custom,v:lua.package.loaded.go.package_complete GoTest :setl makeprg=go\ test\ -v\ | lua require'go.runner'.make(<f-args>)]])
create_cmd("GoTest", function(opts)
require("go.gotest").test(unpack(opts.fargs))
end, { complete = package.loaded.go.package_complete, nargs = "*" })
create_cmd("GoCoverage", function(opts)
require("go.coverage").run(unpack(opts.fargs))
end, { complete = package.loaded.go.package_complete, nargs = "*" })
create_cmd("GoPkgOutline", function(opts)
require("go.package").outline(unpack(opts.fargs))
end, { complete = package.loaded.go.package_complete, nargs = "*" })
-- vim.cmd([[command! GoTestCompile :setl makeprg=go\ build | :GoMake]])
--print-issued-lines=false
vim.cmd(
[[command! GoLint :setl makeprg=golangci-lint\ run\ --print-issued-lines=false\ --exclude-use-default=false | :GoMake]]
)
create_cmd("GoProject", function(opts)
require("go.project").setup()
end)
create_cmd("GoCheat", function(opts)
require("go.chtsh").run(unpack(opts.fargs), { nargs = "*" })
end)
-- e.g. GoTestFunc unit
create_cmd("GoTestFunc", function(opts)
require("go.gotest").test_func(unpack(opts.fargs), { nargs = "*" })
end)
-- e.g. GoTestFile unit
-- command! -nargs=* -complete=custom,v:lua.package.loaded.go.package_complete GoTestFile lua require('go.gotest').test_file(<f-args>)
create_cmd("GoTestFile", function(opts)
require("go.gotest").test_file(unpack(opts.fargs))
end, { complete = package.loaded.go.package_complete, nargs = "*" })
create_cmd("GoTestPkg", function(opts)
require("go.gotest").test_package(unpack(opts.fargs))
end, { complete = package.loaded.go.package_complete, nargs = "*" })
create_cmd("GoAddTest", function(opts)
require("go.gotests").fun_test(unpack(opts.fargs))
end)
create_cmd("GoAddExpTest", function(opts)
require("go.gotests").exported_test(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoAddAllTest", function(opts)
require("go.gotests").all_test(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoModVendor", function(opts)
require("go.mod").run(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoModInit", function(opts)
require("go.mod").run(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoEnv", function(opts)
require("go.env").load_env(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoCodeLenAct", function(_)
require("go.codelens").run_action()
end)
create_cmd("GoCodeAction", function(_)
require("go.codeaction").run_action()
end)
create_cmd("GoModifyTag", function(opts)
require("go.tags").modify(unpack(opts.fargs))
end, { complete = package.loaded.go.modify_tags_complete, nargs = "*" })
create_cmd("GoAddTag", function(opts)
require("go.tags").add(unpack(opts.fargs))
end, { complete = package.loaded.go.add_tags_complete, nargs = "*" })
create_cmd("GoRmTag", function(opts)
require("go.tags").rm(unpack(opts.fargs), { nargs = "*" })
end)
create_cmd("GoImpl", function(opts)
require("go.impl").run(unpack(opts.fargs))
end, { complete = package.loaded.go.impl_complete, nargs = "*" })
create_cmd("GoDoc", function(opts)
require("go.godoc").run(unpack(opts.fargs))
end, { complete = package.loaded.go.doc_complete, nargs = "*" })
create_cmd("GoInstallBinary", function(opts)
require("go.install").install(unpack(opts.fargs))
end, { complete = package.loaded.go.tools_complete, nargs = "*" })
create_cmd("GoUpdateBinary", function(opts)
require("go.install").update(unpack(opts.fargs))
end, { complete = package.loaded.go.tools_complete, nargs = "*" })
create_cmd("GoInstallBinaries", function(_)
require("go.install").install_all()
end)
create_cmd("GoUpdateBinaries", function(_)
require("go.install").update_all()
end)
create_cmd("GoClearTag", function(_)
require("go.tags").clear()
end)
create_cmd("GoCmt", function(_)
require("go.comment").gen()
end)
create_cmd("GoRename", function(_)
require("go.rename").lsprename()
end)
create_cmd("GoIfErr", function(_)
require("go.iferr").run()
end)
create_cmd("GoFillStruct", function(_)
require("go.reftool").fillstruct()
end)
create_cmd("GoFillSwitch", function(_)
require("go.reftool").fillswitch()
end)
create_cmd("GoFixPlurals", function(_)
require("go.fixplurals").fixplurals()
end)
create_cmd("GoAlt", function(opts)
require("go.alternate").switch(opts.bang, "")
end, { bang = true })
create_cmd("GoAltV", function(opts)
require("go.alternate").switch(opts.bang, "vsplit")
end, { bang = true })
create_cmd("GoAltS", function(opts)
require("go.alternate").switch(opts.bang, "split")
end, { bang = true })
create_cmd("GoModTidy", function(_)
require("go.gopls").tidy()
end)
create_cmd("GoListImports", function(_)
print(vim.inspect(require("go.gopls").list_imports()))
end)
create_cmd("GoCallstack", function(_)
require("go.guru").callstack(-1)
end)
create_cmd("GoChannel", function(_)
require("go.guru").channel_peers(-1)
end)
if _GO_NVIM_CFG.dap_debug then
dap_config()
local dap = require("dap")
local gdap = require("go.dap")
create_cmd("GoDebug", function(opts)
gdap.run(unpack(opts.fargs))
end, { complete = package.loaded.go.dbg_complete, nargs = "*" })
create_cmd("GoCreateLaunch", function(_)
require("go.launch").config()
end)
create_cmd("GoCreateLaunch", function(_)
require("go.launch").config()
end)
create_cmd("GoBreakSave", function(_)
gdap.save_brks()
end)
create_cmd("GoBreakLoad", function(_)
gdap.load_brks()
end)
create_cmd("DapStop", function(_)
require("go.dap").stop()
end)
create_cmd("GoDbgConfig", function(_)
require("go.launch").config()
end)
create_cmd("GoBreakToggle", function(_)
gdap.breakpt()
end)
create_cmd("GoDbgKeys", function(_)
gdap.debug_keys()
end)
create_cmd("BreakCondition", function(_)
dap.set_breakpoint(vfn.input("Breakpoint condition: "))
end)
create_cmd("ReplRun", function(_)
dap.repl.run_last()
end)
create_cmd("ReplToggle", function(_)
dap.repl.toggle()
end)
create_cmd("ReplOpen", function(_)
dap.open()
vim.cmd("split")
end)
create_cmd("DapRerun", function(_)
dap.disconnect()
dap.close()
dap.run_last()
end)
create_cmd("DapUiFloat", function(_)
require("dapui").float_element()
end)
create_cmd("DapUiToggle", function(_)
require("dapui").toggle()
end)
create_cmd("GoDbgStop", function(_)
gdap.stop(true)
end)
create_cmd("GoDbgContinue", function(_)
dap.continue()
end)
end
create_cmd("GoMockGen", require("go.mockgen").run, {
nargs = "*",
-- bang = true,
complete = function(ArgLead, CmdLine, CursorPos)
-- return completion candidates as a list-like table
return { "-p", "-d", "-i", "-s" }
end,
})
end,
}