From 7e336020655d826983ef139d2622e3397fd228df Mon Sep 17 00:00:00 2001 From: Smirnov Oleksandr Date: Sat, 22 Mar 2025 17:06:57 +0200 Subject: [PATCH] refactor/comamnds dont require .setup (#101) * refactor(commands)!: change the way of disabling commands BREAKING CHANGE: not it does not require calling .setup() * docs: update docs --- doc/gopher.nvim.txt | 16 +++++--- lua/gopher/commands.lua | 82 -------------------------------------- lua/gopher/config.lua | 15 ------- lua/gopher/init.lua | 3 +- plugin/gopher.lua | 87 +++++++++++++++++++++++++++++++++++++++++ scripts/docgen.lua | 1 + 6 files changed, 101 insertions(+), 103 deletions(-) delete mode 100644 lua/gopher/commands.lua create mode 100644 plugin/gopher.lua diff --git a/doc/gopher.nvim.txt b/doc/gopher.nvim.txt index 4897447..56d8d6d 100644 --- a/doc/gopher.nvim.txt +++ b/doc/gopher.nvim.txt @@ -11,6 +11,7 @@ Table of Contents Setup....................................................|gopher.nvim-setup| Install dependencies..............................|gopher.nvim-install-deps| Configuration...........................................|gopher.nvim-config| + Commands..............................................|gopher.nvim-commands| Modify struct tags.................................|gopher.nvim-struct-tags| Auto implementation of interface methods..................|gopher.nvim-impl| Generating unit tests boilerplate......................|gopher.nvim-gotests| @@ -36,7 +37,8 @@ Parameters ~ Gopher.nvim implements most of its features using third-party tools. To install these tools, you can run `:GoInstallDeps` command or call `require("gopher").install_deps()` if you want to use lua api. -By default dependencies will be installed asynchronously, to install them synchronously pass `{sync = true}` as an argument. +By default dependencies will be installed asynchronously, +to install them synchronously pass `{sync = true}` as an argument. ============================================================================== @@ -61,10 +63,6 @@ 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 = { @@ -103,6 +101,14 @@ Class ~ {gopher.Config} +============================================================================== +------------------------------------------------------------------------------ + *gopher.nvim-commands* + +If don't want to automatically register plugins' commands, +you can set `vim.g.gopher_register_commands` to `false`, before loading the plugin. + + ============================================================================== ------------------------------------------------------------------------------ *gopher.nvim-struct-tags* diff --git a/lua/gopher/commands.lua b/lua/gopher/commands.lua deleted file mode 100644 index 63e9f3d..0000000 --- a/lua/gopher/commands.lua +++ /dev/null @@ -1,82 +0,0 @@ -local commands = {} - ----@param name string ----@param fn fun(args: table) ----@param nargs? number|"*"|"?" -local function cmd(name, fn, nargs) - nargs = nargs or 0 - vim.api.nvim_create_user_command(name, fn, { nargs = nargs }) -end - -function commands.register() - cmd("GopherLog", function() - vim.cmd("tabnew " .. require("gopher._utils.log").get_outfile()) - end) - - cmd("GoIfErr", function() - require("gopher").iferr() - end) - - cmd("GoCmt", function() - require("gopher").comment() - end) - - cmd("GoImpl", function(args) - require("gopher").impl(unpack(args.fargs)) - end, "*") - - -- :GoInstall - cmd("GoInstallDeps", function() - require("gopher").install_deps() - end) - - cmd("GoInstallDepsSync", function() - require("gopher").install_deps { sync = true } - end) - - --- :GoTag - cmd("GoTagAdd", function(opts) - require("gopher").tags.add(unpack(opts.fargs)) - end, "*") - - cmd("GoTagRm", function(opts) - require("gopher").tags.rm(unpack(opts.fargs)) - end, "*") - - cmd("GoTagClear", function() - require("gopher").tags.clear() - end) - - --- :GoTest - cmd("GoTestAdd", function() - require("gopher").test.add() - end) - - cmd("GoTestsAll", function() - require("gopher").test.all() - end) - - cmd("GoTestsExp", function() - require("gopher").test.exported() - end) - - -- :Go - cmd("GoMod", function(opts) - require("gopher").mod(opts.fargs) - end, "*") - - cmd("GoGet", function(opts) - vim.print(opts) - require("gopher").get(opts.fargs) - end, "*") - - cmd("GoWork", function(opts) - require("gopher").get(opts.fargs) - end, "*") - - cmd("GoGenerate", function(opts) - require("gopher").generate(opts.fargs or "") - end, "?") -end - -return commands diff --git a/lua/gopher/config.lua b/lua/gopher/config.lua index b954d1b..81b4119 100644 --- a/lua/gopher/config.lua +++ b/lua/gopher/config.lua @@ -37,10 +37,6 @@ 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 = { @@ -97,7 +93,6 @@ function config.setup(user_config) vim.validate { log_level = { _config.log_level, "number" }, timeout = { _config.timeout, "number" }, - setup_commands = { _config.setup_commands, "boolean" }, ["commands"] = { _config.commands, "table" }, ["commands.go"] = { _config.commands.go, "string" }, ["commands.gomodifytags"] = { _config.commands.gomodifytags, "string" }, @@ -114,16 +109,6 @@ function config.setup(user_config) ["iferr"] = { _config.iferr, "table" }, ["iferr.message"] = { _config.iferr.message, "string", true }, } - - if _config.setup_commands then - require("gopher.commands").register() - end -end - ----@return boolean ----@private -function config.should_setup_commands() - return config.setup_commands end setmetatable(config, { diff --git a/lua/gopher/init.lua b/lua/gopher/init.lua index 0028dcc..16cfb17 100644 --- a/lua/gopher/init.lua +++ b/lua/gopher/init.lua @@ -35,7 +35,8 @@ end ---@text Gopher.nvim implements most of its features using third-party tools. --- To install these tools, you can run `:GoInstallDeps` command --- or call `require("gopher").install_deps()` if you want to use lua api. ---- By default dependencies will be installed asynchronously, to install them synchronously pass `{sync = true}` as an argument. +--- By default dependencies will be installed asynchronously, +--- to install them synchronously pass `{sync = true}` as an argument. gopher.install_deps = require("gopher.installer").install_deps gopher.impl = require("gopher.impl").impl diff --git a/plugin/gopher.lua b/plugin/gopher.lua new file mode 100644 index 0000000..1ccc74e --- /dev/null +++ b/plugin/gopher.lua @@ -0,0 +1,87 @@ +---@toc_entry Commands +---@tag gopher.nvim-commands +---@text +--- If don't want to automatically register plugins' commands, +--- you can set `vim.g.gopher_register_commands` to `false`, before loading the plugin. + +if vim.g.gopher_register_commands == false then + return +end + +---@param name string +---@param fn fun(args: table) +---@param nargs? number|"*"|"?" +---@private +local function cmd(name, fn, nargs) + nargs = nargs or 0 + vim.api.nvim_create_user_command(name, fn, { nargs = nargs }) +end + +cmd("GopherLog", function() + vim.cmd("tabnew " .. require("gopher._utils.log").get_outfile()) +end) + +cmd("GoIfErr", function() + require("gopher").iferr() +end) + +cmd("GoCmt", function() + require("gopher").comment() +end) + +cmd("GoImpl", function(args) + require("gopher").impl(unpack(args.fargs)) +end, "*") + +-- :GoInstall +cmd("GoInstallDeps", function() + require("gopher").install_deps() +end) + +cmd("GoInstallDepsSync", function() + require("gopher").install_deps { sync = true } +end) + +-- :GoTag +cmd("GoTagAdd", function(opts) + require("gopher").tags.add(unpack(opts.fargs)) +end, "*") + +cmd("GoTagRm", function(opts) + require("gopher").tags.rm(unpack(opts.fargs)) +end, "*") + +cmd("GoTagClear", function() + require("gopher").tags.clear() +end) + +-- :GoTest +cmd("GoTestAdd", function() + require("gopher").test.add() +end) + +cmd("GoTestsAll", function() + require("gopher").test.all() +end) + +cmd("GoTestsExp", function() + require("gopher").test.exported() +end) + +-- :Go +cmd("GoMod", function(opts) + require("gopher").mod(opts.fargs) +end, "*") + +cmd("GoGet", function(opts) + vim.print(opts) + require("gopher").get(opts.fargs) +end, "*") + +cmd("GoWork", function(opts) + require("gopher").get(opts.fargs) +end, "*") + +cmd("GoGenerate", function(opts) + require("gopher").generate(opts.fargs or "") +end, "?") diff --git a/scripts/docgen.lua b/scripts/docgen.lua index 87cbd3a..381d3c4 100644 --- a/scripts/docgen.lua +++ b/scripts/docgen.lua @@ -10,6 +10,7 @@ end local files = { "lua/gopher/init.lua", "lua/gopher/config.lua", + "plugin/gopher.lua", "lua/gopher/struct_tags.lua", "lua/gopher/impl.lua", "lua/gopher/gotests.lua",