diff --git a/pkg/core/cli.go b/pkg/core/cli.go index a4535d8..be8c91e 100644 --- a/pkg/core/cli.go +++ b/pkg/core/cli.go @@ -63,7 +63,7 @@ func (cl *Cli) Run(args ...string) Result[any] { var remaining []string for i := len(clean); i > 0; i-- { - path := strings.Join(clean[:i], "/") + path := JoinPath(clean[:i]...) if c, ok := cl.core.commands.commands[path]; ok { cmd = c remaining = clean[i:] diff --git a/pkg/core/utils.go b/pkg/core/utils.go index 6c5d383..7fa5d81 100644 --- a/pkg/core/utils.go +++ b/pkg/core/utils.go @@ -23,6 +23,14 @@ func Print(w io.Writer, format string, args ...any) { fmt.Fprintf(w, format+"\n", args...) } +// JoinPath joins string segments into a path with "/" separator. +// +// core.JoinPath("deploy", "to", "homelab") // → "deploy/to/homelab" +// core.JoinPath(args[:3]...) // → first 3 args as path +func JoinPath(segments ...string) string { + return strings.Join(segments, "/") +} + // FilterArgs removes empty strings and Go test runner flags from an argument list. // // clean := core.FilterArgs(os.Args[1:])