diff --git a/lua/gopher/config.lua b/lua/gopher/config.lua index f86d49c..7c67773 100644 --- a/lua/gopher/config.lua +++ b/lua/gopher/config.lua @@ -66,6 +66,11 @@ local default_config = { -- default tags to add to struct fields default_tag = "json", }, + iferr = { + -- choose a custom error message + ---@type string|nil + message = nil, + }, } --minidoc_afterlines_end diff --git a/lua/gopher/iferr.lua b/lua/gopher/iferr.lua index 3258bd8..c7c7450 100644 --- a/lua/gopher/iferr.lua +++ b/lua/gopher/iferr.lua @@ -15,7 +15,13 @@ function iferr.iferr() local pos = vim.fn.getcurpos()[2] local fpath = vim.fn.expand "%" - local rs = r.sync({ c.commands.iferr, "-pos", curb }, { + local cmd = { c.commands.iferr, "-pos", curb } + if c.iferr.message ~= nil and type(c.iferr.message) == "string" then + table.insert(cmd, "-message") + table.insert(cmd, c.iferr.message) + end + + local rs = r.sync(cmd, { stdin = u.readfile_joined(fpath), }) diff --git a/spec/fixtures/iferr/message_input.go b/spec/fixtures/iferr/message_input.go new file mode 100644 index 0000000..5998cba --- /dev/null +++ b/spec/fixtures/iferr/message_input.go @@ -0,0 +1,7 @@ +package main + +func getErr() error { return nil } + +func test() error { + err := getErr() +} diff --git a/spec/fixtures/iferr/message_output.go b/spec/fixtures/iferr/message_output.go new file mode 100644 index 0000000..7d10241 --- /dev/null +++ b/spec/fixtures/iferr/message_output.go @@ -0,0 +1,10 @@ +package main + +func getErr() error { return nil } + +func test() error { + err := getErr() + if err != nil { + return fmt.Errorf("failed to %w", err) + } +} diff --git a/spec/integration/iferr_test.lua b/spec/integration/iferr_test.lua index 14ee08e..9c5ffdb 100644 --- a/spec/integration/iferr_test.lua +++ b/spec/integration/iferr_test.lua @@ -23,4 +23,18 @@ T["iferr"]["works"] = function() t.eq(t.readfile(tmp), fixtures.output) end +T["iferr"]["works with custom message"] = function() + local tmp = t.tmpfile() + local fixtures = t.get_fixtures "iferr/message" + t.writefile(tmp, fixtures.input) + + child.lua [[ require("gopher").setup { iferr = { message = 'fmt.Errorf("failed to %w", err)' } } ]] + child.cmd("silent edit " .. tmp) + child.fn.setpos(".", { child.fn.bufnr "%", 6, 2, 0 }) + child.cmd "GoIfErr" + child.cmd "write" + + t.eq(t.readfile(tmp), fixtures.output) +end + return T