Skip to content

Commit e63214f

Browse files
committed
add unknown command resolution so use of _ is not necessary leafo/lapis-exceptions#3
1 parent 1970e0f commit e63214f

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

lapis/cmd/actions.lua

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,26 @@ do
729729
self.default_action
730730
}
731731
end
732+
local ok, result = parser:pparse(args)
733+
if ok then
734+
return result
735+
end
736+
local cmd_name = result:match("unknown command '(.-)'")
737+
if cmd_name then
738+
local mod_name = "lapis.cmd.actions." .. tostring(cmd_name)
739+
if pcall(require, mod_name) then
740+
local spec = custom_action({
741+
name = cmd_name
742+
})
743+
table.insert(COMMANDS, spec)
744+
local command = parser:command(cmd_name)
745+
command:handle_options(false)
746+
command:argument("sub_command_args", "Arguments to command"):argname("<args>"):args("*")
747+
return parser:parse(args)
748+
else
749+
io.stderr:write("Note: tried to load command from module '" .. tostring(mod_name) .. "'\n")
750+
end
751+
end
732752
return parser:parse(args)
733753
end,
734754
execute = function(self, args)

lapis/cmd/actions.moon

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,27 @@ class CommandRunner
615615
if next(args) == nil
616616
args = { @default_action }
617617

618+
ok, result = parser\pparse args
619+
620+
if ok
621+
return result
622+
623+
-- try to load unknown command as a third-party action module
624+
cmd_name = result\match "unknown command '(.-)'"
625+
if cmd_name
626+
mod_name = "lapis.cmd.actions.#{cmd_name}"
627+
if pcall require, mod_name
628+
spec = custom_action {name: cmd_name}
629+
table.insert COMMANDS, spec
630+
631+
command = parser\command cmd_name
632+
command\handle_options false
633+
command\argument("sub_command_args", "Arguments to command")\argname("<args>")\args("*")
634+
return parser\parse args
635+
else
636+
io.stderr\write "Note: tried to load command from module '#{mod_name}'\n"
637+
638+
-- re-run parse to trigger the original error message
618639
parser\parse args
619640

620641
execute: (args) =>

0 commit comments

Comments
 (0)