diff --git a/crates/nu-cli/tests/completions/mod.rs b/crates/nu-cli/tests/completions/mod.rs index 159a8b5c07..19b3925ac1 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 diff --git a/crates/nu-explore/src/pager/mod.rs b/crates/nu-explore/src/pager/mod.rs index 5ea560093d..d230f8a54d 100644 --- a/crates/nu-explore/src/pager/mod.rs +++ b/crates/nu-explore/src/pager/mod.rs @@ -860,10 +860,8 @@ fn search_pattern(data: impl Iterator, pat: &str, rev: bool) -> V } } - if !rev { - matches.sort(); - } else { - matches.sort_by(|a, b| b.cmp(a)); + if rev { + matches.reverse(); } matches