mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-08-04 21:52:54 +02:00
complete/fish: improve shell completions for fish
- Stop using `-n __fish_use_subcommand`. This had the effect of ignoring options if a positional argument has already been given, but that's not how ripgrep works. - Only suggest negation options if the option they're negating is passed (e.g., only complete `--no-pcre2` if `--pcre2` is present). The zsh completions already do this. - Take into account whether an option takes an argument. If an option is not a switch then it won't suggest further options until the argument is given, e.g. `-C<tab>` won't suggest options but `-i<tab>` will. - Suggest correct arguments for options. We already completed a fixed set of choices where available, but now we go further: - Filenames are only suggested for options that take filenames. - `--pre` and `--hostname-bin` suggest binaries from `$PATH`. - `-t`/`--type`/&c use `--type-list` for suggestions, like in zsh, with a preview of the glob patterns. - `--encoding` uses a hardcoded list extracted from the zsh completions. This has been refactored into a separate file, and the range globs (`{1..5}`) replaced by comma globs (`{1,2,3,4,5}`) since those work in both shells. I verified that this produces the same list as before in zsh, and the same list in fish (albeit in a different order). PR #2684
This commit is contained in:
committed by
Andrew Gallant
parent
23af5fb043
commit
e0a85678e1
@ -70,7 +70,7 @@ mod parse;
|
||||
/// value. Flags that accept multiple values are an unsupported abberation.
|
||||
trait Flag: Debug + Send + Sync + UnwindSafe + RefUnwindSafe + 'static {
|
||||
/// Returns true if this flag is a switch. When a flag is a switch, the
|
||||
/// CLI parser will look for a value after the flag is seen.
|
||||
/// CLI parser will not look for a value after the flag is seen.
|
||||
fn is_switch(&self) -> bool;
|
||||
|
||||
/// A short single byte name for this flag. This returns `None` by default,
|
||||
@ -150,6 +150,10 @@ trait Flag: Debug + Send + Sync + UnwindSafe + RefUnwindSafe + 'static {
|
||||
&[]
|
||||
}
|
||||
|
||||
fn completion_type(&self) -> CompletionType {
|
||||
CompletionType::Other
|
||||
}
|
||||
|
||||
/// Given the parsed value (which might just be a switch), this should
|
||||
/// update the state in `args` based on the value given for this flag.
|
||||
///
|
||||
@ -228,6 +232,21 @@ impl Category {
|
||||
}
|
||||
}
|
||||
|
||||
/// The kind of argument a flag accepts, to be used for shell completions.
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
enum CompletionType {
|
||||
/// No special category. is_switch() and doc_choices() may apply.
|
||||
Other,
|
||||
/// A path to a file.
|
||||
Filename,
|
||||
/// A command in $PATH.
|
||||
Executable,
|
||||
/// The name of a file type, as used by e.g. --type.
|
||||
Filetype,
|
||||
/// The name of an encoding_rs encoding, as used by --encoding.
|
||||
Encoding,
|
||||
}
|
||||
|
||||
/// Represents a value parsed from the command line.
|
||||
///
|
||||
/// This doesn't include the corresponding flag, but values come in one of
|
||||
|
Reference in New Issue
Block a user