From ec08e4bc6de443b4b9d6d69c2ead75ecb64e7609 Mon Sep 17 00:00:00 2001 From: Stefan Holderbach Date: Thu, 22 Dec 2022 00:36:07 +0100 Subject: [PATCH] Fix `&&` quotation in `to nuon` after proptest fail (#7564) `proptest` caught a failing test condition for `&&` as a literal string. It requires a quotation to be parsed correctly by current `from nuon` https://github.com/nushell/nushell/actions/runs/3753242377/jobs/6376308675 The change in the parser that now returns an error was introduced by https://github.com/nushell/nushell/pull/7241 This in theory doesn't have to be an error (it is a diagnostic for nushell code) but it is probably better safe than sorry to require quotation here. - Add a test for `&&` in `to nuon` from proptest fail - Fix `to nuon` generating invalid `&&` literal - Add a test for `,` in `to nuon`/`from nuon` cycle - Bonus: should already be properly quoted --- crates/nu-command/src/formats/to/nuon.rs | 6 +++++- crates/nu-command/tests/format_conversions/nuon.rs | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/nu-command/src/formats/to/nuon.rs b/crates/nu-command/src/formats/to/nuon.rs index 7c1f7fb994..db7294482c 100644 --- a/crates/nu-command/src/formats/to/nuon.rs +++ b/crates/nu-command/src/formats/to/nuon.rs @@ -215,7 +215,11 @@ static NEEDS_QUOTES_REGEX: Lazy = Lazy::new(|| { fn needs_quotes(string: &str) -> bool { // These are case-sensitive keywords match string { - "true" | "false" | "null" => return true, + // `true`/`false`/`null` are active keywords in JSON and NUON + // `&&` is denied by the nu parser for diagnostics reasons + // (https://github.com/nushell/nushell/pull/7241) + // TODO: remove the extra check in the nuon codepath + "true" | "false" | "null" | "&&" => return true, _ => (), }; // All other cases are handled here diff --git a/crates/nu-command/tests/format_conversions/nuon.rs b/crates/nu-command/tests/format_conversions/nuon.rs index 65322253aa..29a381ab3b 100644 --- a/crates/nu-command/tests/format_conversions/nuon.rs +++ b/crates/nu-command/tests/format_conversions/nuon.rs @@ -330,7 +330,9 @@ fn quotes_some_strings_necessarily() { '-11.0..-15.0', '11.0..-15.0', '-11.0..15.0', '-11.0..<-15.0', '11.0..<-15.0', '-11.0..<15.0', '-11.0..', '11.0..', '..15.0', '..-15.0', '..<15.0', '..<-15.0', - '2000-01-01', '2022-02-02T14:30:00', '2022-02-02T14:30:00+05:00' + '2000-01-01', '2022-02-02T14:30:00', '2022-02-02T14:30:00+05:00', + ',', + '&&' ] | to nuon | from nuon | describe "# ));