diff options
| author | Teddy Wing | 2020-08-29 19:37:39 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2020-08-29 20:48:48 +0200 | 
| commit | 760d49ce6f4a8b1f631fec654ae87300474541a9 (patch) | |
| tree | d67c26b33cbe69ac8dc0fc7ea2a067be45cc177d /src | |
| parent | 8706dc07bcf3b4c965de8e9dd050bd8b97ebc693 (diff) | |
| download | git-suggestion-760d49ce6f4a8b1f631fec654ae87300474541a9.tar.bz2 | |
diff_options: Remove non-equals argument value handling
Tested out diff arguments with Git, and it turns out that arguments in
the following form:
    $ git diff --word-diff color
are not allowed. This error results:
    fatal: ambiguous argument 'color': unknown revision or path not in the working tree.
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'
Thus, option all arguments require the equals character to specify the
value of those arguments.
We can make the logic much simpler by eliminating handling of
space-separated argument values altogether.
This fixes the problem of suggestion positional arguments being
misinterpreted as `OPT_OPTIONS` argument values.
Diffstat (limited to 'src')
| -rw-r--r-- | src/diff_options.rs | 30 | 
1 files changed, 14 insertions, 16 deletions
| diff --git a/src/diff_options.rs b/src/diff_options.rs index fa0af8e..108fc13 100644 --- a/src/diff_options.rs +++ b/src/diff_options.rs @@ -198,6 +198,7 @@ pub fn parse(args: &[String]) -> (Vec<&String>, Vec<&String>) {          // TODO: check for "=" and get next arg          // '='          // if no equals, then add next arg +        // Turns out values are always specified with '='          for option in &ARG_OPTIONS {              if arg.starts_with(option) {                  found_args.push(arg); @@ -217,9 +218,9 @@ pub fn parse(args: &[String]) -> (Vec<&String>, Vec<&String>) {                  dbg!(rest.find('=').is_none());                  // if arg.len() > option.len()                  //         && rest.find('=').is_none() { -                if rest.find('=').is_none() { -                    add_next_arg = true; -                } +                // if rest.find('=').is_none() { +                //     add_next_arg = true; +                // }                  continue 'args;              } @@ -227,15 +228,16 @@ pub fn parse(args: &[String]) -> (Vec<&String>, Vec<&String>) {          // check '='          // If no equals, add next arg if it doesn't begin with '-' +        // OptOptions are always followed by '=' when specifying values          for option in &OPT_OPTIONS {              if arg.starts_with(option) {                  found_args.push(arg); -                let (_option, rest) = arg.split_at(option.len()); - -                if rest.find('=').is_none() { -                    add_next_arg = true; -                } +                // let (_option, rest) = arg.split_at(option.len()); +                // +                // if rest.find('=').is_none() { +                //     add_next_arg = true; +                // }                  continue 'args;              } @@ -260,12 +262,10 @@ mod tests {              "MY_TOKEN".to_owned(),              "--diff-filter=A".to_owned(),              "-D".to_owned(), -            "--color".to_owned(), -            "always".to_owned(), +            "--color=always".to_owned(),              "-U5".to_owned(),              "--patience".to_owned(), -            "--ws-error-highlight".to_owned(), -            "old,new".to_owned(), +            "--ws-error-highlight=old,new".to_owned(),              "--no-rename-empty".to_owned(),              "--stat=50".to_owned(),              "-M90%".to_owned(), @@ -277,12 +277,10 @@ mod tests {          assert_eq!(diff_opts, vec