diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-14 11:23:07 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-14 11:23:07 +0900 |
commit | fe5b190a7d8612bb90de272d26470bd02dc76a64 (patch) | |
tree | 505c87a4ad90e751e61901536e220f8e955e8a3f | |
parent | 77bab51696b509f2c86a4737bbe66ec4830f26e7 (diff) |
Remove unnecessary regexp matches
This change does have positive effect on startup time of fzf when many
number of options are provided.
time fzf --query=____ --filter=____ --delimiter=q --prompt=________ \
--nth=1,2,3,4 --with-nth=1,2,3,4 --toggle-sort=ctrl-r \
--expect=ctrl-x --tiebreak=index --color=light --bind=ctrl-t:accept \
--history=/tmp/xxx --history-max=1000 --help
0m0.013s -> 0m0.008s
-rw-r--r-- | src/options.go | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/options.go b/src/options.go index d88706ef..d969e51d 100644 --- a/src/options.go +++ b/src/options.go @@ -174,11 +174,11 @@ func errorExit(msg string) { help(1) } -func optString(arg string, prefix string) (bool, string) { - rx, _ := regexp.Compile(fmt.Sprintf("^(?:%s)(.*)$", prefix)) - matches := rx.FindStringSubmatch(arg) - if len(matches) > 1 { - return true, matches[1] +func optString(arg string, prefixes ...string) (bool, string) { + for _, prefix := range prefixes { + if strings.HasPrefix(arg, prefix) { + return true, arg[len(prefix):] + } } return false, "" } @@ -605,19 +605,19 @@ func parseOptions(opts *Options, allArgs []string) { case "--version": opts.Version = true default: - if match, value := optString(arg, "-q|--query="); match { + if match, value := optString(arg, "-q", "--query="); match { opts.Query = value - } else if match, value := optString(arg, "-f|--filter="); match { + } else if match, value := optString(arg, "-f", "--filter="); match { opts.Filter = &value - } else if match, value := optString(arg, "-d|--delimiter="); match { + } else if match, value := optString(arg, "-d", "--delimiter="); match { opts.Delimiter = delimiterRegexp(value) } else if match, value := optString(arg, "--prompt="); match { opts.Prompt = value - } else if match, value := optString(arg, "-n|--nth="); match { + } else if match, value := optString(arg, "-n", "--nth="); match { opts.Nth = splitNth(value) } else if match, value := optString(arg, "--with-nth="); match { opts.WithNth = splitNth(value) - } else if match, _ := optString(arg, "-s|--sort="); match { + } else if match, _ := optString(arg, "-s", "--sort="); match { opts.Sort = 1 // Don't care } else if match, value := optString(arg, "--toggle-sort="); match { keymap = checkToggleSort(keymap, value) |