diff --git a/crates/nu-cli/src/completions/custom_completions.rs b/crates/nu-cli/src/completions/custom_completions.rs index f21f942501a..8d5512a6a9d 100644 --- a/crates/nu-cli/src/completions/custom_completions.rs +++ b/crates/nu-cli/src/completions/custom_completions.rs @@ -126,7 +126,7 @@ impl Completer for CustomCompletion { let options = custom_completion_options .as_ref() .unwrap_or(completion_options); - let suggestions = filter(&prefix, suggestions, completion_options); + let suggestions = filter(&prefix, suggestions, options); sort_suggestions(&String::from_utf8_lossy(&prefix), suggestions, options) } } diff --git a/crates/nu-cli/tests/completions/mod.rs b/crates/nu-cli/tests/completions/mod.rs index e1714f78e24..70ea1ea99fa 100644 --- a/crates/nu-cli/tests/completions/mod.rs +++ b/crates/nu-cli/tests/completions/mod.rs @@ -61,6 +61,32 @@ fn extern_completer() -> NuCompleter { NuCompleter::new(Arc::new(engine), Arc::new(stack)) } +#[fixture] +fn completer_strings_with_options() -> NuCompleter { + // Create a new engine + let (dir, _, mut engine, mut stack) = new_engine(); + // Add record value as example + let record = r#" + # To test that the config setting has no effect on the custom completions + $env.config.completions.algorithm = "fuzzy" + def animals [] { + { + # Very rare and totally real animals + completions: ["Abcdef", "Foo Abcdef", "Acd Bar" ], + options: { + completion_algorithm: "prefix", + positional: false, + case_sensitive: false, + } + } + } + def my-command [animal: string@animals] { print $animal }"#; + assert!(support::merge_input(record.as_bytes(), &mut engine, &mut stack, dir).is_ok()); + + // Instantiate a new completer + NuCompleter::new(Arc::new(engine), Arc::new(stack)) +} + #[fixture] fn custom_completer() -> NuCompleter { // Create a new engine @@ -169,6 +195,20 @@ fn variables_customcompletion_subcommands_with_customcompletion_2( match_suggestions(&expected, &suggestions); } +#[rstest] +fn customcompletions_substring_matching(mut completer_strings_with_options: NuCompleter) { + let suggestions = completer_strings_with_options.complete("my-command Abcd", 15); + let expected: Vec = vec!["Abcdef".into(), "Foo Abcdef".into()]; + match_suggestions(&expected, &suggestions); +} + +#[rstest] +fn customcompletions_case_insensitive(mut completer_strings_with_options: NuCompleter) { + let suggestions = completer_strings_with_options.complete("my-command foo", 14); + let expected: Vec = vec!["Foo Abcdef".into()]; + match_suggestions(&expected, &suggestions); +} + #[test] fn dotnu_completions() { // Create a new engine