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
This commit is contained in:
Smirnov Oleksandr 2025-03-21 21:44:42 +02:00 committed by GitHub
parent c5cc5080fa
commit 9aa0038125
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 108 additions and 50 deletions

View file

@ -22,9 +22,8 @@ sudo pacman -S selene stylua
For formatting use this following commands, or setup your editor to integrate with selene/stylua: For formatting use this following commands, or setup your editor to integrate with selene/stylua:
```bash ```bash
task format task stylua
task format:check # will check if your code formatted task lint # lintering and format chewing
task lint
``` ```
### Documentation ### Documentation
@ -43,8 +42,8 @@ We use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), p
### Testing ### Testing
For testing this plugins uses [plenary.nvim](https://github.com/nvim-lua/plenary.nvim). For testing this plugins uses [mini.test](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-test.md).
All tests live in [/spec](https://github.com/olexsmir/gopher.nvim/tree/main/spec) dir. All tests live in [/spec](./spec) dir.
You can run tests with: You can run tests with:
```bash ```bash

View file

@ -1,26 +1,16 @@
version: "3" version: "3"
tasks: tasks:
format:
desc: formats all lua files in repo
cmds:
- stylua .
lint: lint:
desc: runs all linters desc: runs all linters
cmds: cmds:
- task: selene - task: selene
- task: stylua:check - stylua --check .
selene: selene:
desc: runs lua linter(selene) desc: runs lua linter(selene)
cmds: cmds:
- selene . - selene .
stylua:check:
desc: runs stylua in check mode
cmds:
- stylua --check .
stylua: stylua:
desc: runs lua formatter desc: runs lua formatter
cmds: cmds:

View file

@ -1,3 +0,0 @@
function! health#gopher#check()
lua require("gopher.health").check()
endfunction

View file

@ -61,6 +61,10 @@ You can look at default options |gopher.nvim-config-defaults|
---@type number ---@type number
timeout = 2000, timeout = 2000,
--- whether to setup plugin commands or not
---@type boolean
setup_commands = true,
-- user specified paths to binaries -- user specified paths to binaries
---@class gopher.ConfigCommand ---@class gopher.ConfigCommand
commands = { commands = {

View file

@ -25,9 +25,9 @@ end
---@param subcmd string ---@param subcmd string
---@param args string[] ---@param args string[]
---@return string[]|nil ---@return string
function gocmd.run(subcmd, args) function gocmd.run(subcmd, args)
if #args == 0 then if #args == 0 and subcmd ~= "generate" then
error "please provide any arguments" error "please provide any arguments"
end end
@ -39,15 +39,13 @@ function gocmd.run(subcmd, args)
args = if_generate(args) args = if_generate(args)
end end
return r.sync(c.go, { local rs = r.sync { c.go, subcmd, unpack(args) }
args = { subcmd, unpack(args) }, if rs.code ~= 0 then
on_exit = function(data, status) error("go " .. subcmd .. " failed: " .. rs.stderr)
if status ~= 0 then
error("gocmd failed: " .. data)
end end
u.notify(c.go .. " " .. subcmd .. " ran successful") u.notify(c.go .. " " .. subcmd .. " ran successful")
end, return rs.stdout
})
end end
return gocmd return gocmd

View file

@ -37,6 +37,10 @@ local default_config = {
---@type number ---@type number
timeout = 2000, timeout = 2000,
--- whether to setup plugin commands or not
---@type boolean
setup_commands = true,
-- user specified paths to binaries -- user specified paths to binaries
---@class gopher.ConfigCommand ---@class gopher.ConfigCommand
commands = { commands = {
@ -90,10 +94,18 @@ function config.setup(user_config)
_config = vim.tbl_deep_extend("force", default_config, user_config or {}) _config = vim.tbl_deep_extend("force", default_config, user_config or {})
end end
---@return boolean
---@private
function config.should_setup_commands()
return config.setup_commands
end
setmetatable(config, { setmetatable(config, {
__index = function(_, key) __index = function(_, key)
return _config[key] return _config[key]
end, end,
}) })
---@return gopher.Config
---@private
return config return config

View file

@ -55,19 +55,19 @@ gopher.test = {
} }
gopher.get = function(...) gopher.get = function(...)
gocmd("get", { ... }) gocmd("get", ...)
end end
gopher.mod = function(...) gopher.mod = function(...)
gocmd("mod", { ... }) gocmd("mod", ...)
end end
gopher.generate = function(...) gopher.generate = function(...)
gocmd("generate", { ... }) gocmd("generate", ...)
end end
gopher.work = function(...) gopher.work = function(...)
gocmd("work", { ... }) gocmd("work", ...)
end end
return gopher return gopher

74
plugin/gopher.lua Normal file
View file

@ -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)

View file

@ -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())