diff --git a/crates/nu-command/tests/format_conversions/nuon.rs b/crates/nu-command/tests/format_conversions/nuon.rs index cdac5323e2..90c8f982bf 100644 --- a/crates/nu-command/tests/format_conversions/nuon.rs +++ b/crates/nu-command/tests/format_conversions/nuon.rs @@ -515,6 +515,19 @@ fn quotes_some_strings_necessarily() { assert_eq!(actual.out, "list"); } +#[test] +fn quotes_some_strings_necessarily_in_record_keys() { + let actual = nu!(pipeline( + r#" + ['=', 'a=', '=a'] | each { + {$in : 42} + } | reduce {|elt, acc| $acc | merge $elt} | to nuon | from nuon | columns | describe + "# + )); + + assert_eq!(actual.out, "list"); +} + #[test] fn read_code_should_fail_rather_than_panic() { let actual = nu!(cwd: "tests/fixtures/formats", pipeline( diff --git a/crates/nu-utils/src/quoting.rs b/crates/nu-utils/src/quoting.rs index 0e713c9d80..180572aa8d 100644 --- a/crates/nu-utils/src/quoting.rs +++ b/crates/nu-utils/src/quoting.rs @@ -2,12 +2,12 @@ use fancy_regex::Regex; use std::sync::LazyLock; // This hits, in order: -// • Any character of []:`{}#'";()|$,.!? +// • Any character of []:`{}#'";()|$,.!?= // • Any digit (\d) // • Any whitespace (\s) // • Case-insensitive sign-insensitive float "keywords" inf, infinity and nan. static NEEDS_QUOTING_REGEX: LazyLock = LazyLock::new(|| { - Regex::new(r#"[\[\]:`\{\}#'";\(\)\|\$,\.\d\s!?]|(?i)^[+\-]?(inf(inity)?|nan)$"#) + Regex::new(r#"[\[\]:`\{\}#'";\(\)\|\$,\.\d\s!?=]|(?i)^[+\-]?(inf(inity)?|nan)$"#) .expect("internal error: NEEDS_QUOTING_REGEX didn't compile") });