Some refactoring (#20)
* feat: move all lua api into `api` module * feat: remove boilerplate code, add go work suport * refactor(utils): separete module for health * refactor(dap): remove copy-paste code * fix: comment * chore(lsp): disable type checking * feat: add `go work` command
This commit is contained in:
parent
d65884b182
commit
f835464d7f
13 changed files with 144 additions and 155 deletions
17
lua/gopher/_utils/_health.lua
Normal file
17
lua/gopher/_utils/_health.lua
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
return {
|
||||||
|
---@param lib string
|
||||||
|
---@return boolean
|
||||||
|
lualib_is_found = function(lib)
|
||||||
|
local is_found, _ = pcall(require, lib)
|
||||||
|
return is_found
|
||||||
|
end,
|
||||||
|
|
||||||
|
---@param bin string
|
||||||
|
---@return boolean
|
||||||
|
binary_is_found = function(bin)
|
||||||
|
if vim.fn.executable(bin) == 1 then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end,
|
||||||
|
}
|
||||||
40
lua/gopher/_utils/commands.lua
Normal file
40
lua/gopher/_utils/commands.lua
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
local Job = require "plenary.job"
|
||||||
|
local c = require("gopher.config").config.commands
|
||||||
|
local u = require "gopher._utils"
|
||||||
|
|
||||||
|
---Run any go commands like `go generate`, `go get`, `go mod`
|
||||||
|
---@param cmd string
|
||||||
|
---@param ... string|string[]
|
||||||
|
return function(cmd, ...)
|
||||||
|
local args = { ... }
|
||||||
|
if #args == 0 then
|
||||||
|
u.notify("please provice any arguments", "error")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if cmd == "generate" and #args == 1 and args[1] == "%" then
|
||||||
|
args[1] = vim.fn.expand "%" ---@diagnostic disable-line: missing-parameter
|
||||||
|
elseif cmd == "get" then
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
---@diagnostic disable-next-line: param-type-mismatch
|
||||||
|
local m = string.match(arg, "^https://(.*)$") or string.match(arg, "^http://(.*)$") or arg
|
||||||
|
table.remove(args, i)
|
||||||
|
table.insert(args, i, m)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local cmd_args = vim.list_extend({ cmd }, args) ---@diagnostic disable-line: missing-parameter
|
||||||
|
Job:new({
|
||||||
|
command = c.go,
|
||||||
|
args = cmd_args,
|
||||||
|
on_exit = function(_, retval)
|
||||||
|
if retval ~= 0 then
|
||||||
|
u.notify("command 'go " .. unpack(cmd_args) .. "' exited with code " .. retval, "error")
|
||||||
|
u.notify(cmd .. " " .. unpack(cmd_args), "debug")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
u.notify("go " .. cmd .. " was success runned", "info")
|
||||||
|
end,
|
||||||
|
}):start()
|
||||||
|
end
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
---@diagnostic disable: param-type-mismatch
|
||||||
return {
|
return {
|
||||||
---@param t table
|
---@param t table
|
||||||
---@return boolean
|
---@return boolean
|
||||||
|
|
@ -20,23 +21,6 @@ return {
|
||||||
return s:sub(1, n)
|
return s:sub(1, n)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
---@param lib string
|
|
||||||
---@return boolean
|
|
||||||
lualib_is_found = function(lib)
|
|
||||||
local is_found, _ = pcall(require, lib)
|
|
||||||
return is_found
|
|
||||||
end,
|
|
||||||
|
|
||||||
---@param bin string
|
|
||||||
---@return boolean
|
|
||||||
binary_is_found = function(bin)
|
|
||||||
if vim.fn.executable(bin) == 1 then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
|
||||||
end,
|
|
||||||
|
|
||||||
---@param msg string
|
---@param msg string
|
||||||
---@param lvl string|integer
|
---@param lvl string|integer
|
||||||
notify = function(msg, lvl)
|
notify = function(msg, lvl)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
---@diagnostic disable: param-type-mismatch
|
||||||
local nodes = require "gopher._utils.ts.nodes"
|
local nodes = require "gopher._utils.ts.nodes"
|
||||||
local u = require "gopher._utils"
|
local u = require "gopher._utils"
|
||||||
local M = {
|
local M = {
|
||||||
|
|
@ -24,13 +25,17 @@ end
|
||||||
---@param row string
|
---@param row string
|
||||||
---@param col string
|
---@param col string
|
||||||
---@param bufnr string|nil
|
---@param bufnr string|nil
|
||||||
|
---@param do_notify boolean|nil
|
||||||
---@return table|nil
|
---@return table|nil
|
||||||
function M.get_struct_node_at_pos(row, col, bufnr)
|
function M.get_struct_node_at_pos(row, col, bufnr, do_notify)
|
||||||
|
local notify = do_notify or true
|
||||||
local query = M.querys.struct_block .. " " .. M.querys.em_struct_block
|
local query = M.querys.struct_block .. " " .. M.querys.em_struct_block
|
||||||
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
||||||
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
||||||
if ns == nil then
|
if ns == nil then
|
||||||
|
if notify then
|
||||||
u.notify("struct not found", "warn")
|
u.notify("struct not found", "warn")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return ns[#ns]
|
return ns[#ns]
|
||||||
end
|
end
|
||||||
|
|
@ -39,13 +44,17 @@ end
|
||||||
---@param row string
|
---@param row string
|
||||||
---@param col string
|
---@param col string
|
||||||
---@param bufnr string|nil
|
---@param bufnr string|nil
|
||||||
|
---@param do_notify boolean|nil
|
||||||
---@return table|nil
|
---@return table|nil
|
||||||
function M.get_func_method_node_at_pos(row, col, bufnr)
|
function M.get_func_method_node_at_pos(row, col, bufnr, do_notify)
|
||||||
|
local notify = do_notify or true
|
||||||
local query = M.querys.func .. " " .. M.querys.method_name
|
local query = M.querys.func .. " " .. M.querys.method_name
|
||||||
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
||||||
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
||||||
if ns == nil then
|
if ns == nil then
|
||||||
|
if notify then
|
||||||
u.notify("function not found", "warn")
|
u.notify("function not found", "warn")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return ns[#ns]
|
return ns[#ns]
|
||||||
end
|
end
|
||||||
|
|
@ -54,16 +63,20 @@ end
|
||||||
---@param row string
|
---@param row string
|
||||||
---@param col string
|
---@param col string
|
||||||
---@param bufnr string|nil
|
---@param bufnr string|nil
|
||||||
|
---@param do_notify boolean|nil
|
||||||
---@return table|nil
|
---@return table|nil
|
||||||
function M.get_package_node_at_pos(row, col, bufnr)
|
function M.get_package_node_at_pos(row, col, bufnr, do_notify)
|
||||||
|
local notify = do_notify or true
|
||||||
-- stylua: ignore
|
-- stylua: ignore
|
||||||
if row > 10 then return end
|
if row > 10 then return end
|
||||||
local query = M.querys.package
|
local query = M.querys.package
|
||||||
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
||||||
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
||||||
if ns == nil then
|
if ns == nil then
|
||||||
|
if notify then
|
||||||
u.notify("package not found", "warn")
|
u.notify("package not found", "warn")
|
||||||
return nil
|
return nil
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return ns[#ns]
|
return ns[#ns]
|
||||||
end
|
end
|
||||||
|
|
@ -72,13 +85,17 @@ end
|
||||||
---@param row string
|
---@param row string
|
||||||
---@param col string
|
---@param col string
|
||||||
---@param bufnr string|nil
|
---@param bufnr string|nil
|
||||||
|
---@param do_notify boolean|nil
|
||||||
---@return table|nil
|
---@return table|nil
|
||||||
function M.get_interface_node_at_pos(row, col, bufnr)
|
function M.get_interface_node_at_pos(row, col, bufnr, do_notify)
|
||||||
|
local notify = do_notify or true
|
||||||
local query = M.querys.interface
|
local query = M.querys.interface
|
||||||
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
local bufn = bufnr or vim.api.nvim_get_current_buf()
|
||||||
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
|
||||||
if ns == nil then
|
if ns == nil then
|
||||||
|
if notify then
|
||||||
u.notify("interface not found", "warn")
|
u.notify("interface not found", "warn")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
return ns[#ns]
|
return ns[#ns]
|
||||||
end
|
end
|
||||||
|
|
|
||||||
29
lua/gopher/api.lua
Normal file
29
lua/gopher/api.lua
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
local API = {}
|
||||||
|
local tags = require "gopher.struct_tags"
|
||||||
|
local tests = require "gopher.gotests"
|
||||||
|
local cmd = require "gopher._utils.commands"
|
||||||
|
|
||||||
|
API.install_deps = require "gopher.installer"
|
||||||
|
API.tags_add = tags.add
|
||||||
|
API.tags_rm = tags.remove
|
||||||
|
API.impl = require "gopher.impl"
|
||||||
|
API.iferr = require "gopher.iferr"
|
||||||
|
API.comment = require "gopher.comment"
|
||||||
|
API.test_add = tests.func_test
|
||||||
|
API.test_exported = tests.all_exported_tests
|
||||||
|
API.tests_all = tests.all_tests
|
||||||
|
|
||||||
|
API.get = function(...)
|
||||||
|
cmd("get", ...)
|
||||||
|
end
|
||||||
|
API.mod = function(...)
|
||||||
|
cmd("mod", ...)
|
||||||
|
end
|
||||||
|
API.generate = function(...)
|
||||||
|
cmd("generate", ...)
|
||||||
|
end
|
||||||
|
API.work = function(...)
|
||||||
|
cmd("work", ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
return API
|
||||||
|
|
@ -3,25 +3,25 @@ local ts_utils = require "gopher._utils.ts"
|
||||||
local function generate(row, col)
|
local function generate(row, col)
|
||||||
local comment, ns = nil, nil
|
local comment, ns = nil, nil
|
||||||
|
|
||||||
ns = ts_utils.get_package_node_at_pos(row, col)
|
ns = ts_utils.get_package_node_at_pos(row, col, nil, false)
|
||||||
if ns ~= nil then
|
if ns ~= nil then
|
||||||
comment = "// Package " .. ns.name .. " provides " .. ns.name
|
comment = "// Package " .. ns.name .. " provides " .. ns.name
|
||||||
return comment, ns
|
return comment, ns
|
||||||
end
|
end
|
||||||
|
|
||||||
ns = ts_utils.get_struct_node_at_pos(row, col)
|
ns = ts_utils.get_struct_node_at_pos(row, col, nil, false)
|
||||||
if ns ~= nil then
|
if ns ~= nil then
|
||||||
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
||||||
return comment, ns
|
return comment, ns
|
||||||
end
|
end
|
||||||
|
|
||||||
ns = ts_utils.get_func_method_node_at_pos(row, col)
|
ns = ts_utils.get_func_method_node_at_pos(row, col, nil, false)
|
||||||
if ns ~= nil then
|
if ns ~= nil then
|
||||||
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
||||||
return comment, ns
|
return comment, ns
|
||||||
end
|
end
|
||||||
|
|
||||||
ns = ts_utils.get_interface_node_at_pos(row, col)
|
ns = ts_utils.get_interface_node_at_pos(row, col, nil, false)
|
||||||
if ns ~= nil then
|
if ns ~= nil then
|
||||||
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
comment = "// " .. ns.name .. " " .. ns.type .. " "
|
||||||
return comment, ns
|
return comment, ns
|
||||||
|
|
@ -39,6 +39,7 @@ return function()
|
||||||
ns.dim.s.c,
|
ns.dim.s.c,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: param-type-mismatch
|
||||||
vim.fn.append(row - 1, comment)
|
vim.fn.append(row - 1, comment)
|
||||||
|
|
||||||
vim.api.nvim_win_set_cursor(0, {
|
vim.api.nvim_win_set_cursor(0, {
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
|
---@diagnostic disable: param-type-mismatch
|
||||||
local function get_arguments()
|
local function get_arguments()
|
||||||
|
local function get()
|
||||||
|
vim.ui.input({ prompt = "Args: " }, function(input)
|
||||||
|
return vim.split(input or "", " ") ---@diagnostic disable-line: missing-parameter
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
local co = coroutine.running()
|
local co = coroutine.running()
|
||||||
if co then
|
if co then
|
||||||
return coroutine.create(function()
|
return coroutine.create(function()
|
||||||
local args = {}
|
local args = get()
|
||||||
vim.ui.input({ prompt = "Args: " }, function(input)
|
|
||||||
args = vim.split(input or "", " ")
|
|
||||||
end)
|
|
||||||
coroutine.resume(co, args)
|
coroutine.resume(co, args)
|
||||||
end)
|
end)
|
||||||
else
|
else
|
||||||
local args = {}
|
return get()
|
||||||
vim.ui.input({ prompt = "Args: " }, function(input)
|
|
||||||
args = vim.split(input or "", " ")
|
|
||||||
end)
|
|
||||||
return args
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
local Job = require "plenary.job"
|
|
||||||
local c = require("gopher.config").config.commands
|
|
||||||
local u = require "gopher._utils"
|
|
||||||
|
|
||||||
---run "go generate"
|
|
||||||
return function(...)
|
|
||||||
local args = { ... }
|
|
||||||
if #args == 1 and args[1] == "%" then
|
|
||||||
args[1] = vim.fn.expand "%" ---@diagnostic disable-line: missing-parameter
|
|
||||||
end
|
|
||||||
|
|
||||||
local cmd_args = vim.list_extend({ "generate" }, args)
|
|
||||||
|
|
||||||
Job:new({
|
|
||||||
command = c.go,
|
|
||||||
args = cmd_args,
|
|
||||||
on_exit = function(_, retval)
|
|
||||||
if retval ~= 0 then
|
|
||||||
u.notify("command 'go " .. unpack(cmd_args) .. "' exited with code " .. retval, "error")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
u.notify("go generate was success runned", "info")
|
|
||||||
end,
|
|
||||||
}):start()
|
|
||||||
end
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
local Job = require "plenary.job"
|
|
||||||
local c = require("gopher.config").config.commands
|
|
||||||
local u = require "gopher._utils"
|
|
||||||
|
|
||||||
---run "go get"
|
|
||||||
return function(...)
|
|
||||||
local args = { ... }
|
|
||||||
if #args == 0 then
|
|
||||||
u.notify("please provide a package url to get", "error")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
for i, arg in ipairs(args) do
|
|
||||||
local m = string.match(arg, "^https://(.*)$") or string.match(arg, "^http://(.*)$") or arg
|
|
||||||
table.remove(args, i)
|
|
||||||
table.insert(args, i, m)
|
|
||||||
end
|
|
||||||
|
|
||||||
local cmd_args = vim.list_extend({ "get" }, args)
|
|
||||||
|
|
||||||
Job:new({
|
|
||||||
command = c.go,
|
|
||||||
args = cmd_args,
|
|
||||||
on_exit = function(_, retval)
|
|
||||||
if retval ~= 0 then
|
|
||||||
u.notify("command 'go " .. unpack(cmd_args) .. "' exited with code " .. retval, "error")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
u.notify("go get was success runned", "info")
|
|
||||||
end,
|
|
||||||
}):start()
|
|
||||||
end
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
local Job = require "plenary.job"
|
|
||||||
local c = require("gopher.config").config.commands
|
|
||||||
local u = require "gopher._utils"
|
|
||||||
|
|
||||||
---run "go mod"
|
|
||||||
return function(...)
|
|
||||||
local args = { ... }
|
|
||||||
if #args == 0 then
|
|
||||||
u.notify("please provide any mod command", "error")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local cmd_args = vim.list_extend({ "mod" }, args)
|
|
||||||
|
|
||||||
Job:new({
|
|
||||||
command = c.go,
|
|
||||||
args = cmd_args,
|
|
||||||
on_exit = function(_, retval)
|
|
||||||
if retval ~= 0 then
|
|
||||||
u.notify("command 'go " .. unpack(cmd_args) .. "' exited with code " .. retval, "error")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
u.notify("go mod was success runned", "info")
|
|
||||||
end,
|
|
||||||
}):start()
|
|
||||||
end
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
local health = vim.health or require "health"
|
local health = vim.health or require "health"
|
||||||
local utils = require "gopher._utils"
|
local utils = require "gopher._utils._health"
|
||||||
local c = require("gopher.config").config.commands
|
local c = require("gopher.config").config.commands
|
||||||
|
|
||||||
local requried = "Gopher.nvim will not work without it!"
|
local requried = "Gopher.nvim will not work without it!"
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,5 @@
|
||||||
local tags = require "gopher.struct_tags"
|
local GOPHER = {}
|
||||||
local gotests = require "gopher.gotests"
|
|
||||||
local gopher = {}
|
|
||||||
|
|
||||||
gopher.install_deps = require "gopher.installer"
|
GOPHER.setup = require("gopher.config").setup
|
||||||
gopher.tags_add = tags.add
|
|
||||||
gopher.tags_rm = tags.remove
|
|
||||||
gopher.mod = require "gopher.gomod"
|
|
||||||
gopher.get = require "gopher.goget"
|
|
||||||
gopher.impl = require "gopher.impl"
|
|
||||||
gopher.generate = require "gopher.gogenerate"
|
|
||||||
gopher.iferr = require "gopher.iferr"
|
|
||||||
gopher.comment = require "gopher.comment"
|
|
||||||
gopher.test_add = gotests.func_test
|
|
||||||
gopher.test_exported = gotests.all_exported_tests
|
|
||||||
gopher.tests_all = gotests.all_tests
|
|
||||||
gopher.setup = require("gopher.config").setup
|
|
||||||
|
|
||||||
return gopher
|
return GOPHER
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
command! -nargs=* GoTagAdd :lua require"gopher".tags_add(<f-args>)
|
command! -nargs=* GoTagAdd :lua require"gopher.api".tags_add(<f-args>)
|
||||||
command! -nargs=* GoTagRm :lua require"gopher".tags_rm(<f-args>)
|
command! -nargs=* GoTagRm :lua require"gopher.api".tags_rm(<f-args>)
|
||||||
command! -nargs=* GoTestAdd :lua require"gopher".test_add(<f-args>)
|
command! -nargs=* GoTestAdd :lua require"gopher.api".test_add(<f-args>)
|
||||||
command! -nargs=* GoTestsAll :lua require"gopher".tests_all(<f-args>)
|
command! -nargs=* GoTestsAll :lua require"gopher.api".tests_all(<f-args>)
|
||||||
command! -nargs=* GoTestsExp :lua require"gopher".test_exported(<f-args>)
|
command! -nargs=* GoTestsExp :lua require"gopher.api".test_exported(<f-args>)
|
||||||
command! -nargs=* GoMod :lua require"gopher".mod(<f-args>)
|
command! -nargs=* GoMod :lua require"gopher.api".mod(<f-args>)
|
||||||
command! -nargs=* GoGet :lua require"gopher".get(<f-args>)
|
command! -nargs=* GoGet :lua require"gopher.api".get(<f-args>)
|
||||||
command! -nargs=* GoImpl :lua require"gopher".impl(<f-args>)
|
command! -nargs=* GoWork :lua require"gopher.api".work(<f-args>)
|
||||||
command! -nargs=* GoGenerate :lua require"gopher".generate(<f-args>)
|
command! -nargs=* GoImpl :lua require"gopher.api".impl(<f-args>)
|
||||||
command! GoCmt :lua require"gopher".comment()
|
command! -nargs=* GoGenerate :lua require"gopher.api".generate(<f-args>)
|
||||||
command! GoIfErr :lua require"gopher".iferr()
|
command! GoCmt :lua require"gopher.api".comment()
|
||||||
command! GoInstallDeps :lua require"gopher".install_deps()
|
command! GoIfErr :lua require"gopher.api".iferr()
|
||||||
|
command! GoInstallDeps :lua require"gopher.api".install_deps()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue