diff --git a/README.md b/README.md index 26d7a10..8d496f4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,11 @@ local qt = require 'quicktest' -- Choose your adapter, here all supported adapters are listed qt.setup({ adapters = { - require("quicktest.adapters.golang"), + require("quicktest.adapters.golang")({ + additional_args = function(bufnr) return { '-race', '-count=1' } end + -- bin = function(bufnr) return 'go' end + -- cwd = function(bufnr) return 'your-cwd' end + }), require("quicktest.adapters.vitest"), require("quicktest.adapters.elixir"), } @@ -109,7 +113,11 @@ Using Lazy: qt.setup({ -- Choose your adapter, here all supported adapters are listed adapters = { - require("quicktest.adapters.golang"), + require("quicktest.adapters.golang")({ + additional_args = function(bufnr) return { '-race', '-count=1' } end + -- bin = function(bufnr) return 'go' end + -- cwd = function(bufnr) return 'your-cwd' end + }), require("quicktest.adapters.vitest"), require("quicktest.adapters.elixir"), } diff --git a/lua/quicktest.lua b/lua/quicktest.lua index ca61157..f33e0aa 100644 --- a/lua/quicktest.lua +++ b/lua/quicktest.lua @@ -2,10 +2,7 @@ local module = require("quicktest.module") local config = { - adapters = { - require("quicktest.adapters.golang"), - require("quicktest.adapters.elixir"), - }, + adapters = {}, } ---@class MyModule diff --git a/lua/quicktest/adapters/golang/cmd.lua b/lua/quicktest/adapters/golang/cmd.lua index eb986e4..1350ac3 100644 --- a/lua/quicktest/adapters/golang/cmd.lua +++ b/lua/quicktest/adapters/golang/cmd.lua @@ -3,8 +3,9 @@ local M = {} --- @params module string --- @params func_names string[] --- @params sub_func_names string[] +--- @params additional_args string[] --- @return string[] -function M.build_args(module, func_names, sub_func_names) +function M.build_args(module, func_names, sub_func_names, additional_args) local args = { "test", } @@ -36,8 +37,10 @@ function M.build_args(module, func_names, sub_func_names) end table.insert(args, "-v") table.insert(args, "-json") - table.insert(args, "-race") - table.insert(args, "-count=1") + + print(vim.inspect(additional_args)) + print(vim.inspect(args)) + args = vim.list_extend(args, additional_args) return args end diff --git a/lua/quicktest/adapters/golang/init.lua b/lua/quicktest/adapters/golang/init.lua index 06b39a6..e30c854 100644 --- a/lua/quicktest/adapters/golang/init.lua +++ b/lua/quicktest/adapters/golang/init.lua @@ -3,8 +3,15 @@ local cmd = require("quicktest.adapters.golang.cmd") local fs = require("quicktest.fs_utils") local Job = require("plenary.job") +---@class GoAdapterOptions +---@field cwd (fun(bufnr: integer): string)? +---@field bin (fun(bufnr: integer): string)? +---@field additional_args (fun(bufnr: integer): string[])? + local M = { name = "go", + ---@type GoAdapterOptions + options = {}, } local ns = vim.api.nvim_create_namespace("quicktest-go") @@ -58,7 +65,7 @@ end ---@return GoRunParams | nil, string | nil M.build_file_run_params = function(bufnr, cursor_pos) local func_names = ts.get_func_names(bufnr) - local cwd = find_cwd(bufnr) or vim.fn.getcwd() + local cwd = M.options.cwd and M.options.cwd(bufnr) or find_cwd(bufnr) or vim.fn.getcwd() local module = get_module_path(cwd, bufnr) or "." if not func_names or #func_names == 0 then @@ -87,7 +94,7 @@ M.build_line_run_params = function(bufnr, cursor_pos) if sub_name then sub_func_names = { sub_name } end - local cwd = find_cwd(bufnr) or vim.fn.getcwd() + local cwd = M.options.cwd and M.options.cwd(bufnr) or find_cwd(bufnr) or vim.fn.getcwd() local module = get_module_path(cwd, bufnr) or "." if not func_names or #func_names == 0 then @@ -109,7 +116,7 @@ end ---@param cursor_pos integer[] ---@return GoRunParams | nil, string | nil M.build_all_run_params = function(bufnr, cursor_pos) - local cwd = find_cwd(bufnr) or vim.fn.getcwd() + local cwd = M.options.cwd and M.options.cwd(bufnr) or find_cwd(bufnr) or vim.fn.getcwd() local module = "./..." return { @@ -127,7 +134,7 @@ end ---@param cursor_pos integer[] ---@return GoRunParams | nil, string | nil M.build_dir_run_params = function(bufnr, cursor_pos) - local cwd = find_cwd(bufnr) or vim.fn.getcwd() + local cwd = M.options.cwd and M.options.cwd(bufnr) or find_cwd(bufnr) or vim.fn.getcwd() local module = get_module_path(cwd, bufnr) or "." return { @@ -145,9 +152,16 @@ end ---@param send fun(data: CmdData) ---@return integer M.run = function(params, send) + local args = cmd.build_args( + params.module, + params.func_names, + params.sub_func_names, + M.options.additional_args and M.options.additional_args(params.bufnr) or {} + ) + local job = Job:new({ - command = "go", - args = cmd.build_args(params.module, params.func_names, params.sub_func_names), + command = M.options.bin and M.options.bin(params.bufnr) or "go", + args = args, cwd = params.cwd, on_stdout = function(_, data) --- @type GoLogEntry @@ -176,7 +190,12 @@ M.run = function(params, send) end M.title = function(params) - local args = cmd.build_args(params.module, params.func_names, params.sub_func_names) + local args = cmd.build_args( + params.module, + params.func_names, + params.sub_func_names, + M.options.additional_args and M.options.additional_args(params.bufnr) or {} + ) return "Running test: " .. table.concat({ unpack(args, 2) }, " ") end @@ -218,4 +237,14 @@ M.is_enabled = function(bufnr) return vim.endswith(bufname, "_test.go") end +--- Adapter options. +setmetatable(M, { + ---@param opts GoAdapterOptions + __call = function(_, opts) + M.options = opts + + return M + end, +}) + return M