add support for cell-paths to NUON (#12718)

# Description
_cell paths_ can be easily serialized back and forth to NUON with the
leading `$.` syntax.

# User-Facing Changes
```nushell
$.foo.bar.0 | to nuon
```
and
```nushell
"$.foo.bar.0" | from nuon
```
are now possible

# Tests + Formatting
a new `cell_path` test has been added to `nuon`

# After Submitting
This commit is contained in:
Antoine Stevan 2024-05-03 03:25:19 +02:00 committed by GitHub
parent 944ebac1c2
commit bc6d934fa1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 13 deletions

View File

@ -148,12 +148,7 @@ fn convert_to_value(
msg: "calls not supported in nuon".into(),
span: expr.span,
}),
Expr::CellPath(..) => Err(ShellError::OutsideSpannedLabeledError {
src: original_text.to_string(),
error: "Error when loading".into(),
msg: "subexpressions and cellpaths not supported in nuon".into(),
span: expr.span,
}),
Expr::CellPath(val) => Ok(Value::cell_path(val, span)),
Expr::DateTime(dt) => Ok(Value::date(dt, span)),
Expr::ExternalCall(..) => Err(ShellError::OutsideSpannedLabeledError {
src: original_text.to_string(),

View File

@ -14,7 +14,11 @@ pub use to::ToStyle;
#[cfg(test)]
mod tests {
use chrono::DateTime;
use nu_protocol::{ast::RangeInclusion, engine::Closure, record, IntRange, Range, Span, Value};
use nu_protocol::{
ast::{CellPath, PathMember, RangeInclusion},
engine::Closure,
record, IntRange, Range, Span, Value,
};
use crate::{from_nuon, to_nuon, ToStyle};
@ -325,6 +329,20 @@ mod tests {
);
}
#[test]
fn cell_path() {
nuon_end_to_end(
r#"$.foo.bar.0"#,
Some(Value::test_cell_path(CellPath {
members: vec![
PathMember::string("foo".to_string(), false, Span::new(2, 5)),
PathMember::string("bar".to_string(), false, Span::new(6, 9)),
PathMember::int(0, false, Span::new(10, 11)),
],
})),
);
}
#[test]
fn does_not_quote_strings_unnecessarily() {
assert_eq!(

View File

@ -97,12 +97,7 @@ fn value_to_string(
Ok("false".to_string())
}
}
Value::CellPath { .. } => Err(ShellError::UnsupportedInput {
msg: "cell-paths are currently not nuon-compatible".to_string(),
input: "value originates from here".into(),
msg_span: span,
input_span: v.span(),
}),
Value::CellPath { val, .. } => Ok(format!("$.{}", val)),
Value::Custom { .. } => Err(ShellError::UnsupportedInput {
msg: "custom values are currently not nuon-compatible".to_string(),
input: "value originates from here".into(),