diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1a825db..ef377e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,9 +22,8 @@ sudo pacman -S selene stylua For formatting use this following commands, or setup your editor to integrate with selene/stylua: ```bash -task format -task format:check # will check if your code formatted -task lint +task stylua +task lint # lintering and format chewing ``` ### Documentation @@ -43,8 +42,8 @@ We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), p ### Testing -For testing this plugins uses [plenary.nvim](https://github.com/nvim-lua/plenary.nvim). -All tests live in [/spec](https://github.com/olexsmir/gopher.nvim/tree/main/spec) dir. +For testing this plugins uses [mini.test](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-test.md). +All tests live in [/spec](./spec) dir. You can run tests with: ```bash diff --git a/Taskfile.yml b/Taskfile.yml index c6f5339..3900751 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,26 +1,16 @@ version: "3" tasks: - format: - desc: formats all lua files in repo - cmds: - - stylua . - lint: desc: runs all linters cmds: - task: selene - - task: stylua:check + - stylua --check . selene: desc: runs lua linter(selene) cmds: - selene . - stylua:check: - desc: runs stylua in check mode - cmds: - - stylua --check . - stylua: desc: runs lua formatter cmds: diff --git a/autoload/health/gopher.vim b/autoload/health/gopher.vim deleted file mode 100644 index 4e3c56d..0000000 --- a/autoload/health/gopher.vim +++ /dev/null @@ -1,3 +0,0 @@ -function! health#gopher#check() - lua require("gopher.health").check() -endfunction diff --git a/doc/gopher.nvim.txt b/doc/gopher.nvim.txt index a266fc9..1ad1cb5 100644 --- a/doc/gopher.nvim.txt +++ b/doc/gopher.nvim.txt @@ -61,6 +61,10 @@ You can look at default options |gopher.nvim-config-defaults| ---@type number timeout = 2000, + --- whether to setup plugin commands or not + ---@type boolean + setup_commands = true, + -- user specified paths to binaries ---@class gopher.ConfigCommand commands = { diff --git a/lua/gopher/_utils/runner/gocmd.lua b/lua/gopher/_utils/runner/gocmd.lua index 7e14456..a091c4f 100644 --- a/lua/gopher/_utils/runner/gocmd.lua +++ b/lua/gopher/_utils/runner/gocmd.lua @@ -25,9 +25,9 @@ end ---@param subcmd string ---@param args string[] ----@return string[]|nil +---@return string function gocmd.run(subcmd, args) - if #args == 0 then + if #args == 0 and subcmd ~= "generate" then error "please provide any arguments" end @@ -39,15 +39,13 @@ function gocmd.run(subcmd, args) args = if_generate(args) end - return r.sync(c.go, { - args = { subcmd, unpack(args) }, - on_exit = function(data, status) - if status ~= 0 then - error("gocmd failed: " .. data) - end - u.notify(c.go .. " " .. subcmd .. " ran successful") - end, - }) + local rs = r.sync { c.go, subcmd, unpack(args) } + if rs.code ~= 0 then + error("go " .. subcmd .. " failed: " .. rs.stderr) + end + + u.notify(c.go .. " " .. subcmd .. " ran successful") + return rs.stdout end return gocmd diff --git a/lua/gopher/config.lua b/lua/gopher/config.lua index 74cbff3..f5ea7ba 100644 --- a/lua/gopher/config.lua +++ b/lua/gopher/config.lua @@ -37,6 +37,10 @@ local default_config = { ---@type number timeout = 2000, + --- whether to setup plugin commands or not + ---@type boolean + setup_commands = true, + -- user specified paths to binaries ---@class gopher.ConfigCommand commands = { @@ -90,10 +94,18 @@ function config.setup(user_config) _config = vim.tbl_deep_extend("force", default_config, user_config or {}) end +---@return boolean +---@private +function config.should_setup_commands() + return config.setup_commands +end + setmetatable(config, { __index = function(_, key) return _config[key] end, }) +---@return gopher.Config +---@private return config diff --git a/lua/gopher/init.lua b/lua/gopher/init.lua index e1d136c..dfcefc9 100644 --- a/lua/gopher/init.lua +++ b/lua/gopher/init.lua @@ -55,19 +55,19 @@ gopher.test = { } gopher.get = function(...) - gocmd("get", { ... }) + gocmd("get", ...) end gopher.mod = function(...) - gocmd("mod", { ... }) + gocmd("mod", ...) end gopher.generate = function(...) - gocmd("generate", { ... }) + gocmd("generate", ...) end gopher.work = function(...) - gocmd("work", { ... }) + gocmd("work", ...) end return gopher diff --git a/plugin/gopher.lua b/plugin/gopher.lua new file mode 100644 index 0000000..1e9eb99 --- /dev/null +++ b/plugin/gopher.lua @@ -0,0 +1,74 @@ +--- NOTE: runs in defer since this file before gopher.config +--- I'm not sure if this is the best to do this +vim.schedule(function() + if require("gopher.config").should_setup_commands() then + vim.api.nvim_create_user_command("GopherLog", function() + vim.cmd("tabnew " .. require("gopher._utils.log").get_outfile()) + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoIfErr", function() + require("gopher").iferr() + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoCmt", function() + require("gopher").comment() + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoImpl", function(args) + require("gopher").impl(unpack(args.fargs)) + end, { nargs = "*" }) + + -- :GoInstall + vim.api.nvim_create_user_command("GoInstallDeps", function() + require("gopher").install_deps() + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoInstallDepsSync", function() + require("gopher").install_deps { sync = true } + end, { nargs = 0 }) + + --- :GoTag + vim.api.nvim_create_user_command("GoTagAdd", function(opts) + require("gopher").tags.add(unpack(opts.fargs)) + end, { nargs = "*" }) + + vim.api.nvim_create_user_command("GoTagRm", function(opts) + require("gopher").tags.rm(unpack(opts.fargs)) + end, { nargs = "*" }) + + vim.api.nvim_create_user_command("GoTagClear", function() + require("gopher").tags.clear() + end, { nargs = 0 }) + + --- :GoTest + vim.api.nvim_create_user_command("GoTestAdd", function() + require("gopher").test.add() + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoTestsAll", function() + require("gopher").test.all() + end, { nargs = 0 }) + + vim.api.nvim_create_user_command("GoTestsExp", function() + require("gopher").test.exported() + end, { nargs = 0 }) + + -- :Go + vim.api.nvim_create_user_command("GoMod", function(opts) + require("gopher").mod(opts.fargs) + end, { nargs = "*" }) + + vim.api.nvim_create_user_command("GoGet", function(opts) + vim.print(opts) + require("gopher").get(opts.fargs) + end, { nargs = "*" }) + + vim.api.nvim_create_user_command("GoWork", function(opts) + require("gopher").get(opts.fargs) + end, { nargs = "*" }) + + vim.api.nvim_create_user_command("GoGenerate", function(opts) + require("gopher").generate(opts.fargs or "") + end, { nargs = "?" }) + end +end) diff --git a/plugin/gopher.vim b/plugin/gopher.vim deleted file mode 100644 index dc924b9..0000000 --- a/plugin/gopher.vim +++ /dev/null @@ -1,16 +0,0 @@ -command! -nargs=* GoTagAdd :lua require"gopher".tags.add() -command! -nargs=* GoTagRm :lua require"gopher".tags.rm() -command! GoTagClear :lua require"gopher".tags.clear() -command! GoTestAdd :lua require"gopher".test.add() -command! GoTestsAll :lua require"gopher".test.all() -command! GoTestsExp :lua require"gopher".test.exported() -command! -nargs=* GoMod :lua require"gopher".mod() -command! -nargs=* GoGet :lua require"gopher".get() -command! -nargs=* GoWork :lua require"gopher".work() -command! -nargs=* GoImpl :lua require"gopher".impl() -command! -nargs=* GoGenerate :lua require"gopher".generate() -command! GoCmt :lua require"gopher".comment() -command! GoIfErr :lua require"gopher".iferr() -command! GoInstallDeps :lua require"gopher".install_deps() -command! GoInstallDepsSync :lua require"gopher".install_deps({ sync = true }) -command! GopherLog :lua vim.cmd("tabnew " .. require("gopher._utils.log").get_outfile())