diff --git a/command.go b/command.go index 41fde30..992197a 100644 --- a/command.go +++ b/command.go @@ -146,6 +146,10 @@ func (cmd *baseCmd) setErr(e error) { } func newBaseCmd(args []interface{}) baseCmd { + if len(args) > 0 { + // Cmd name is expected to be in lower case. + args[0] = internal.ToLower(args[0].(string)) + } return baseCmd{_args: args} } diff --git a/internal/util.go b/internal/util.go new file mode 100644 index 0000000..5986cc5 --- /dev/null +++ b/internal/util.go @@ -0,0 +1,27 @@ +package internal + +func ToLower(s string) string { + if isLower(s) { + return s + } + + b := make([]byte, len(s)) + for i := range b { + c := s[i] + if c >= 'A' && c <= 'Z' { + c += 'a' - 'A' + } + b[i] = c + } + return string(b) +} + +func isLower(s string) bool { + for i := 0; i < len(s); i++ { + c := s[i] + if c >= 'A' && c <= 'Z' { + return false + } + } + return true +}