diff options
| author | Petter Rasmussen | 2016-01-23 15:16:53 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-01-23 15:16:53 +0100 |
| commit | 6b3da5bcd3891cb6f084a755aea966d7c23f811a (patch) | |
| tree | 75ac52d08f51fc8d3794fcb4b6e3f8e04fa29a21 /cli | |
| parent | ef9d5e6b127e055cac1fd733d49304dd28780ccd (diff) | |
| download | gdrive-6b3da5bcd3891cb6f084a755aea966d7c23f811a.tar.bz2 | |
Move things around, support subcommand help
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/context.go | 4 | ||||
| -rw-r--r-- | cli/handler.go | 52 |
2 files changed, 13 insertions, 43 deletions
diff --git a/cli/context.go b/cli/context.go index c109281..ce82b17 100644 --- a/cli/context.go +++ b/cli/context.go @@ -14,10 +14,6 @@ func (self Context) Handlers() []*Handler { return self.handlers } -func (self Context) FilterHandlers(prefix string) []*Handler { - return filterHandlers(self.handlers, prefix) -} - type Arguments map[string]interface{} func (self Arguments) String(key string) string { diff --git a/cli/handler.go b/cli/handler.go index 5cd13f8..a4aafef 100644 --- a/cli/handler.go +++ b/cli/handler.go @@ -20,7 +20,7 @@ type Handler struct { func (self *Handler) getParser() Parser { var parsers []Parser - for _, pattern := range splitPattern(self.Pattern) { + for _, pattern := range self.SplitPattern() { if isOptional(pattern) { name := optionalName(pattern) parser := getFlagParser(self.Flags[name]) @@ -35,6 +35,18 @@ func (self *Handler) getParser() Parser { return CompleteParser{parsers} } +// Split on spaces but ignore spaces inside <...> and [...] +func (self *Handler) SplitPattern() []string { + re := regexp.MustCompile(`(<[^>]+>|\[[^\]]+]|\S+)`) + matches := []string{} + + for _, value := range re.FindAllStringSubmatch(self.Pattern, -1) { + matches = append(matches, value[1]) + } + + return matches +} + func SetHandlers(h []*Handler) { handlers = h } @@ -74,32 +86,6 @@ func Handle(args []string) bool { return true } -func filterHandlers(handlers []*Handler, prefix string) []*Handler { - matches := []*Handler{} - - for _, h := range handlers { - pattern := strings.Join(stripOptionals(splitPattern(h.Pattern)), " ") - if strings.HasPrefix(pattern, prefix) { - matches = append(matches, h) - } - } - - return matches -} - - -// Split on spaces but ignore spaces inside <...> and [...] -func splitPattern(pattern string) []string { - re := regexp.MustCompile(`(<[^>]+>|\[[^\]]+]|\S+)`) - matches := []string{} - - for _, value := range re.FindAllStringSubmatch(pattern, -1) { - matches = append(matches, value[1]) - } - - return matches -} - func isCaptureGroup(arg string) bool { return strings.HasPrefix(arg, "<") && strings.HasSuffix(arg, ">") } @@ -111,15 +97,3 @@ func isOptional(arg string) bool { func optionalName(s string) string { return s[1:len(s) - 1] } - -// Strip optional groups from pattern -func stripOptionals(pattern []string) []string { - newArgs := []string{} - - for _, arg := range pattern { - if !isOptional(arg) { - newArgs = append(newArgs, arg) - } - } - return newArgs -} |
