mirror of
https://github.com/TECHNOFAB11/pay-respects.git
synced 2026-02-02 15:45:11 +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:
|
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`
|
- `executable`: Check whether the argument can be found by `which`
|
||||||
- `cmd_contains`: Check if the last user input contains the argument
|
- `cmd_contains`: Check whether the last user input contains the argument
|
||||||
- `err_contains`: Check if the error of the command 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 {
|
for pattern in #patterns_tokens {
|
||||||
if error_msg.contains(pattern) {
|
if error_msg.contains(pattern) {
|
||||||
|
let split_command = split_command(&last_command);
|
||||||
#suggestion_tokens;
|
#suggestion_tokens;
|
||||||
};
|
};
|
||||||
})*
|
})*
|
||||||
|
|
@ -169,6 +170,9 @@ fn eval_condition(condition: &str, arg: &str) -> TokenStream2 {
|
||||||
"executable" => quote!{check_executable(shell, #arg)},
|
"executable" => quote!{check_executable(shell, #arg)},
|
||||||
"err_contains" => quote!{error_msg.contains(#arg)},
|
"err_contains" => quote!{error_msg.contains(#arg)},
|
||||||
"cmd_contains" => quote!{last_command.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),
|
_ => unreachable!("Unknown condition when evaluation condition: {}", condition),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -193,7 +197,6 @@ fn eval_suggest(suggest: &str) -> TokenStream2 {
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
#(#opt_list)*
|
#(#opt_list)*
|
||||||
let split_command = split_command(&last_command);
|
|
||||||
return Some(format!{#suggest, #(#replace_list),*});
|
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