From 9f9b59d02a6fa7d4d79aed41c621d07dcd64fb5a Mon Sep 17 00:00:00 2001 From: Georgiana Date: Mon, 8 Jan 2024 00:03:28 +0200 Subject: [PATCH 1/7] Highlights find upgraded --- crates/nu-command/src/filters/find.rs | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 09ecf2cd68265..09fc17f1cda76 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -281,6 +281,27 @@ where }) } +fn highlight_terms_in_string( + val: &Value, + span: Span, + config: &Config, + terms: &[Value], + string_style: Style, + highlight_style: Style, +) -> Value { + let val_str = val.into_string("", config); + + if let Some(term) = terms.iter().find(|term| contains_ignore_case(&val_str, &term.into_string("", config))) { + let term_str = term.into_string("", config); + let highlighted_str = highlight_search_string(&val_str, &term_str, &string_style, &highlight_style) + .unwrap_or_else(|_| string_style.paint(&term_str).to_string()); + + return Value::string(highlighted_str, span); + } + + val.clone() +} + #[allow(clippy::too_many_arguments)] fn highlight_terms_in_record_with_search_columns( search_cols: &[String], @@ -374,6 +395,14 @@ fn find_with_rest_and_highlight( string_style, highlight_style, ), + Value::String { .. } => highlight_terms_in_string( + &x, + span, + &config, + &terms, + string_style, + highlight_style, + ), _ => x, } }, From ad793c47538752e861fdc776231352e7c47ac622 Mon Sep 17 00:00:00 2001 From: Georgiana Date: Mon, 8 Jan 2024 01:04:53 +0200 Subject: [PATCH 2/7] Highlights find upgraded --- crates/nu-command/src/filters/find.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 09fc17f1cda76..7a46a26fa25c0 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -291,10 +291,14 @@ fn highlight_terms_in_string( ) -> Value { let val_str = val.into_string("", config); - if let Some(term) = terms.iter().find(|term| contains_ignore_case(&val_str, &term.into_string("", config))) { + if let Some(term) = terms + .iter() + .find(|term| contains_ignore_case(&val_str, &term.into_string("", config))) + { let term_str = term.into_string("", config); - let highlighted_str = highlight_search_string(&val_str, &term_str, &string_style, &highlight_style) - .unwrap_or_else(|_| string_style.paint(&term_str).to_string()); + let highlighted_str = + highlight_search_string(&val_str, &term_str, &string_style, &highlight_style) + .unwrap_or_else(|_| string_style.paint(&term_str).to_string()); return Value::string(highlighted_str, span); } From 7424273d2e7e2a51b46ac090406a2a46e5b9ea1c Mon Sep 17 00:00:00 2001 From: Geox644 Date: Tue, 23 Jan 2024 22:39:53 +0200 Subject: [PATCH 3/7] updating tests --- crates/nu-command/src/filters/find.rs | 4 ++-- crates/nu-command/tests/commands/find.rs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 7a46a26fa25c0..1c743531dbcf2 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -80,9 +80,9 @@ impl Command for Find { result: None, }, Example { - description: "Search for a term in a string", + description: "Search and highlight text for a term in a string", example: r#"'Cargo.toml' | find toml"#, - result: Some(Value::test_string("Cargo.toml".to_owned())), + result: Some(Value::test_string("Cargo.\u{1b}[37m\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m".to_owned())), }, Example { description: "Search a number or a file size in a list of numbers", diff --git a/crates/nu-command/tests/commands/find.rs b/crates/nu-command/tests/commands/find.rs index 139244496bbae..1d94e1a8caadd 100644 --- a/crates/nu-command/tests/commands/find.rs +++ b/crates/nu-command/tests/commands/find.rs @@ -4,14 +4,14 @@ use nu_test_support::nu; fn find_with_list_search_with_string() { let actual = nu!("[moe larry curly] | find moe | get 0"); - assert_eq!(actual.out, "moe"); + assert_eq!(actual.out, "\u{1b}[37m\u{1b}[0m\u{1b}[41;37mmoe\u{1b}[0m\u{1b}[37m\u{1b}[0m"); } #[test] fn find_with_list_search_with_char() { let actual = nu!("[moe larry curly] | find l | to json -r"); - assert_eq!(actual.out, r#"["larry","curly"]"#); + assert_eq!(actual.out, "[\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37marry\u{1b}[0m\",\"\u{1b}[37mcur\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37my\u{1b}[0m\"]"); } #[test] @@ -25,7 +25,7 @@ fn find_with_list_search_with_number() { fn find_with_string_search_with_string() { let actual = nu!("echo Cargo.toml | find toml"); - assert_eq!(actual.out, "Cargo.toml"); + assert_eq!(actual.out, "\u{1b}[37mCargo.\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m"); } #[test] @@ -40,7 +40,7 @@ fn find_with_filepath_search_with_string() { let actual = nu!(r#"["amigos.txt","arepas.clu","los.txt","tres.txt"] | find arep | to json -r"#); - assert_eq!(actual.out, r#"["arepas.clu"]"#); + assert_eq!(actual.out, "[\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37marep\u{1b}[0m\u{1b}[37mas.clu\u{1b}[0m\"]"); } #[test] @@ -48,7 +48,7 @@ fn find_with_filepath_search_with_multiple_patterns() { let actual = nu!(r#"["amigos.txt","arepas.clu","los.txt","tres.txt"] | find arep ami | to json -r"#); - assert_eq!(actual.out, r#"["amigos.txt","arepas.clu"]"#); + assert_eq!(actual.out, "[\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37mami\u{1b}[0m\u{1b}[37mgos.txt\u{1b}[0m\",\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37marep\u{1b}[0m\u{1b}[37mas.clu\u{1b}[0m\"]"); } #[test] From 76299b103f8e2aaa4ab3f9bb6aefc1eaa0b2a18c Mon Sep 17 00:00:00 2001 From: Geox644 Date: Tue, 23 Jan 2024 23:07:45 +0200 Subject: [PATCH 4/7] with cargo fmt --- crates/nu-command/tests/commands/find.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/crates/nu-command/tests/commands/find.rs b/crates/nu-command/tests/commands/find.rs index 1d94e1a8caadd..a1c4a208a8724 100644 --- a/crates/nu-command/tests/commands/find.rs +++ b/crates/nu-command/tests/commands/find.rs @@ -4,7 +4,10 @@ use nu_test_support::nu; fn find_with_list_search_with_string() { let actual = nu!("[moe larry curly] | find moe | get 0"); - assert_eq!(actual.out, "\u{1b}[37m\u{1b}[0m\u{1b}[41;37mmoe\u{1b}[0m\u{1b}[37m\u{1b}[0m"); + assert_eq!( + actual.out, + "\u{1b}[37m\u{1b}[0m\u{1b}[41;37mmoe\u{1b}[0m\u{1b}[37m\u{1b}[0m" + ); } #[test] @@ -25,7 +28,10 @@ fn find_with_list_search_with_number() { fn find_with_string_search_with_string() { let actual = nu!("echo Cargo.toml | find toml"); - assert_eq!(actual.out, "\u{1b}[37mCargo.\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m"); + assert_eq!( + actual.out, + "\u{1b}[37mCargo.\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m" + ); } #[test] @@ -40,7 +46,10 @@ fn find_with_filepath_search_with_string() { let actual = nu!(r#"["amigos.txt","arepas.clu","los.txt","tres.txt"] | find arep | to json -r"#); - assert_eq!(actual.out, "[\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37marep\u{1b}[0m\u{1b}[37mas.clu\u{1b}[0m\"]"); + assert_eq!( + actual.out, + "[\"\u{1b}[37m\u{1b}[0m\u{1b}[41;37marep\u{1b}[0m\u{1b}[37mas.clu\u{1b}[0m\"]" + ); } #[test] From 87615b48df9f6af852bbba5cd037a35ea443b8f8 Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Tue, 30 Jan 2024 06:50:57 -0600 Subject: [PATCH 5/7] fix raw ansi --- crates/nu-command/src/filters/find.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 1c743531dbcf2..e2e2c6c687f53 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -82,7 +82,7 @@ impl Command for Find { Example { description: "Search and highlight text for a term in a string", example: r#"'Cargo.toml' | find toml"#, - result: Some(Value::test_string("Cargo.\u{1b}[37m\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m".to_owned())), + result: Some(Value::test_string("\u{1b}[37mCargo.\u{1b}[0m\u{1b}[41;37mtoml\u{1b}[0m\u{1b}[37m\u{1b}[0m".to_owned())), }, Example { description: "Search a number or a file size in a list of numbers", From e94b026e677886e246a97c736f82ca8c135c21c3 Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Tue, 30 Jan 2024 07:01:27 -0600 Subject: [PATCH 6/7] fix another example --- crates/nu-command/src/filters/find.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index e2e2c6c687f53..27082a50a5ad4 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -96,7 +96,7 @@ impl Command for Find { description: "Search a char in a list of string", example: r#"[moe larry curly] | find l"#, result: Some(Value::list( - vec![Value::test_string("larry"), Value::test_string("curly")], + vec![Value::test_string("["\u{1b}[37m\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37marry\u{1b}[0m"), Value::test_string("\u{1b}[37mcur\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37my\u{1b}[0m"]")], Span::test_data(), )), }, From 92ec159ec440d1c4d689d8fb078f0424b71e88a5 Mon Sep 17 00:00:00 2001 From: Darren Schroeder <343840+fdncred@users.noreply.github.com> Date: Tue, 30 Jan 2024 07:22:28 -0600 Subject: [PATCH 7/7] example tweaks --- crates/nu-command/src/filters/find.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 27082a50a5ad4..61e408acd2f57 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -96,7 +96,7 @@ impl Command for Find { description: "Search a char in a list of string", example: r#"[moe larry curly] | find l"#, result: Some(Value::list( - vec![Value::test_string("["\u{1b}[37m\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37marry\u{1b}[0m"), Value::test_string("\u{1b}[37mcur\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37my\u{1b}[0m"]")], + vec![Value::test_string("\u{1b}[37m\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37marry\u{1b}[0m"), Value::test_string("\u{1b}[37mcur\u{1b}[0m\u{1b}[41;37ml\u{1b}[0m\u{1b}[37my\u{1b}[0m")], Span::test_data(), )), },