Add escapes to 'to nuon' (#4964)

This commit is contained in:
JT 2022-03-26 08:35:37 +13:00 committed by GitHub
parent 12b85beecc
commit 91cd1717e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 1 deletions

View File

@ -137,10 +137,15 @@ fn value_to_string(v: &Value, span: Span) -> Result<String, ShellError> {
}
Ok(format!("{{{}}}", collection.join(", ")))
}
Value::String { val, .. } => Ok(format!("\"{}\"", val)),
Value::String { val, .. } => Ok(format!("\"{}\"", escape(val))),
}
}
fn escape(input: &str) -> String {
let output = input.replace('\\', "\\\\");
output.replace('"', "\\\"")
}
fn to_nuon(call: &Call, input: PipelineData) -> Result<String, ShellError> {
let v = input.into_value(call.head);

View File

@ -74,6 +74,34 @@ fn to_nuon_bool() {
assert_eq!(actual.out, "false");
}
#[test]
fn to_nuon_escaping() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
"hello\"world"
| to nuon
| from nuon
"#
));
assert_eq!(actual.out, "hello\"world");
}
#[test]
fn to_nuon_escaping2() {
let actual = nu!(
cwd: "tests/fixtures/formats", pipeline(
r#"
"hello\\world"
| to nuon
| from nuon
"#
));
assert_eq!(actual.out, "hello\\world");
}
#[test]
fn to_nuon_negative_int() {
let actual = nu!(