mirror of
https://github.com/TECHNOFAB11/pay-respects.git
synced 2026-02-02 07:35:10 +01:00
feat: length condition
This commit is contained in:
parent
35418e3b2b
commit
15c957e7da
3 changed files with 27 additions and 4 deletions
|
|
@ -102,9 +102,12 @@ The placeholder is evaluated as following:
|
|||
|
||||
The suggestion can have additional conditions to check. To specify the conditions, add a `#[...]` at the first line (just like derive macros in Rust). Available conditions:
|
||||
|
||||
- `executable`: Check if the argument can be found by `which`
|
||||
- `cmd_contains`: Check if the last user input contains the argument
|
||||
- `err_contains`: Check if the error of the command contains the argument
|
||||
- `executable`: Check whether the argument can be found by `which`
|
||||
- `cmd_contains`: Check whether the last user input contains the argument
|
||||
- `err_contains`: Check whether the error of the command contains the argument
|
||||
- `length`: Check whether the given command has the length of the argument
|
||||
- `min_length`: Check whether the given command has at least the length of the argument
|
||||
- `max_length`: Check whether the given command has at most the length of the argument
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@ fn gen_match_rules(rules: Vec<Rule>) -> TokenStream {
|
|||
#(
|
||||
for pattern in #patterns_tokens {
|
||||
if error_msg.contains(pattern) {
|
||||
let split_command = split_command(&last_command);
|
||||
#suggestion_tokens;
|
||||
};
|
||||
})*
|
||||
|
|
@ -169,6 +170,9 @@ fn eval_condition(condition: &str, arg: &str) -> TokenStream2 {
|
|||
"executable" => quote!{check_executable(shell, #arg)},
|
||||
"err_contains" => quote!{error_msg.contains(#arg)},
|
||||
"cmd_contains" => quote!{last_command.contains(#arg)},
|
||||
"min_length" => quote!{(split_command.len() >= #arg.parse::<usize>().unwrap())},
|
||||
"length" => quote!{(split_command.len() == #arg.parse::<usize>().unwrap())},
|
||||
"max_length" => quote!{(split_command.len() <= #arg.parse::<usize>().unwrap() + 1)},
|
||||
_ => unreachable!("Unknown condition when evaluation condition: {}", condition),
|
||||
}
|
||||
}
|
||||
|
|
@ -193,7 +197,6 @@ fn eval_suggest(suggest: &str) -> TokenStream2 {
|
|||
|
||||
quote! {
|
||||
#(#opt_list)*
|
||||
let split_command = split_command(&last_command);
|
||||
return Some(format!{#suggest, #(#replace_list),*});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
17
rules/c_typo.toml
Normal file
17
rules/c_typo.toml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
command = "c"
|
||||
|
||||
[[match_err]]
|
||||
pattern = [
|
||||
"command not found",
|
||||
"unknown command",
|
||||
"nu::shell::external_command"
|
||||
]
|
||||
suggest = [
|
||||
'''
|
||||
#[length(2)]
|
||||
cd {{command[1:]}} ''',
|
||||
'''
|
||||
#[min_length(3)]
|
||||
cp {{command[1:]}} '''
|
||||
]
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue