all repos

gopher.nvim @ 9aa003812504dce50715fe11c194181209bf8316

Minimalistic plugin for Go development
9 files changed, 108 insertions(+), 50 deletions(-)
refactor: minimize amount of vimscript (#96)

* refactor: remove autoload

* since nvim 0.9 health.lua files are threaded as checkhealth provider

*  prof of concept 

* fix(runner.gocmd)!: i forgot to update it when i was working on #85

* fix(plugin): now commands register properly

* fix(plugin): fix command name for :GoIfErr

* fix(plugin): respect `setup_commands` option

* docs: update

* refactor(plugin): use vim.schedule

* docs: update CONTRIBUTING
Author: Smirnov Oleksandr ss2316544@gmail.com
Committed by: GitHub noreply@github.com
Committed at: 2025-03-21 21:44:42 +0200
Parent: c5cc508
M CONTRIBUTING.md

@@ -22,9 +22,8 @@ ```

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/), please follow it.

### 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
M Taskfile.yml

@@ -1,25 +1,15 @@

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
D

@@ -1,3 +0,0 @@

-function! health#gopher#check() - lua require("gopher.health").check() -endfunction
M doc/gopher.nvim.txt

@@ -61,6 +61,10 @@ -- timeout for running commands

---@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 = {
M 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 @@ if subcmd == "generate" then

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
M lua/gopher/config.lua

@@ -37,6 +37,10 @@ -- timeout for running commands

---@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
M lua/gopher/init.lua

@@ -55,19 +55,19 @@ all = tests.all_tests,

} 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
A 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)
D

@@ -1,16 +0,0 @@

-command! -nargs=* GoTagAdd :lua require"gopher".tags.add(<f-args>) -command! -nargs=* GoTagRm :lua require"gopher".tags.rm(<f-args>) -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(<f-args>) -command! -nargs=* GoGet :lua require"gopher".get(<f-args>) -command! -nargs=* GoWork :lua require"gopher".work(<f-args>) -command! -nargs=* GoImpl :lua require"gopher".impl(<f-args>) -command! -nargs=* GoGenerate :lua require"gopher".generate(<f-args>) -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())