improve completion

This commit is contained in:
Dietmar Maurer 2018-12-12 08:18:38 +01:00
parent d769db43f5
commit 2f0258959b
1 changed files with 16 additions and 4 deletions

View File

@ -132,15 +132,27 @@ fn print_simple_completion(
} }
if args.is_empty() { return; } if args.is_empty() { return; }
record_done_arguments(&mut done, &cli_cmd.info.parameters, &args);
let prefix = args.pop().unwrap(); // match on last arg let prefix = args.pop().unwrap(); // match on last arg
record_done_arguments(&mut done, &cli_cmd.info.parameters, &args); // complete option-name or option-value ?
if !prefix.starts_with("-") && args.len() > 0 {
let last = &args[args.len()-1];
if last.starts_with("--") && last.len() > 2 {
let prop_name = last[2..].to_owned();
if let Some((_, schema)) = cli_cmd.info.parameters.properties.get::<str>(&prop_name) {
print_property_completion(schema, &prefix);
}
return;
}
}
for (name, (optional, schema)) in &cli_cmd.info.parameters.properties { for (name, (optional, schema)) in &cli_cmd.info.parameters.properties {
if done.contains(*name) { continue; } if done.contains(*name) { continue; }
let test = String::from("--") + name; let option = String::from("--") + name;
if test.starts_with(&prefix) { if option.starts_with(&prefix) {
println!("{}", test); println!("{}", option);
} }
} }
} }