diff --git a/crates/nu-cli/src/reedline_config.rs b/crates/nu-cli/src/reedline_config.rs index 5be1f77975..9e758920fc 100644 --- a/crates/nu-cli/src/reedline_config.rs +++ b/crates/nu-cli/src/reedline_config.rs @@ -976,13 +976,15 @@ fn extract_char(value: &Value, config: &Config) -> Result { #[cfg(test)] mod test { + use nu_protocol::record; + use super::*; #[test] fn test_send_event() { - let cols = vec!["send".to_string()]; - let vals = vec![Value::test_string("Enter")]; - let event = Record { vals, cols }; + let event = record! { + "send" => Value::test_string("Enter"), + }; let span = Span::test_data(); let b = EventType::try_from_record(&event, span).unwrap(); @@ -997,9 +999,9 @@ mod test { #[test] fn test_edit_event() { - let cols = vec!["edit".to_string()]; - let vals = vec![Value::test_string("Clear")]; - let event = Record { vals, cols }; + let event = record! { + "edit" => Value::test_string("Clear"), + }; let span = Span::test_data(); let b = EventType::try_from_record(&event, span).unwrap(); @@ -1017,12 +1019,10 @@ mod test { #[test] fn test_send_menu() { - let cols = vec!["send".to_string(), "name".to_string()]; - let vals = vec![ - Value::test_string("Menu"), - Value::test_string("history_menu"), - ]; - let event = Record { vals, cols }; + let event = record! { + "send" => Value::test_string("Menu"), + "name" => Value::test_string("history_menu"), + }; let span = Span::test_data(); let b = EventType::try_from_record(&event, span).unwrap(); @@ -1040,28 +1040,19 @@ mod test { #[test] fn test_until_event() { - // Menu event - let cols = vec!["send".to_string(), "name".to_string()]; - let vals = vec![ - Value::test_string("Menu"), - Value::test_string("history_menu"), - ]; - - let menu_event = Value::test_record(Record { cols, vals }); - - // Enter event - let cols = vec!["send".to_string()]; - let vals = vec![Value::test_string("Enter")]; - - let enter_event = Value::test_record(Record { cols, vals }); - - // Until event - let cols = vec!["until".to_string()]; - let vals = vec![Value::list( - vec![menu_event, enter_event], - Span::test_data(), - )]; - let event = Record { cols, vals }; + let menu_event = Value::test_record(record! { + "send" => Value::test_string("Menu"), + "name" => Value::test_string("history_menu"), + }); + let enter_event = Value::test_record(record! { + "send" => Value::test_string("Enter"), + }); + let event = record! { + "until" => Value::list( + vec![menu_event, enter_event], + Span::test_data(), + ), + }; let span = Span::test_data(); let b = EventType::try_from_record(&event, span).unwrap(); @@ -1082,22 +1073,13 @@ mod test { #[test] fn test_multiple_event() { - // Menu event - let cols = vec!["send".to_string(), "name".to_string()]; - let vals = vec![ - Value::test_string("Menu"), - Value::test_string("history_menu"), - ]; - - let menu_event = Value::test_record(Record { cols, vals }); - - // Enter event - let cols = vec!["send".to_string()]; - let vals = vec![Value::test_string("Enter")]; - - let enter_event = Value::test_record(Record { cols, vals }); - - // Multiple event + let menu_event = Value::test_record(record! { + "send" => Value::test_string("Menu"), + "name" => Value::test_string("history_menu"), + }); + let enter_event = Value::test_record(record! { + "send" => Value::test_string("Enter"), + }); let event = Value::list(vec![menu_event, enter_event], Span::test_data()); let config = Config::default(); @@ -1113,9 +1095,9 @@ mod test { #[test] fn test_error() { - let cols = vec!["not_exist".to_string()]; - let vals = vec![Value::test_string("Enter")]; - let event = Record { cols, vals }; + let event = record! { + "not_exist" => Value::test_string("Enter"), + }; let span = Span::test_data(); let b = EventType::try_from_record(&event, span); diff --git a/crates/nu-cmd-dataframe/src/dataframe/eager/to_nu.rs b/crates/nu-cmd-dataframe/src/dataframe/eager/to_nu.rs index ee91b942b5..2d34a6b220 100644 --- a/crates/nu-cmd-dataframe/src/dataframe/eager/to_nu.rs +++ b/crates/nu-cmd-dataframe/src/dataframe/eager/to_nu.rs @@ -2,7 +2,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; use crate::dataframe::values::NuExpression; @@ -39,18 +39,20 @@ impl Command for ToNu { } fn examples(&self) -> Vec { - let cols = vec!["index".into(), "a".into(), "b".into()]; - let rec_1 = Value::test_record(Record { - cols: cols.clone(), - vals: vec![Value::test_int(0), Value::test_int(1), Value::test_int(2)], + let rec_1 = Value::test_record(record! { + "index" => Value::test_int(0), + "a" => Value::test_int(1), + "b" => Value::test_int(2), }); - let rec_2 = Value::test_record(Record { - cols: cols.clone(), - vals: vec![Value::test_int(1), Value::test_int(3), Value::test_int(4)], + let rec_2 = Value::test_record(record! { + "index" => Value::test_int(1), + "a" => Value::test_int(3), + "b" => Value::test_int(4), }); - let rec_3 = Value::test_record(Record { - cols, - vals: vec![Value::test_int(2), Value::test_int(3), Value::test_int(4)], + let rec_3 = Value::test_record(record! { + "index" => Value::test_int(2), + "a" => Value::test_int(3), + "b" => Value::test_int(4), }); vec![ @@ -67,9 +69,9 @@ impl Command for ToNu { Example { description: "Convert a col expression into a nushell value", example: "dfr col a | dfr into-nu", - result: Some(Value::test_record(Record { - cols: vec!["expr".into(), "value".into()], - vals: vec![Value::test_string("column"), Value::test_string("a")], + result: Some(Value::test_record(record! { + "expr" => Value::test_string("column"), + "value" => Value::test_string("a"), })), }, ] diff --git a/crates/nu-cmd-dataframe/src/dataframe/expressions/alias.rs b/crates/nu-cmd-dataframe/src/dataframe/expressions/alias.rs index 7759d6b6bf..0e20ff7f86 100644 --- a/crates/nu-cmd-dataframe/src/dataframe/expressions/alias.rs +++ b/crates/nu-cmd-dataframe/src/dataframe/expressions/alias.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -38,20 +38,12 @@ impl Command for ExprAlias { description: "Creates and alias expression", example: "dfr col a | dfr as new_a | dfr into-nu", result: { - let cols = vec!["expr".into(), "value".into()]; - let expr = Value::test_string("column"); - let value = Value::test_string("a"); - let expr = Value::test_record(Record { - cols, - vals: vec![expr, value], - }); - - let cols = vec!["expr".into(), "alias".into()]; - let value = Value::test_string("new_a"); - - let record = Value::test_record(Record { - cols, - vals: vec![expr, value], + let record = Value::test_record(record! { + "expr" => Value::test_record(record! { + "expr" => Value::test_string("column"), + "value" => Value::test_string("a"), + }), + "alias" => Value::test_string("new_a"), }); Some(record) diff --git a/crates/nu-cmd-dataframe/src/dataframe/expressions/col.rs b/crates/nu-cmd-dataframe/src/dataframe/expressions/col.rs index 59f9c467bf..e717510819 100644 --- a/crates/nu-cmd-dataframe/src/dataframe/expressions/col.rs +++ b/crates/nu-cmd-dataframe/src/dataframe/expressions/col.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use polars::prelude::col; @@ -34,9 +34,9 @@ impl Command for ExprCol { vec![Example { description: "Creates a named column expression and converts it to a nu object", example: "dfr col a | dfr into-nu", - result: Some(Value::test_record(Record { - cols: vec!["expr".into(), "value".into()], - vals: vec![Value::test_string("column"), Value::test_string("a")], + result: Some(Value::test_record(record! { + "expr" => Value::test_string("column"), + "value" => Value::test_string("a"), })), }] } diff --git a/crates/nu-cmd-dataframe/src/dataframe/expressions/lit.rs b/crates/nu-cmd-dataframe/src/dataframe/expressions/lit.rs index 50599db023..536cd66c46 100644 --- a/crates/nu-cmd-dataframe/src/dataframe/expressions/lit.rs +++ b/crates/nu-cmd-dataframe/src/dataframe/expressions/lit.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -33,9 +33,9 @@ impl Command for ExprLit { vec![Example { description: "Created a literal expression and converts it to a nu object", example: "dfr lit 2 | dfr into-nu", - result: Some(Value::test_record(Record { - cols: vec!["expr".into(), "value".into()], - vals: vec![Value::test_string("literal"), Value::test_string("2")], + result: Some(Value::test_record(record! { + "expr" => Value::test_string("literal"), + "value" => Value::test_string("2"), })), }] } diff --git a/crates/nu-cmd-extra/src/extra/conversions/fmt.rs b/crates/nu-cmd-extra/src/extra/conversions/fmt.rs index b2e5fefed7..739beeeec1 100644 --- a/crates/nu-cmd-extra/src/extra/conversions/fmt.rs +++ b/crates/nu-cmd-extra/src/extra/conversions/fmt.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - record, Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; #[derive(Clone)] @@ -32,27 +32,15 @@ impl Command for Fmt { vec![Example { description: "Get a record containing multiple formats for the number 42", example: "42 | fmt", - result: Some(Value::test_record(Record { - cols: vec![ - "binary".into(), - "debug".into(), - "display".into(), - "lowerexp".into(), - "lowerhex".into(), - "octal".into(), - "upperexp".into(), - "upperhex".into(), - ], - vals: vec![ - Value::test_string("0b101010"), - Value::test_string("42"), - Value::test_string("42"), - Value::test_string("4.2e1"), - Value::test_string("0x2a"), - Value::test_string("0o52"), - Value::test_string("4.2E1"), - Value::test_string("0x2A"), - ], + result: Some(Value::test_record(record! { + "binary" => Value::test_string("0b101010"), + "debug" => Value::test_string("42"), + "display" => Value::test_string("42"), + "lowerexp" => Value::test_string("4.2e1"), + "lowerhex" => Value::test_string("0x2a"), + "octal" => Value::test_string("0o52"), + "upperexp" => Value::test_string("4.2E1"), + "upperhex" => Value::test_string("0x2A"), })), }] } diff --git a/crates/nu-cmd-extra/src/extra/filters/roll/roll_down.rs b/crates/nu-cmd-extra/src/extra/filters/roll/roll_down.rs index 92819e41af..d6a282b9c5 100644 --- a/crates/nu-cmd-extra/src/extra/filters/roll/roll_down.rs +++ b/crates/nu-cmd-extra/src/extra/filters/roll/roll_down.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - SyntaxShape, Type, Value, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, + Type, Value, }; use super::{vertical_rotate_value, VerticalDirection}; @@ -33,27 +33,23 @@ impl Command for RollDown { } fn examples(&self) -> Vec { - let columns = vec!["a".to_string(), "b".to_string()]; vec![Example { description: "Rolls rows down of a table", example: "[[a b]; [1 2] [3 4] [5 6]] | roll down", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(5), Value::test_int(6)], - }), - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: columns, - vals: vec![Value::test_int(3), Value::test_int(4)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(5), + "b" => Value::test_int(6), + }), + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(4), + }), + ])), }] } diff --git a/crates/nu-cmd-extra/src/extra/filters/roll/roll_left.rs b/crates/nu-cmd-extra/src/extra/filters/roll/roll_left.rs index 2ba1dbd3b8..9bc76861d1 100644 --- a/crates/nu-cmd-extra/src/extra/filters/roll/roll_left.rs +++ b/crates/nu-cmd-extra/src/extra/filters/roll/roll_left.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - SyntaxShape, Type, Value, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, + Type, Value, }; use super::{horizontal_rotate_value, HorizontalDirection}; @@ -45,50 +45,47 @@ impl Command for RollLeft { } fn examples(&self) -> Vec { - let columns = vec!["a".to_string(), "b".to_string(), "c".to_string()]; - let rotated_columns = vec!["b".to_string(), "c".to_string(), "a".to_string()]; vec![ Example { description: "Rolls columns of a record to the left", example: "{a:1 b:2 c:3} | roll left", - result: Some(Value::test_record(Record { - cols: rotated_columns.clone(), - vals: vec![Value::test_int(2), Value::test_int(3), Value::test_int(1)], + result: Some(Value::test_record(record! { + "b" => Value::test_int(2), + "c" => Value::test_int(3), + "a" => Value::test_int(1), })), }, Example { description: "Rolls columns of a table to the left", example: "[[a b c]; [1 2 3] [4 5 6]] | roll left", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: rotated_columns.clone(), - vals: vec![Value::test_int(2), Value::test_int(3), Value::test_int(1)], - }), - Value::test_record(Record { - cols: rotated_columns, - vals: vec![Value::test_int(5), Value::test_int(6), Value::test_int(4)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "b" => Value::test_int(2), + "c" => Value::test_int(3), + "a" => Value::test_int(1), + }), + Value::test_record(record! { + "b" => Value::test_int(5), + "c" => Value::test_int(6), + "a" => Value::test_int(4), + }), + ])), }, Example { description: "Rolls columns to the left without changing column names", example: "[[a b c]; [1 2 3] [4 5 6]] | roll left --cells-only", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(2), Value::test_int(3), Value::test_int(1)], - }), - Value::test_record(Record { - cols: columns, - vals: vec![Value::test_int(5), Value::test_int(6), Value::test_int(4)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(2), + "b" => Value::test_int(3), + "c" => Value::test_int(1), + }), + Value::test_record(record! { + "a" => Value::test_int(5), + "b" => Value::test_int(6), + "c" => Value::test_int(4), + }), + ])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/filters/roll/roll_right.rs b/crates/nu-cmd-extra/src/extra/filters/roll/roll_right.rs index a43da713cf..a36cda9c06 100644 --- a/crates/nu-cmd-extra/src/extra/filters/roll/roll_right.rs +++ b/crates/nu-cmd-extra/src/extra/filters/roll/roll_right.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - SyntaxShape, Type, Value, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, + Type, Value, }; use super::{horizontal_rotate_value, HorizontalDirection}; @@ -45,50 +45,47 @@ impl Command for RollRight { } fn examples(&self) -> Vec { - let columns = vec!["a".to_string(), "b".to_string(), "c".to_string()]; - let rotated_columns = vec!["c".to_string(), "a".to_string(), "b".to_string()]; vec![ Example { description: "Rolls columns of a record to the right", example: "{a:1 b:2 c:3} | roll right", - result: Some(Value::test_record(Record { - cols: rotated_columns.clone(), - vals: vec![Value::test_int(3), Value::test_int(1), Value::test_int(2)], + result: Some(Value::test_record(record! { + "c" => Value::test_int(3), + "a" => Value::test_int(1), + "b" => Value::test_int(2), })), }, Example { description: "Rolls columns to the right", example: "[[a b c]; [1 2 3] [4 5 6]] | roll right", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: rotated_columns.clone(), - vals: vec![Value::test_int(3), Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: rotated_columns, - vals: vec![Value::test_int(6), Value::test_int(4), Value::test_int(5)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "c" => Value::test_int(3), + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + Value::test_record(record! { + "c" => Value::test_int(6), + "a" => Value::test_int(4), + "b" => Value::test_int(5), + }), + ])), }, Example { description: "Rolls columns to the right with fixed headers", example: "[[a b c]; [1 2 3] [4 5 6]] | roll right --cells-only", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(3), Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: columns, - vals: vec![Value::test_int(6), Value::test_int(4), Value::test_int(5)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(1), + "c" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(6), + "b" => Value::test_int(4), + "c" => Value::test_int(5), + }), + ])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/filters/roll/roll_up.rs b/crates/nu-cmd-extra/src/extra/filters/roll/roll_up.rs index e51680ad17..6324fe9e88 100644 --- a/crates/nu-cmd-extra/src/extra/filters/roll/roll_up.rs +++ b/crates/nu-cmd-extra/src/extra/filters/roll/roll_up.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - SyntaxShape, Type, Value, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, SyntaxShape, + Type, Value, }; use super::{vertical_rotate_value, VerticalDirection}; @@ -33,27 +33,23 @@ impl Command for RollUp { } fn examples(&self) -> Vec { - let columns = vec!["a".to_string(), "b".to_string()]; vec![Example { description: "Rolls rows up", example: "[[a b]; [1 2] [3 4] [5 6]] | roll up", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(3), Value::test_int(4)], - }), - Value::test_record(Record { - cols: columns.clone(), - vals: vec![Value::test_int(5), Value::test_int(6)], - }), - Value::test_record(Record { - cols: columns, - vals: vec![Value::test_int(1), Value::test_int(2)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(4), + }), + Value::test_record(record! { + "a" => Value::test_int(5), + "b" => Value::test_int(6), + }), + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + ])), }] } diff --git a/crates/nu-cmd-extra/src/extra/filters/rotate.rs b/crates/nu-cmd-extra/src/extra/filters/rotate.rs index 97e5ec0dd7..44aaca2b41 100644 --- a/crates/nu-cmd-extra/src/extra/filters/rotate.rs +++ b/crates/nu-cmd-extra/src/extra/filters/rotate.rs @@ -1,9 +1,10 @@ use nu_engine::CallExt; +use nu_protocol::IntoPipelineData; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - SyntaxShape, Type, Value, + record, Category, Example, PipelineData, Record, ShellError, Signature, SyntaxShape, Type, + Value, }; #[derive(Clone)] @@ -38,142 +39,104 @@ impl Command for Rotate { Example { description: "Rotate a record clockwise, producing a table (like `transpose` but with column order reversed)", example: "{a:1, b:2} | rotate", - result: Some(Value::list(vec![ - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_int(1), Value::test_string("a")], + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "column0" => Value::test_int(1), + "column1" => Value::test_string("a"), }), - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_int(2), Value::test_string("b")], + Value::test_record(record! { + "column0" => Value::test_int(2), + "column1" => Value::test_string("b"), }), ], - Span::test_data(), )), }, Example { description: "Rotate 2x3 table clockwise", example: "[[a b]; [1 2] [3 4] [5 6]] | rotate", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec![ - "column0".to_string(), - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_int(5), - Value::test_int(3), - Value::test_int(1), - Value::test_string("a"), - ], + Value::test_record(record! { + "column0" => Value::test_int(5), + "column1" => Value::test_int(3), + "column2" => Value::test_int(1), + "column3" => Value::test_string("a"), }), - Value::test_record(Record { - cols: vec![ - "column0".to_string(), - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_int(6), - Value::test_int(4), - Value::test_int(2), - Value::test_string("b"), - ], + Value::test_record(record! { + "column0" => Value::test_int(6), + "column1" => Value::test_int(4), + "column2" => Value::test_int(2), + "column3" => Value::test_string("b"), }), ], - Span::test_data(), )), }, Example { description: "Rotate table clockwise and change columns names", example: "[[a b]; [1 2]] | rotate col_a col_b", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["col_a".to_string(), "col_b".to_string()], - vals: vec![Value::test_int(1), Value::test_string("a")], + Value::test_record(record! { + "col_a" => Value::test_int(1), + "col_b" => Value::test_string("a"), }), - Value::test_record(Record { - cols: vec!["col_a".to_string(), "col_b".to_string()], - vals: vec![Value::test_int(2), Value::test_string("b")], + Value::test_record(record! { + "col_a" => Value::test_int(2), + "col_b" => Value::test_string("b"), }), ], - Span::test_data(), )), }, Example { description: "Rotate table counter clockwise", example: "[[a b]; [1 2]] | rotate --ccw", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_string("b"), Value::test_int(2)], + Value::test_record(record! { + "column0" => Value::test_string("b"), + "column1" => Value::test_int(2), }), - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_string("a"), Value::test_int(1)], + Value::test_record(record! { + "column0" => Value::test_string("a"), + "column1" => Value::test_int(1), }), ], - Span::test_data(), )), }, Example { description: "Rotate table counter-clockwise", example: "[[a b]; [1 2] [3 4] [5 6]] | rotate --ccw", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec![ - "column0".to_string(), - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_string("b"), - Value::test_int(2), - Value::test_int(4), - Value::test_int(6), - ], + Value::test_record(record! { + "column0" => Value::test_string("b"), + "column1" => Value::test_int(2), + "column2" => Value::test_int(4), + "column3" => Value::test_int(6), }), - Value::test_record(Record { - cols: vec![ - "column0".to_string(), - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_string("a"), - Value::test_int(1), - Value::test_int(3), - Value::test_int(5), - ], + Value::test_record(record! { + "column0" => Value::test_string("a"), + "column1" => Value::test_int(1), + "column2" => Value::test_int(3), + "column3" => Value::test_int(5), }), ], - Span::test_data(), )), }, Example { description: "Rotate table counter-clockwise and change columns names", example: "[[a b]; [1 2]] | rotate --ccw col_a col_b", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["col_a".to_string(), "col_b".to_string()], - vals: vec![Value::test_string("b"), Value::test_int(2)], + Value::test_record(record! { + "col_a" => Value::test_string("b"), + "col_b" => Value::test_int(2), }), - Value::test_record(Record { - cols: vec!["col_a".to_string(), "col_b".to_string()], - vals: vec![Value::test_string("a"), Value::test_int(1)], + Value::test_record(record! { + "col_a" => Value::test_string("a"), + "col_b" => Value::test_int(1), }), ], - Span::test_data(), )), }, ] diff --git a/crates/nu-cmd-extra/src/extra/filters/update_cells.rs b/crates/nu-cmd-extra/src/extra/filters/update_cells.rs index 0f56b04ffc..645e87494c 100644 --- a/crates/nu-cmd-extra/src/extra/filters/update_cells.rs +++ b/crates/nu-cmd-extra/src/extra/filters/update_cells.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::{Block, Call}; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - PipelineIterator, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + PipelineIterator, ShellError, Signature, Span, SyntaxShape, Type, Value, }; use std::collections::HashSet; use std::iter::FromIterator; @@ -51,29 +51,15 @@ impl Command for UpdateCells { $value } }"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "2021-04-16".into(), - "2021-06-10".into(), - "2021-09-18".into(), - "2021-10-15".into(), - "2021-11-16".into(), - "2021-11-17".into(), - "2021-11-18".into(), - ], - vals: vec![ - Value::test_int(37), - Value::test_string(""), - Value::test_string(""), - Value::test_string(""), - Value::test_int(37), - Value::test_string(""), - Value::test_string(""), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "2021-04-16" => Value::test_int(37), + "2021-06-10" => Value::test_string(""), + "2021-09-18" => Value::test_string(""), + "2021-10-15" => Value::test_string(""), + "2021-11-16" => Value::test_int(37), + "2021-11-17" => Value::test_string(""), + "2021-11-18" => Value::test_string(""), + })])), }, Example { description: "Update the zero value cells to empty strings in 2 last columns.", @@ -87,29 +73,15 @@ impl Command for UpdateCells { $value } }"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "2021-04-16".into(), - "2021-06-10".into(), - "2021-09-18".into(), - "2021-10-15".into(), - "2021-11-16".into(), - "2021-11-17".into(), - "2021-11-18".into(), - ], - vals: vec![ - Value::test_int(37), - Value::test_int(0), - Value::test_int(0), - Value::test_int(0), - Value::test_int(37), - Value::test_string(""), - Value::test_string(""), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "2021-04-16" => Value::test_int(37), + "2021-06-10" => Value::test_int(0), + "2021-09-18" => Value::test_int(0), + "2021-10-15" => Value::test_int(0), + "2021-11-16" => Value::test_int(37), + "2021-11-17" => Value::test_string(""), + "2021-11-18" => Value::test_string(""), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/formats/from/url.rs b/crates/nu-cmd-extra/src/extra/formats/from/url.rs index 1a34e72456..1717dddcd4 100644 --- a/crates/nu-cmd-extra/src/extra/formats/from/url.rs +++ b/crates/nu-cmd-extra/src/extra/formats/from/url.rs @@ -1,7 +1,7 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; #[derive(Clone)] @@ -37,19 +37,11 @@ impl Command for FromUrl { vec![Example { example: "'bread=baguette&cheese=comt%C3%A9&meat=ham&fat=butter' | from url", description: "Convert url encoded string into a record", - result: Some(Value::test_record(Record { - cols: vec![ - "bread".to_string(), - "cheese".to_string(), - "meat".to_string(), - "fat".to_string(), - ], - vals: vec![ - Value::test_string("baguette"), - Value::test_string("comté"), - Value::test_string("ham"), - Value::test_string("butter"), - ], + result: Some(Value::test_record(record! { + "bread" => Value::test_string("baguette"), + "cheese" => Value::test_string("comté"), + "meat" => Value::test_string("ham"), + "fat" => Value::test_string("butter"), })), }] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/camel_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/camel_case.rs index 7db970b986..c2abab0c2a 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/camel_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/camel_case.rs @@ -2,7 +2,7 @@ use heck::ToLowerCamelCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -79,13 +79,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to camelCase", example: r#"[[lang, gems]; [nu_test, 100]] | str camel-case lang"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("nuTest"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("nuTest"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/kebab_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/kebab_case.rs index ece42fca80..a42cfc060e 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/kebab_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/kebab_case.rs @@ -2,7 +2,7 @@ use heck::ToKebabCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -79,13 +79,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to kebab-case", example: r#"[[lang, gems]; [nuTest, 100]] | str kebab-case lang"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("nu-test"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("nu-test"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/pascal_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/pascal_case.rs index a09e35d8c5..9ad9fe1607 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/pascal_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/pascal_case.rs @@ -2,7 +2,7 @@ use heck::ToUpperCamelCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -79,13 +79,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to PascalCase", example: r#"[[lang, gems]; [nu_test, 100]] | str pascal-case lang"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("NuTest"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("NuTest"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/screaming_snake_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/screaming_snake_case.rs index c17cf137ff..f6f1767f8a 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/screaming_snake_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/screaming_snake_case.rs @@ -2,7 +2,7 @@ use heck::ToShoutySnakeCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -79,13 +79,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to SCREAMING_SNAKE_CASE", example: r#"[[lang, gems]; [nu_test, 100]] | str screaming-snake-case lang"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("NU_TEST"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("NU_TEST"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/snake_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/snake_case.rs index 9d4b9b5175..3fb50ca0f7 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/snake_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/snake_case.rs @@ -2,7 +2,7 @@ use heck::ToSnakeCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -78,13 +78,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to snake_case", example: r#"[[lang, gems]; [nuTest, 100]] | str snake-case lang"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("nu_test"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("nu_test"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-cmd-extra/src/extra/strings/str_/case/title_case.rs b/crates/nu-cmd-extra/src/extra/strings/str_/case/title_case.rs index 9fa69e0f2f..29e9f9b89e 100644 --- a/crates/nu-cmd-extra/src/extra/strings/str_/case/title_case.rs +++ b/crates/nu-cmd-extra/src/extra/strings/str_/case/title_case.rs @@ -2,7 +2,7 @@ use heck::ToTitleCase; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; use super::operate; @@ -74,13 +74,10 @@ impl Command for SubCommand { Example { description: "convert a column from a table to Title Case", example: r#"[[title, count]; ['nu test', 100]] | str title-case title"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["title".to_string(), "count".to_string()], - vals: vec![Value::test_string("Nu Test"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "title" => Value::test_string("Nu Test"), + "count" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-command/src/bytes/at.rs b/crates/nu-command/src/bytes/at.rs index 4c1fcbf858..f692e2f52a 100644 --- a/crates/nu-command/src/bytes/at.rs +++ b/crates/nu-command/src/bytes/at.rs @@ -1,11 +1,11 @@ use nu_cmd_base::input_handler::{operate, CmdArgument}; use nu_cmd_base::util; use nu_engine::CallExt; +use nu_protocol::record; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Range, Record, ShellError, Signature, Span, SyntaxShape, Type, - Value, + Category, Example, PipelineData, Range, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -94,44 +94,34 @@ impl Command for BytesAt { Example { description: "Get a subbytes `0x[10 01]` from the bytes `0x[33 44 55 10 01 13]`", example: " 0x[33 44 55 10 01 13] | bytes at 3..<4", - result: Some(Value::binary(vec![0x10], Span::test_data())), + result: Some(Value::test_binary(vec![0x10])), }, Example { description: "Get a subbytes `0x[10 01 13]` from the bytes `0x[33 44 55 10 01 13]`", example: " 0x[33 44 55 10 01 13] | bytes at 3..6", - result: Some(Value::binary(vec![0x10, 0x01, 0x13], Span::test_data())), + result: Some(Value::test_binary(vec![0x10, 0x01, 0x13])), }, Example { description: "Get the remaining characters from a starting index", example: " { data: 0x[33 44 55 10 01 13] } | bytes at 3.. data", - result: Some(Value::test_record(Record { - cols: vec!["data".to_string()], - vals: vec![Value::test_binary(vec![0x10, 0x01, 0x13])], + result: Some(Value::test_record(record! { + "data" => Value::test_binary(vec![0x10, 0x01, 0x13]), })), }, Example { description: "Get the characters from the beginning until ending index", example: " 0x[33 44 55 10 01 13] | bytes at ..<4", - result: Some(Value::binary( - vec![0x33, 0x44, 0x55, 0x10], - Span::test_data(), - )), + result: Some(Value::test_binary(vec![0x33, 0x44, 0x55, 0x10])), }, Example { description: "Or the characters from the beginning until ending index inside a table", example: r#" [[ColA ColB ColC]; [0x[11 12 13] 0x[14 15 16] 0x[17 18 19]]] | bytes at 1.. ColB ColC"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string(), "ColC".to_string()], - vals: vec![ - Value::binary(vec![0x11, 0x12, 0x13], Span::test_data()), - Value::binary(vec![0x15, 0x16], Span::test_data()), - Value::binary(vec![0x18, 0x19], Span::test_data()), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_binary(vec![0x11, 0x12, 0x13]), + "ColB" => Value::test_binary(vec![0x15, 0x16]), + "ColC" => Value::test_binary(vec![0x18, 0x19]), + })])), }, ] } diff --git a/crates/nu-command/src/bytes/index_of.rs b/crates/nu-command/src/bytes/index_of.rs index 49aa439c39..99be020623 100644 --- a/crates/nu-command/src/bytes/index_of.rs +++ b/crates/nu-command/src/bytes/index_of.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::ast::{Call, CellPath}; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; struct Arguments { @@ -95,33 +95,29 @@ impl Command for BytesIndexOf { Example { description: "Returns all matched index", example: " 0x[33 44 55 10 01 33 44 33 44] | bytes index-of --all 0x[33 44]", - result: Some(Value::list( - vec![Value::test_int(0), Value::test_int(5), Value::test_int(7)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(5), + Value::test_int(7), + ])), }, Example { description: "Returns all matched index, searching from end", example: " 0x[33 44 55 10 01 33 44 33 44] | bytes index-of --all --end 0x[33 44]", - result: Some(Value::list( - vec![Value::test_int(7), Value::test_int(5), Value::test_int(0)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(7), + Value::test_int(5), + Value::test_int(0), + ])), }, Example { description: "Returns index of pattern for specific column", example: r#" [[ColA ColB ColC]; [0x[11 12 13] 0x[14 15 16] 0x[17 18 19]]] | bytes index-of 0x[11] ColA ColC"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string(), "ColC".to_string()], - vals: vec![ - Value::test_int(0), - Value::binary(vec![0x14, 0x15, 0x16], Span::test_data()), - Value::test_int(-1), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_int(0), + "ColB" => Value::binary(vec![0x14, 0x15, 0x16], Span::test_data()), + "ColC" => Value::test_int(-1), + })])), }, ] } diff --git a/crates/nu-command/src/bytes/remove.rs b/crates/nu-command/src/bytes/remove.rs index 61533b2499..c66828cab7 100644 --- a/crates/nu-command/src/bytes/remove.rs +++ b/crates/nu-command/src/bytes/remove.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, Spanned, SyntaxShape, + record, Category, Example, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -87,49 +87,33 @@ impl Command for BytesRemove { Example { description: "Remove contents", example: "0x[10 AA FF AA FF] | bytes remove 0x[10 AA]", - result: Some(Value::binary ( + result: Some(Value::test_binary ( vec![0xFF, 0xAA, 0xFF], - Span::test_data(), )), }, Example { description: "Remove all occurrences of find binary in record field", example: "{ data: 0x[10 AA 10 BB 10] } | bytes remove --all 0x[10] data", - result: Some(Value::test_record(Record { - cols: vec!["data".to_string()], - vals: vec![Value::test_binary(vec![0xAA, 0xBB])] + result: Some(Value::test_record(record! { + "data" => Value::test_binary(vec![0xAA, 0xBB]) })), }, Example { description: "Remove occurrences of find binary from end", example: "0x[10 AA 10 BB CC AA 10] | bytes remove --end 0x[10]", - result: Some(Value::binary ( + result: Some(Value::test_binary ( vec![0x10, 0xAA, 0x10, 0xBB, 0xCC, 0xAA], - Span::test_data(), )), }, Example { description: "Remove all occurrences of find binary in table", example: "[[ColA ColB ColC]; [0x[11 12 13] 0x[14 15 16] 0x[17 18 19]]] | bytes remove 0x[11] ColA ColC", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string(), "ColC".to_string()], - vals: vec![ - Value::binary ( - vec![0x12, 0x13], - Span::test_data(), - ), - Value::binary ( - vec![0x14, 0x15, 0x16], - Span::test_data(), - ), - Value::binary ( - vec![0x17, 0x18, 0x19], - Span::test_data(), - ), - ] + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "ColA" => Value::test_binary ( vec![0x12, 0x13],), + "ColB" => Value::test_binary ( vec![0x14, 0x15, 0x16],), + "ColC" => Value::test_binary ( vec![0x17, 0x18, 0x19],), })], - Span::test_data(), )), }, ] diff --git a/crates/nu-command/src/bytes/replace.rs b/crates/nu-command/src/bytes/replace.rs index f0244f0149..e261f96636 100644 --- a/crates/nu-command/src/bytes/replace.rs +++ b/crates/nu-command/src/bytes/replace.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, Spanned, SyntaxShape, + record, Category, Example, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -87,41 +87,26 @@ impl Command for BytesReplace { Example { description: "Find and replace contents", example: "0x[10 AA FF AA FF] | bytes replace 0x[10 AA] 0x[FF]", - result: Some(Value::binary ( + result: Some(Value::test_binary ( vec![0xFF, 0xFF, 0xAA, 0xFF], - Span::test_data(), )), }, Example { description: "Find and replace all occurrences of find binary", example: "0x[10 AA 10 BB 10] | bytes replace --all 0x[10] 0x[A0]", - result: Some(Value::binary ( + result: Some(Value::test_binary ( vec![0xA0, 0xAA, 0xA0, 0xBB, 0xA0], - Span::test_data(), )), }, Example { description: "Find and replace all occurrences of find binary in table", example: "[[ColA ColB ColC]; [0x[11 12 13] 0x[14 15 16] 0x[17 18 19]]] | bytes replace --all 0x[11] 0x[13] ColA ColC", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string(), "ColC".to_string()], - vals: vec![ - Value::binary ( - vec![0x13, 0x12, 0x13], - Span::test_data(), - ), - Value::binary ( - vec![0x14, 0x15, 0x16], - Span::test_data(), - ), - Value::binary ( - vec![0x17, 0x18, 0x19], - Span::test_data(), - ), - ], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "ColA" => Value::test_binary(vec![0x13, 0x12, 0x13]), + "ColB" => Value::test_binary(vec![0x14, 0x15, 0x16]), + "ColC" => Value::test_binary(vec![0x17, 0x18, 0x19]), })], - Span::test_data(), )), }, ] diff --git a/crates/nu-command/src/charting/histogram.rs b/crates/nu-command/src/charting/histogram.rs index 53a6f998c7..fc58053a39 100755 --- a/crates/nu-command/src/charting/histogram.rs +++ b/crates/nu-command/src/charting/histogram.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; use std::collections::HashMap; @@ -51,28 +51,21 @@ impl Command for Histogram { Example { description: "Compute a histogram for a list of numbers", example: "[1 2 1] | histogram", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["value".to_string(), "count".to_string(), "quantile".to_string(), "percentage".to_string(), "frequency".to_string()], - vals: vec![ - Value::test_int(1), - Value::test_int(2), - Value::test_float(0.6666666666666666), - Value::test_string("66.67%"), - Value::test_string("******************************************************************"), - ], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "value" => Value::test_int(1), + "count" => Value::test_int(2), + "quantile" => Value::test_float(0.6666666666666666), + "percentage" => Value::test_string("66.67%"), + "frequency" => Value::test_string("******************************************************************"), }), - Value::test_record(Record { - cols: vec!["value".to_string(), "count".to_string(), "quantile".to_string(), "percentage".to_string(), "frequency".to_string()], - vals: vec![ - Value::test_int(2), - Value::test_int(1), - Value::test_float(0.3333333333333333), - Value::test_string("33.33%"), - Value::test_string("*********************************"), - ], + Value::test_record(record! { + "value" => Value::test_int(2), + "count" => Value::test_int(1), + "quantile" => Value::test_float(0.3333333333333333), + "percentage" => Value::test_string("33.33%"), + "frequency" => Value::test_string("*********************************"), })], - Span::test_data(), ) ), }, diff --git a/crates/nu-command/src/conversions/into/bool.rs b/crates/nu-command/src/conversions/into/bool.rs index 89fbe032b3..a9212d6666 100644 --- a/crates/nu-command/src/conversions/into/bool.rs +++ b/crates/nu-command/src/conversions/into/bool.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -53,61 +53,52 @@ impl Command for SubCommand { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "Convert value to boolean in table", example: "[[value]; ['false'] ['1'] [0] [1.0] [true]] | into bool value", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(false, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(true, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(false, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(true, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(true, span)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "value" => Value::test_bool(false), + }), + Value::test_record(record! { + "value" => Value::test_bool(true), + }), + Value::test_record(record! { + "value" => Value::test_bool(false), + }), + Value::test_record(record! { + "value" => Value::test_bool(true), + }), + Value::test_record(record! { + "value" => Value::test_bool(true), + }), + ])), }, Example { description: "Convert bool to boolean", example: "true | into bool", - result: Some(Value::bool(true, span)), + result: Some(Value::test_bool(true)), }, Example { description: "convert int to boolean", example: "1 | into bool", - result: Some(Value::bool(true, span)), + result: Some(Value::test_bool(true)), }, Example { description: "convert float to boolean", example: "0.3 | into bool", - result: Some(Value::bool(true, span)), + result: Some(Value::test_bool(true)), }, Example { description: "convert float string to boolean", example: "'0.0' | into bool", - result: Some(Value::bool(false, span)), + result: Some(Value::test_bool(false)), }, Example { description: "convert string to boolean", example: "'true' | into bool", - result: Some(Value::bool(true, span)), + result: Some(Value::test_bool(true)), }, ] } diff --git a/crates/nu-command/src/conversions/into/duration.rs b/crates/nu-command/src/conversions/into/duration.rs index fdae0f7254..8f58b1acf6 100644 --- a/crates/nu-command/src/conversions/into/duration.rs +++ b/crates/nu-command/src/conversions/into/duration.rs @@ -3,7 +3,7 @@ use nu_parser::{parse_unit_value, DURATION_UNIT_GROUPS}; use nu_protocol::{ ast::{Call, CellPath, Expr}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Unit, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Unit, Value, }; @@ -64,65 +64,55 @@ impl Command for SubCommand { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "Convert duration string to duration value", example: "'7min' | into duration", - result: Some(Value::duration(7 * 60 * NS_PER_SEC, span)), + result: Some(Value::test_duration(7 * 60 * NS_PER_SEC)), }, Example { description: "Convert compound duration string to duration value", example: "'1day 2hr 3min 4sec' | into duration", - result: Some(Value::duration( + result: Some(Value::test_duration( (((((/* 1 * */24) + 2) * 60) + 3) * 60 + 4) * NS_PER_SEC, - span, )), }, Example { description: "Convert table of duration strings to table of duration values", example: "[[value]; ['1sec'] ['2min'] ['3hr'] ['4day'] ['5wk']] | into duration value", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::duration(NS_PER_SEC, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::duration(2 * 60 * NS_PER_SEC, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::duration(3 * 60 * 60 * NS_PER_SEC, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::duration(4 * 24 * 60 * 60 * NS_PER_SEC, span)], - }), - Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::duration(5 * 7 * 24 * 60 * 60 * NS_PER_SEC, span)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "value" => Value::test_duration(NS_PER_SEC), + }), + Value::test_record(record! { + "value" => Value::test_duration(2 * 60 * NS_PER_SEC), + }), + Value::test_record(record! { + "value" => Value::test_duration(3 * 60 * 60 * NS_PER_SEC), + }), + Value::test_record(record! { + "value" => Value::test_duration(4 * 24 * 60 * 60 * NS_PER_SEC), + }), + Value::test_record(record! { + "value" => Value::test_duration(5 * 7 * 24 * 60 * 60 * NS_PER_SEC), + }), + ])), }, Example { description: "Convert duration to duration", example: "420sec | into duration", - result: Some(Value::duration(7 * 60 * NS_PER_SEC, span)), + result: Some(Value::test_duration(7 * 60 * NS_PER_SEC)), }, Example { description: "Convert a number of ns to duration", example: "1_234_567 | into duration", - result: Some(Value::duration(1_234_567, span)), + result: Some(Value::test_duration(1_234_567)), }, Example { description: "Convert a number of an arbitrary unit to duration", example: "1_234 | into duration --unit ms", - result: Some(Value::duration(1_234 * 1_000_000, span)), + result: Some(Value::test_duration(1_234 * 1_000_000)), }, ] } diff --git a/crates/nu-command/src/conversions/into/filesize.rs b/crates/nu-command/src/conversions/into/filesize.rs index 649404f95f..4f02804c13 100644 --- a/crates/nu-command/src/conversions/into/filesize.rs +++ b/crates/nu-command/src/conversions/into/filesize.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -79,45 +79,36 @@ impl Command for SubCommand { Example { description: "Convert string to filesize in table", example: r#"[[device size]; ["/dev/sda1" "200"] ["/dev/loop0" "50"]] | into filesize size"#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["device".to_string(), "size".to_string()], - vals: vec![ - Value::string("/dev/sda1".to_string(), Span::test_data()), - Value::filesize(200, Span::test_data()), - ], - }), - Value::test_record(Record { - cols: vec!["device".to_string(), "size".to_string()], - vals: vec![ - Value::string("/dev/loop0".to_string(), Span::test_data()), - Value::filesize(50, Span::test_data()), - ], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "device" => Value::test_string("/dev/sda1"), + "size" => Value::test_filesize(200), + }), + Value::test_record(record! { + "device" => Value::test_string("/dev/loop0"), + "size" => Value::test_filesize(50), + }), + ])), }, Example { description: "Convert string to filesize", example: "'2' | into filesize", - result: Some(Value::filesize(2, Span::test_data())), + result: Some(Value::test_filesize(2)), }, Example { description: "Convert float to filesize", example: "8.3 | into filesize", - result: Some(Value::filesize(8, Span::test_data())), + result: Some(Value::test_filesize(8)), }, Example { description: "Convert int to filesize", example: "5 | into filesize", - result: Some(Value::filesize(5, Span::test_data())), + result: Some(Value::test_filesize(5)), }, Example { description: "Convert file size to filesize", example: "4KB | into filesize", - result: Some(Value::filesize(4000, Span::test_data())), + result: Some(Value::test_filesize(4000)), }, ] } diff --git a/crates/nu-command/src/conversions/into/float.rs b/crates/nu-command/src/conversions/into/float.rs index 62149bf9cb..8cc5df07f9 100644 --- a/crates/nu-command/src/conversions/into/float.rs +++ b/crates/nu-command/src/conversions/into/float.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -62,9 +62,8 @@ impl Command for SubCommand { Example { description: "Convert string to float in table", example: "[[num]; ['5.01']] | into float num", - result: Some(Value::test_list(vec![Value::test_record(Record { - cols: vec!["num".to_string()], - vals: vec![Value::test_float(5.01)], + result: Some(Value::test_list(vec![Value::test_record(record! { + "num" => Value::test_float(5.01), })])), }, Example { diff --git a/crates/nu-command/src/conversions/into/record.rs b/crates/nu-command/src/conversions/into/record.rs index 35d48d5580..67677efff1 100644 --- a/crates/nu-command/src/conversions/into/record.rs +++ b/crates/nu-command/src/conversions/into/record.rs @@ -46,90 +46,62 @@ impl Command for SubCommand { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "Convert from one row table to record", example: "[[value]; [false]] | into record", - result: Some(Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::bool(false, span)], + result: Some(Value::test_record(record! { + "value" => Value::test_bool(false), })), }, Example { description: "Convert from list to record", example: "[1 2 3] | into record", - result: Some(Value::test_record(Record { - cols: vec!["0".to_string(), "1".to_string(), "2".to_string()], - vals: vec![ - Value::int(1, span), - Value::int(2, span), - Value::int(3, span), - ], + result: Some(Value::test_record(record! { + "0" => Value::test_int(1), + "1" => Value::test_int(2), + "2" => Value::test_int(3), })), }, Example { description: "Convert from range to record", example: "0..2 | into record", - result: Some(Value::test_record(Record { - cols: vec!["0".to_string(), "1".to_string(), "2".to_string()], - vals: vec![ - Value::int(0, span), - Value::int(1, span), - Value::int(2, span), - ], + result: Some(Value::test_record(record! { + "0" => Value::test_int(0), + "1" => Value::test_int(1), + "2" => Value::test_int(2), })), }, Example { description: "convert duration to record (weeks max)", example: "(-500day - 4hr - 5sec) | into record", - result: Some(Value::test_record(Record { - cols: vec![ - "week".into(), - "day".into(), - "hour".into(), - "second".into(), - "sign".into(), - ], - vals: vec![ - Value::int(71, span), - Value::int(3, span), - Value::int(4, span), - Value::int(5, span), - Value::string("-", span), - ], + result: Some(Value::test_record(record! { + "week" => Value::test_int(71), + "day" => Value::test_int(3), + "hour" => Value::test_int(4), + "second" => Value::test_int(5), + "sign" => Value::test_string("-"), })), }, Example { description: "convert record to record", example: "{a: 1, b: 2} | into record", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::int(1, span), Value::int(2, span)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), })), }, Example { description: "convert date to record", example: "2020-04-12T22:10:57+02:00 | into record", - result: Some(Value::test_record(Record { - cols: vec![ - "year".into(), - "month".into(), - "day".into(), - "hour".into(), - "minute".into(), - "second".into(), - "timezone".into(), - ], - vals: vec![ - Value::int(2020, span), - Value::int(4, span), - Value::int(12, span), - Value::int(22, span), - Value::int(10, span), - Value::int(57, span), - Value::string("+02:00".to_string(), span), - ], + result: Some(Value::test_record(record! { + "year" => Value::test_int(2020), + "month" => Value::test_int(4), + "day" => Value::test_int(12), + "hour" => Value::test_int(22), + "minute" => Value::test_int(10), + "second" => Value::test_int(57), + "timezone" => Value::test_string("+02:00"), })), }, ] diff --git a/crates/nu-command/src/database/values/sqlite.rs b/crates/nu-command/src/database/values/sqlite.rs index 386ac2e3a3..bc89079497 100644 --- a/crates/nu-command/src/database/values/sqlite.rs +++ b/crates/nu-command/src/database/values/sqlite.rs @@ -455,6 +455,8 @@ pub fn convert_sqlite_value_to_nu_value(value: ValueRef, span: Span) -> Value { #[cfg(test)] mod test { + use nu_protocol::record; + use super::*; #[test] @@ -482,9 +484,8 @@ mod test { .unwrap(); let converted_db = read_entire_sqlite_db(db, Span::test_data(), None).unwrap(); - let expected = Value::test_record(Record { - cols: vec!["person".to_string()], - vals: vec![Value::list(vec![], Span::test_data())], + let expected = Value::test_record(record! { + "person" => Value::test_list(vec![]), }); assert_eq!(converted_db, expected); @@ -512,24 +513,19 @@ mod test { let converted_db = read_entire_sqlite_db(db, span, None).unwrap(); - let expected = Value::test_record(Record { - cols: vec!["item".to_string()], - vals: vec![Value::list( + let expected = Value::test_record(record! { + "item" => Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["id".to_string(), "name".to_string()], - vals: vec![Value::int(123, span), Value::nothing(span)], + Value::test_record(record! { + "id" => Value::test_int(123), + "name" => Value::nothing(span), }), - Value::test_record(Record { - cols: vec!["id".to_string(), "name".to_string()], - vals: vec![ - Value::int(456, span), - Value::string("foo bar".to_string(), span), - ], + Value::test_record(record! { + "id" => Value::test_int(456), + "name" => Value::test_string("foo bar"), }), - ], - span, - )], + ] + ), }); assert_eq!(converted_db, expected); diff --git a/crates/nu-command/src/date/list_timezone.rs b/crates/nu-command/src/date/list_timezone.rs index 3867884a9e..9d8470b5b0 100644 --- a/crates/nu-command/src/date/list_timezone.rs +++ b/crates/nu-command/src/date/list_timezone.rs @@ -2,8 +2,8 @@ use chrono_tz::TZ_VARIANTS; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, - Signature, Span, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + Type, Value, }; #[derive(Clone)] @@ -52,13 +52,9 @@ impl Command for SubCommand { vec![Example { example: "date list-timezone | where timezone =~ Shanghai", description: "Show timezone(s) that contains 'Shanghai'", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["timezone".into()], - vals: vec![Value::test_string("Asia/Shanghai")], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "timezone" => Value::test_string("Asia/Shanghai"), + })])), }] } } diff --git a/crates/nu-command/src/date/to_record.rs b/crates/nu-command/src/date/to_record.rs index f5b4a7c04d..2ed2871682 100644 --- a/crates/nu-command/src/date/to_record.rs +++ b/crates/nu-command/src/date/to_record.rs @@ -3,7 +3,7 @@ use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike}; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, PipelineData, Record, ShellError, ShellError::DatetimeParseError, + record, Category, Example, PipelineData, ShellError, ShellError::DatetimeParseError, ShellError::PipelineEmpty, Signature, Span, Type, Value, }; @@ -49,56 +49,6 @@ impl Command for SubCommand { } fn examples(&self) -> Vec { - let example_result_1 = || { - let span = Span::test_data(); - let cols = vec![ - "year".into(), - "month".into(), - "day".into(), - "hour".into(), - "minute".into(), - "second".into(), - "nanosecond".into(), - "timezone".into(), - ]; - let vals = vec![ - Value::int(2020, span), - Value::int(4, span), - Value::int(12, span), - Value::int(22, span), - Value::int(10, span), - Value::int(57, span), - Value::int(123_000_000, span), - Value::string("+02:00", span), - ]; - Some(Value::test_record(Record { cols, vals })) - }; - - let example_result_2 = || { - let span = Span::test_data(); - let cols = vec![ - "year".into(), - "month".into(), - "day".into(), - "hour".into(), - "minute".into(), - "second".into(), - "nanosecond".into(), - "timezone".into(), - ]; - let vals = vec![ - Value::int(2020, span), - Value::int(4, span), - Value::int(12, span), - Value::int(22, span), - Value::int(10, span), - Value::int(57, span), - Value::int(0, span), - Value::string("+02:00", span), - ]; - Some(Value::test_record(Record { cols, vals })) - }; - vec![ Example { description: "Convert the current date into a record.", @@ -113,12 +63,30 @@ impl Command for SubCommand { Example { description: "Convert a date string into a record.", example: "'2020-04-12T22:10:57.123+02:00' | date to-record", - result: example_result_1(), + result: Some(Value::test_record(record!( + "year" => Value::test_int(2020), + "month" => Value::test_int(4), + "day" => Value::test_int(12), + "hour" => Value::test_int(22), + "minute" => Value::test_int(10), + "second" => Value::test_int(57), + "nanosecond" => Value::test_int(123_000_000), + "timezone" => Value::test_string("+02:00"), + ))), }, Example { description: "Convert a date into a record.", example: "'2020-04-12 22:10:57 +0200' | into datetime | date to-record", - result: example_result_2(), + result: Some(Value::test_record(record!( + "year" => Value::test_int(2020), + "month" => Value::test_int(4), + "day" => Value::test_int(12), + "hour" => Value::test_int(22), + "minute" => Value::test_int(10), + "second" => Value::test_int(57), + "nanosecond" => Value::test_int(0), + "timezone" => Value::test_string("+02:00"), + ))), }, ] } diff --git a/crates/nu-command/src/date/to_table.rs b/crates/nu-command/src/date/to_table.rs index 1786d81034..47aca0829d 100644 --- a/crates/nu-command/src/date/to_table.rs +++ b/crates/nu-command/src/date/to_table.rs @@ -3,7 +3,7 @@ use chrono::{DateTime, Datelike, FixedOffset, Local, Timelike}; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, PipelineData, Record, ShellError, ShellError::DatetimeParseError, + record, Category, Example, PipelineData, ShellError, ShellError::DatetimeParseError, ShellError::PipelineEmpty, Signature, Span, Type, Value, }; @@ -49,62 +49,6 @@ impl Command for SubCommand { } fn examples(&self) -> Vec { - let example_result_1 = || { - let span = Span::test_data(); - let cols = vec![ - "year".into(), - "month".into(), - "day".into(), - "hour".into(), - "minute".into(), - "second".into(), - "nanosecond".into(), - "timezone".into(), - ]; - let vals = vec![ - Value::int(2020, span), - Value::int(4, span), - Value::int(12, span), - Value::int(22, span), - Value::int(10, span), - Value::int(57, span), - Value::int(789, span), - Value::string("+02:00".to_string(), span), - ]; - Some(Value::list( - vec![Value::test_record(Record { cols, vals })], - span, - )) - }; - - let example_result_2 = || { - let span = Span::test_data(); - let cols = vec![ - "year".into(), - "month".into(), - "day".into(), - "hour".into(), - "minute".into(), - "second".into(), - "nanosecond".into(), - "timezone".into(), - ]; - let vals = vec![ - Value::int(2020, span), - Value::int(4, span), - Value::int(12, span), - Value::int(22, span), - Value::int(10, span), - Value::int(57, span), - Value::int(0, span), - Value::string("+02:00".to_string(), span), - ]; - Some(Value::list( - vec![Value::test_record(Record { cols, vals })], - span, - )) - }; - vec![ Example { description: "Convert the current date into a table.", @@ -119,12 +63,30 @@ impl Command for SubCommand { Example { description: "Convert a given date into a table.", example: "2020-04-12T22:10:57.000000789+02:00 | date to-table", - result: example_result_1(), + result: Some(Value::test_list(vec![Value::test_record(record!( + "year" => Value::test_int(2020), + "month" => Value::test_int(4), + "day" => Value::test_int(12), + "hour" => Value::test_int(22), + "minute" => Value::test_int(10), + "second" => Value::test_int(57), + "nanosecond" => Value::test_int(789), + "timezone" => Value::test_string("+02:00".to_string()), + ))])), }, Example { description: "Convert a given date into a table.", example: "'2020-04-12 22:10:57 +0200' | into datetime | date to-table", - result: example_result_2(), + result: Some(Value::test_list(vec![Value::test_record(record!( + "year" => Value::test_int(2020), + "month" => Value::test_int(4), + "day" => Value::test_int(12), + "hour" => Value::test_int(22), + "minute" => Value::test_int(10), + "second" => Value::test_int(57), + "nanosecond" => Value::test_int(0), + "timezone" => Value::test_string("+02:00".to_string()), + ))])), }, ] } diff --git a/crates/nu-command/src/filters/compact.rs b/crates/nu-command/src/filters/compact.rs index 4f71a2533e..865c3bb9f1 100644 --- a/crates/nu-command/src/filters/compact.rs +++ b/crates/nu-command/src/filters/compact.rs @@ -1,7 +1,7 @@ use nu_engine::CallExt; use nu_protocol::{ - ast::Call, engine::Command, engine::EngineState, engine::Stack, Category, Example, - PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + ast::Call, engine::Command, engine::EngineState, engine::Stack, record, Category, Example, + PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -54,26 +54,23 @@ impl Command for Compact { Example { description: "Filter out all records where 'Hello' is null (returns nothing)", example: r#"[["Hello" "World"]; [null 3]] | compact Hello"#, - result: Some(Value::list(vec![], Span::test_data())), + result: Some(Value::test_list(vec![])), }, Example { description: "Filter out all records where 'World' is null (Returns the table)", example: r#"[["Hello" "World"]; [null 3]] | compact World"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["Hello".into(), "World".into()], - vals: vec![Value::nothing(Span::test_data()), Value::test_int(3)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "Hello" => Value::nothing(Span::test_data()), + "World" => Value::test_int(3), + })])), }, Example { description: "Filter out all instances of nothing from a list (Returns [1,2])", example: r#"[1, null, 2] | compact"#, - result: Some(Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(1), + Value::test_int(2), + ])), }, ] } diff --git a/crates/nu-command/src/filters/drop/column.rs b/crates/nu-command/src/filters/drop/column.rs index 022f4178f3..b515230fae 100644 --- a/crates/nu-command/src/filters/drop/column.rs +++ b/crates/nu-command/src/filters/drop/column.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::{Call, CellPath}; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, + PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -66,14 +66,8 @@ impl Command for DropColumn { example: "[[lib, extension]; [nu-lib, rs] [nu-core, rb]] | drop column", result: Some(Value::list( vec![ - Value::test_record(Record { - cols: vec!["lib".into()], - vals: vec![Value::test_string("nu-lib")], - }), - Value::test_record(Record { - cols: vec!["lib".into()], - vals: vec![Value::test_string("nu-core")], - }), + Value::test_record(record!("lib" =>Value::test_string("nu-lib"))), + Value::test_record(record!("lib" =>Value::test_string("nu-core"))), ], Span::test_data(), )), diff --git a/crates/nu-command/src/filters/drop/drop_.rs b/crates/nu-command/src/filters/drop/drop_.rs index 0fa9e1d0c0..c2deb9f40b 100644 --- a/crates/nu-command/src/filters/drop/drop_.rs +++ b/crates/nu-command/src/filters/drop/drop_.rs @@ -3,8 +3,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -41,42 +41,37 @@ impl Command for Drop { Example { example: "[0,1,2,3] | drop", description: "Remove the last item of a list", - result: Some(Value::list( - vec![Value::test_int(0), Value::test_int(1), Value::test_int(2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(1), + Value::test_int(2), + ])), }, Example { example: "[0,1,2,3] | drop 0", description: "Remove zero item of a list", - result: Some(Value::list( - vec![ - Value::test_int(0), - Value::test_int(1), - Value::test_int(2), - Value::test_int(3), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(1), + Value::test_int(2), + Value::test_int(3), + ])), }, Example { example: "[0,1,2,3] | drop 2", description: "Remove the last two items of a list", - result: Some(Value::list( - vec![Value::test_int(0), Value::test_int(1)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(1), + ])), }, Example { description: "Remove the last row in a table", example: "[[a, b]; [1, 2] [3, 4]] | drop 1", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + })])), }, ] } diff --git a/crates/nu-command/src/filters/enumerate.rs b/crates/nu-command/src/filters/enumerate.rs index 08c6da1c1b..e7fb72b4ff 100644 --- a/crates/nu-command/src/filters/enumerate.rs +++ b/crates/nu-command/src/filters/enumerate.rs @@ -1,8 +1,8 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, - Signature, Span, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + Type, Value, }; #[derive(Clone)] @@ -31,23 +31,20 @@ impl Command for Enumerate { vec![Example { description: "Add an index to each element of a list", example: r#"[a, b, c] | enumerate "#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["index".into(), "item".into()], - vals: vec![Value::test_int(0), Value::test_string("a")], - }), - Value::test_record(Record { - cols: vec!["index".into(), "item".into()], - vals: vec![Value::test_int(1), Value::test_string("b")], - }), - Value::test_record(Record { - cols: vec!["index".into(), "item".into()], - vals: vec![Value::test_int(2), Value::test_string("c")], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "index" => Value::test_int(0), + "item" => Value::test_string("a"), + }), + Value::test_record(record! { + "index" => Value::test_int(1), + "item" => Value::test_string("b"), + }), + Value::test_record(record! { + "index" => Value::test_int(2), + "item" => Value::test_string("c"), + }), + ])), }] } diff --git a/crates/nu-command/src/filters/filter.rs b/crates/nu-command/src/filters/filter.rs index 1d6aafccae..ae55454290 100644 --- a/crates/nu-command/src/filters/filter.rs +++ b/crates/nu-command/src/filters/filter.rs @@ -3,8 +3,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::Call; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -195,43 +195,36 @@ a variable. On the other hand, the "row condition" syntax is not supported."# Example { description: "Filter items of a list according to a condition", example: "[1 2] | filter {|x| $x > 1}", - result: Some(Value::list(vec![Value::test_int(2)], Span::test_data())), + result: Some(Value::test_list(vec![Value::test_int(2)])), }, Example { description: "Filter rows of a table according to a condition", example: "[{a: 1} {a: 2}] | filter {|x| $x.a > 1}", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "a" => Value::test_int(2), + })])), }, Example { description: "Filter rows of a table according to a stored condition", example: "let cond = {|x| $x.a > 1}; [{a: 1} {a: 2}] | filter $cond", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "a" => Value::test_int(2), + })])), }, Example { description: "Filter items of a range according to a condition", example: "9..13 | filter {|el| $el mod 2 != 0}", - result: Some(Value::list( - vec![Value::test_int(9), Value::test_int(11), Value::test_int(13)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(9), + Value::test_int(11), + Value::test_int(13), + ])), }, Example { description: "List all numbers above 3, using an existing closure condition", example: "let a = {$in > 3}; [1, 2, 5, 6] | filter $a", result: None, // TODO: This should work - // result: Some(Value::list( + // result: Some(Value::test_list( // vec![ // Value::Int { // val: 5, @@ -242,7 +235,6 @@ a variable. On the other hand, the "row condition" syntax is not supported."# // span: Span::test_data(), // }, // ], - // Span::test_data(), // }), }, ] diff --git a/crates/nu-command/src/filters/find.rs b/crates/nu-command/src/filters/find.rs index 70b2b40d54..93c58b5dd7 100644 --- a/crates/nu-command/src/filters/find.rs +++ b/crates/nu-command/src/filters/find.rs @@ -8,7 +8,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Config, Example, IntoInterruptiblePipelineData, IntoPipelineData, ListStream, + record, Category, Config, Example, IntoInterruptiblePipelineData, IntoPipelineData, ListStream, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, }; @@ -125,38 +125,27 @@ impl Command for Find { Example { description: "Find value in records using regex", example: r#"[[version name]; ['0.1.0' nushell] ['0.1.1' fish] ['0.2.0' zsh]] | find --regex "nu""#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["version".to_string(), "name".to_string()], - vals: vec![ - Value::test_string("0.1.0"), - Value::test_string("nushell".to_string()), - ], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "version" => Value::test_string("0.1.0"), + "name" => Value::test_string("nushell".to_string()), })], - Span::test_data(), )), }, Example { description: "Find inverted values in records using regex", example: r#"[[version name]; ['0.1.0' nushell] ['0.1.1' fish] ['0.2.0' zsh]] | find --regex "nu" --invert"#, - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["version".to_string(), "name".to_string()], - vals: vec![ - Value::test_string("0.1.1"), - Value::test_string("fish".to_string()), - ], + Value::test_record(record!{ + "version" => Value::test_string("0.1.1"), + "name" => Value::test_string("fish".to_string()), }), - Value::test_record(Record { - cols: vec!["version".to_string(), "name".to_string()], - vals: vec![ - Value::test_string("0.2.0"), - Value::test_string("zsh".to_string()), - ], + Value::test_record(record! { + "version" => Value::test_string("0.2.0"), + "name" =>Value::test_string("zsh".to_string()), }), ], - Span::test_data(), )), }, Example { @@ -191,16 +180,13 @@ impl Command for Find { example: "[[col1 col2 col3]; [moe larry curly] [larry curly moe]] | find moe --columns [col1]", result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["col1".to_string(), "col2".to_string(), "col3".to_string()], - vals: vec![ - Value::test_string( + vec![Value::test_record(record! { + "col1" => Value::test_string( "\u{1b}[37m\u{1b}[0m\u{1b}[41;37mmoe\u{1b}[0m\u{1b}[37m\u{1b}[0m" .to_string(), ), - Value::test_string("larry".to_string()), - Value::test_string("curly".to_string()), - ], + "col2" => Value::test_string("larry".to_string()), + "col3" => Value::test_string("curly".to_string()), })], Span::test_data(), )), diff --git a/crates/nu-command/src/filters/flatten.rs b/crates/nu-command/src/filters/flatten.rs index fa1977afa9..dbe30213be 100644 --- a/crates/nu-command/src/filters/flatten.rs +++ b/crates/nu-command/src/filters/flatten.rs @@ -4,7 +4,8 @@ use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, + Type, Value, }; #[derive(Clone)] @@ -52,7 +53,7 @@ impl Command for Flatten { Example { description: "flatten a table", example: "[[N, u, s, h, e, l, l]] | flatten ", - result: Some(Value::list( + result: Some(Value::test_list( vec![ Value::test_string("N"), Value::test_string("u"), @@ -61,7 +62,6 @@ impl Command for Flatten { Value::test_string("e"), Value::test_string("l"), Value::test_string("l")], - Span::test_data() )) }, Example { @@ -84,49 +84,33 @@ impl Command for Flatten { example: "{ a: b, d: [ 1 2 3 4 ], e: [ 4 3 ] } | flatten d --all", result: Some(Value::list( vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "d".to_string(), "e".to_string()], - vals: vec![ - Value::test_string("b"), - Value::test_int(1), - Value::list( + Value::test_record(record! { + "a" => Value::test_string("b"), + "d" => Value::test_int(1), + "e" => Value::test_list( vec![Value::test_int(4), Value::test_int(3)], - Span::test_data(), ), - ], }), - Value::test_record(Record { - cols: vec!["a".to_string(), "d".to_string(), "e".to_string()], - vals: vec![ - Value::test_string("b"), - Value::test_int(2), - Value::list( + Value::test_record(record! { + "a" => Value::test_string("b"), + "d" => Value::test_int(2), + "e" => Value::test_list( vec![Value::test_int(4), Value::test_int(3)], - Span::test_data(), ), - ], }), - Value::test_record(Record { - cols: vec!["a".to_string(), "d".to_string(), "e".to_string()], - vals: vec![ - Value::test_string("b"), - Value::test_int(3), - Value::list( + Value::test_record(record! { + "a" => Value::test_string("b"), + "d" => Value::test_int(3), + "e" => Value::test_list( vec![Value::test_int(4), Value::test_int(3)], - Span::test_data(), ), - ], }), - Value::test_record(Record { - cols: vec!["a".to_string(), "d".to_string(), "e".to_string()], - vals: vec![ - Value::test_string("b"), - Value::test_int(4), - Value::list( + Value::test_record(record! { + "a" => Value::test_string("b"), + "d" => Value::test_int(4), + "e" => Value::test_list( vec![Value::test_int(4), Value::test_int(3)], - Span::test_data() ) - ], }), ], Span::test_data(), diff --git a/crates/nu-command/src/filters/group_by.rs b/crates/nu-command/src/filters/group_by.rs index 7fd9774d24..a2dc4d7631 100644 --- a/crates/nu-command/src/filters/group_by.rs +++ b/crates/nu-command/src/filters/group_by.rs @@ -2,7 +2,7 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::{Call, CellPath}; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, }; @@ -68,48 +68,37 @@ impl Command for GroupBy { Example { description: "Group using a block which is evaluated against each input value", example: "[foo.txt bar.csv baz.txt] | group-by { path parse | get extension }", - result: Some(Value::test_record(Record { - cols: vec!["txt".to_string(), "csv".to_string()], - vals: vec![ - Value::list( + result: Some(Value::test_record(record! { + "txt" => Value::test_list( vec![ Value::test_string("foo.txt"), Value::test_string("baz.txt"), ], - Span::test_data(), ), - Value::list( + "csv" => Value::test_list( vec![Value::test_string("bar.csv")], - Span::test_data(), ), - ], })), }, Example { description: "You can also group by raw values by leaving out the argument", example: "['1' '3' '1' '3' '2' '1' '1'] | group-by", - result: Some(Value::test_record(Record { - cols: vec!["1".to_string(), "3".to_string(), "2".to_string()], - vals: vec![ - Value::list( + result: Some(Value::test_record(record! { + "1" => Value::test_list( vec![ Value::test_string("1"), Value::test_string("1"), Value::test_string("1"), Value::test_string("1"), ], - Span::test_data(), ), - Value::list( + "3" => Value::test_list( vec![Value::test_string("3"), Value::test_string("3")], - Span::test_data(), ), - Value::list( + "2" => Value::test_list( vec![Value::test_string("2")], - Span::test_data(), ), - ], })), }, ] diff --git a/crates/nu-command/src/filters/headers.rs b/crates/nu-command/src/filters/headers.rs index 1a83726523..086386f186 100644 --- a/crates/nu-command/src/filters/headers.rs +++ b/crates/nu-command/src/filters/headers.rs @@ -1,8 +1,8 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Config, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, - Type, Value, + record, Category, Config, Example, IntoPipelineData, PipelineData, ShellError, Signature, Type, + Value, }; #[derive(Clone)] @@ -31,47 +31,31 @@ impl Command for Headers { } fn examples(&self) -> Vec { - let columns = vec!["a".to_string(), "b".to_string(), "c".to_string()]; vec![ Example { description: "Sets the column names for a table created by `split column`", example: r#""a b c|1 2 3" | split row "|" | split column " " | headers"#, - result: Some(Value::list( - vec![Value::test_record(Record { - cols: columns.clone(), - vals: vec![ - Value::test_string("1"), - Value::test_string("2"), - Value::test_string("3"), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "a" => Value::test_string("1"), + "b" => Value::test_string("2"), + "c" => Value::test_string("3"), + })])), }, Example { description: "Columns which don't have data in their first row are removed", example: r#""a b c|1 2 3|1 2 3 4" | split row "|" | split column " " | headers"#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: columns.clone(), - vals: vec![ - Value::test_string("1"), - Value::test_string("2"), - Value::test_string("3"), - ], - }), - Value::test_record(Record { - cols: columns, - vals: vec![ - Value::test_string("1"), - Value::test_string("2"), - Value::test_string("3"), - ], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_string("1"), + "b" => Value::test_string("2"), + "c" => Value::test_string("3"), + }), + Value::test_record(record! { + "a" => Value::test_string("1"), + "b" => Value::test_string("2"), + "c" => Value::test_string("3"), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/insert.rs b/crates/nu-command/src/filters/insert.rs index 4a7c8ecd95..d9ac8c58cc 100644 --- a/crates/nu-command/src/filters/insert.rs +++ b/crates/nu-command/src/filters/insert.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, + PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -60,57 +60,44 @@ impl Command for Insert { vec![Example { description: "Insert a new entry into a single record", example: "{'name': 'nu', 'stars': 5} | insert alias 'Nushell'", - result: Some(Value::test_record(Record { - cols: vec!["name".into(), "stars".into(), "alias".into()], - vals: vec![ - Value::test_string("nu"), - Value::test_int(5), - Value::test_string("Nushell"), - ], + result: Some(Value::test_record(record! { + "name" => Value::test_string("nu"), + "stars" => Value::test_int(5), + "alias" => Value::test_string("Nushell"), })), }, Example { description: "Insert a new column into a table, populating all rows", example: "[[project, lang]; ['Nushell', 'Rust']] | insert type 'shell'", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["project".into(), "lang".into(), "type".into()], - vals: vec![Value::test_string("Nushell"), Value::test_string("Rust"), Value::test_string("shell")], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "project" => Value::test_string("Nushell"), + "lang" => Value::test_string("Rust"), + "type" => Value::test_string("shell"), })], - Span::test_data(), )), }, Example { description: "Insert a column with values equal to their row index, plus the value of 'foo' in each row", example: "[[foo]; [7] [8] [9]] | enumerate | insert bar {|e| $e.item.foo + $e.index } | flatten", - result: Some(Value::list ( + result: Some(Value::test_list ( vec![ - Value::test_record(Record { - cols: vec!["index".into(), "foo".into(), "bar".into()], - vals: vec![ - Value::test_int(0), - Value::test_int(7), - Value::test_int(7), - ], + Value::test_record(record! { + "index" => Value::test_int(0), + "foo" => Value::test_int(7), + "bar" => Value::test_int(7), }), - Value::test_record(Record { - cols: vec!["index".into(),"foo".into(), "bar".into()], - vals: vec![ - Value::test_int(1), - Value::test_int(8), - Value::test_int(9), - ], + Value::test_record(record! { + "index" => Value::test_int(1), + "foo" => Value::test_int(8), + "bar" => Value::test_int(9), }), - Value::test_record(Record { - cols: vec!["index".into(), "foo".into(), "bar".into()], - vals: vec![ - Value::test_int(2), - Value::test_int(9), - Value::test_int(11), - ], + Value::test_record(record! { + "index" => Value::test_int(2), + "foo" => Value::test_int(9), + "bar" => Value::test_int(11), }), ], - Span::test_data(), )), }] } diff --git a/crates/nu-command/src/filters/join.rs b/crates/nu-command/src/filters/join.rs index f02f738ff3..b69472152d 100644 --- a/crates/nu-command/src/filters/join.rs +++ b/crates/nu-command/src/filters/join.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Config, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, - Type, Value, + record, Category, Config, Example, PipelineData, Record, ShellError, Signature, Span, + SyntaxShape, Type, Value, }; use std::cmp::max; use std::collections::{HashMap, HashSet}; @@ -108,13 +108,9 @@ impl Command for Join { vec![Example { description: "Join two tables", example: "[{a: 1 b: 2}] | join [{a: 1 c: 3}] a", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["a".into(), "b".into(), "c".into()], - vals: vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "a" => Value::test_int(1), "b" => Value::test_int(2), "c" => Value::test_int(3), + })])), }] } } diff --git a/crates/nu-command/src/filters/merge.rs b/crates/nu-command/src/filters/merge.rs index f13f3024bd..de99f73643 100644 --- a/crates/nu-command/src/filters/merge.rs +++ b/crates/nu-command/src/filters/merge.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + Record, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -48,17 +48,17 @@ repeating this process with row 1, and so on."# description: "Add an 'index' column to the input table", result: Some(Value::list( vec![ - Value::test_record(Record { - cols: vec!["name".to_string(), "index".to_string()], - vals: vec![Value::test_string("a"), Value::test_int(1)], + Value::test_record(record! { + "name" => Value::test_string("a"), + "index" => Value::test_int(1), }), - Value::test_record(Record { - cols: vec!["name".to_string(), "index".to_string()], - vals: vec![Value::test_string("b"), Value::test_int(2)], + Value::test_record(record! { + "name" => Value::test_string("b"), + "index" => Value::test_int(2), }), - Value::test_record(Record { - cols: vec!["name".to_string(), "index".to_string()], - vals: vec![Value::test_string("c"), Value::test_int(3)], + Value::test_record(record! { + "name" => Value::test_string("c"), + "index" => Value::test_int(3), }), ], Span::test_data(), @@ -67,21 +67,19 @@ repeating this process with row 1, and so on."# Example { example: "{a: 1, b: 2} | merge {c: 3}", description: "Merge two records", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string(), "c".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + "c" => Value::test_int(3), })), }, Example { example: "[{columnA: A0 columnB: B0}] | merge [{columnA: 'A0*'}]", description: "Merge two tables, overwriting overlapping columns", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["columnA".to_string(), "columnB".to_string()], - vals: vec![Value::test_string("A0*"), Value::test_string("B0")], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "columnA" => Value::test_string("A0*"), + "columnB" => Value::test_string("B0"), + })])), }, ] } diff --git a/crates/nu-command/src/filters/move_.rs b/crates/nu-command/src/filters/move_.rs index a521f0c184..bf11918697 100644 --- a/crates/nu-command/src/filters/move_.rs +++ b/crates/nu-command/src/filters/move_.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + Record, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; #[derive(Clone, Debug)] @@ -52,52 +52,57 @@ impl Command for Move { example: "[[name value index]; [foo a 1] [bar b 2] [baz c 3]] | move index --before name", description: "Move a column before the first column", result: - Some(Value::list ( + Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["index".to_string(), "name".to_string(), "value".to_string()], - vals: vec![Value::test_int(1), Value::test_string("foo"), Value::test_string("a")], + Value::test_record(record! { + "index" => Value::test_int(1), + "name" => Value::test_string("foo"), + "value" => Value::test_string("a"), }), - Value::test_record(Record { - cols: vec!["index".to_string(), "name".to_string(), "value".to_string()], - vals: vec![Value::test_int(2), Value::test_string("bar"), Value::test_string("b")], + Value::test_record(record! { + "index" => Value::test_int(2), + "name" => Value::test_string("bar"), + "value" => Value::test_string("b"), }), - Value::test_record(Record { - cols: vec!["index".to_string(), "name".to_string(), "value".to_string()], - vals: vec![Value::test_int(3), Value::test_string("baz"), Value::test_string("c")], + Value::test_record(record! { + "index" => Value::test_int(3), + "name" => Value::test_string("baz"), + "value" => Value::test_string("c"), }), ], - Span::test_data(), )) }, Example { example: "[[name value index]; [foo a 1] [bar b 2] [baz c 3]] | move value name --after index", description: "Move multiple columns after the last column and reorder them", result: - Some(Value::list ( + Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["index".to_string(), "value".to_string(), "name".to_string()], - vals: vec![Value::test_int(1), Value::test_string("a"), Value::test_string("foo")], + Value::test_record(record! { + "index" => Value::test_int(1), + "value" => Value::test_string("a"), + "name" => Value::test_string("foo"), }), - Value::test_record(Record { - cols: vec!["index".to_string(), "value".to_string(), "name".to_string()], - vals: vec![Value::test_int(2), Value::test_string("b"), Value::test_string("bar")], + Value::test_record(record! { + "index" => Value::test_int(2), + "value" => Value::test_string("b"), + "name" => Value::test_string("bar"), }), - Value::test_record(Record { - cols: vec!["index".to_string(), "value".to_string(), "name".to_string()], - vals: vec![Value::test_int(3), Value::test_string("c"), Value::test_string("baz")], + Value::test_record(record! { + "index" => Value::test_int(3), + "value" => Value::test_string("c"), + "name" => Value::test_string("baz"), }), ], - Span::test_data(), )) }, Example { example: "{ name: foo, value: a, index: 1 } | move name --before index", description: "Move columns of a record", - result: Some(Value::test_record(Record { - cols: vec!["value".to_string(), "name".to_string(), "index".to_string()], - vals: vec![Value::test_string("a"), Value::test_string("foo"), Value::test_int(1)], + result: Some(Value::test_record(record! { + "value" => Value::test_string("a"), + "name" => Value::test_string("foo"), + "index" => Value::test_int(1), })) }, ] diff --git a/crates/nu-command/src/filters/reject.rs b/crates/nu-command/src/filters/reject.rs index 68848b452f..408a0907c2 100644 --- a/crates/nu-command/src/filters/reject.rs +++ b/crates/nu-command/src/filters/reject.rs @@ -2,7 +2,7 @@ use nu_engine::CallExt; use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; use std::cmp::Reverse; @@ -152,42 +152,36 @@ impl Command for Reject { Example { description: "Reject a column in a table", example: "[[a, b]; [1, 2]] | reject a", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["b".to_string()], - vals: vec![Value::test_int(2)], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "b" => Value::test_int(2), })], - Span::test_data(), )), }, Example { description: "Reject a row in a table", example: "[[a, b]; [1, 2] [3, 4]] | reject 1", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), })], - Span::test_data(), )), }, Example { description: "Reject the specified field in a record", example: "{a: 1, b: 2} | reject a", - result: Some(Value::test_record(Record { - cols: vec!["b".into()], - vals: vec![Value::test_int(2)], + result: Some(Value::test_record(record! { + "b" => Value::test_int(2), })), }, Example { description: "Reject a nested field in a record", example: "{a: {b: 3, c: 5}} | reject a.b", - result: Some(Value::test_record(Record { - cols: vec!["a".into()], - vals: vec![Value::test_record(Record { - cols: vec!["c".into()], - vals: vec![Value::test_int(5)], - })], + result: Some(Value::test_record(record! { + "a" => Value::test_record(record! { + "c" => Value::test_int(5), + }), })), }, Example { diff --git a/crates/nu-command/src/filters/rename.rs b/crates/nu-command/src/filters/rename.rs index b89a2c0b43..0719e7f084 100644 --- a/crates/nu-command/src/filters/rename.rs +++ b/crates/nu-command/src/filters/rename.rs @@ -3,7 +3,7 @@ use nu_engine::{eval_block_with_early_return, CallExt}; use nu_protocol::ast::Call; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, SyntaxShape, Type, Value, }; use std::collections::HashSet; @@ -57,50 +57,43 @@ impl Command for Rename { Example { description: "Rename a column", example: "[[a, b]; [1, 2]] | rename my_column", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["my_column".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "my_column" => Value::test_int(1), + "b" => Value::test_int(2), + })])), }, Example { description: "Rename many columns", example: "[[a, b, c]; [1, 2, 3]] | rename eggs ham bacon", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["eggs".to_string(), "ham".to_string(), "bacon".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "eggs" => Value::test_int(1), + "ham" => Value::test_int(2), + "bacon" => Value::test_int(3), + })])), }, Example { description: "Rename a specific column", example: "[[a, b, c]; [1, 2, 3]] | rename --column { a: ham }", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ham".to_string(), "b".to_string(), "c".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ham" => Value::test_int(1), + "b" => Value::test_int(2), + "c" => Value::test_int(3), + })])), }, Example { description: "Rename the fields of a record", example: "{a: 1 b: 2} | rename x y", - result: Some(Value::test_record(Record { - cols: vec!["x".to_string(), "y".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], + result: Some(Value::test_record(record! { + "x" => Value::test_int(1), + "y" => Value::test_int(2), })), }, Example { description: "Rename fields based on a given closure", example: "{abc: 1, bbc: 2} | rename --block {str replace --all 'b' 'z'}", - result: Some(Value::test_record(Record { - cols: vec!["azc".to_string(), "zzc".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], + result: Some(Value::test_record(record! { + "azc" => Value::test_int(1), + "zzc" => Value::test_int(2), })), }, ] diff --git a/crates/nu-command/src/filters/reverse.rs b/crates/nu-command/src/filters/reverse.rs index a97eaf8635..48dedaa5ba 100644 --- a/crates/nu-command/src/filters/reverse.rs +++ b/crates/nu-command/src/filters/reverse.rs @@ -1,8 +1,8 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + Type, Value, }; #[derive(Clone)] @@ -38,32 +38,24 @@ impl Command for Reverse { Example { example: "[0,1,2,3] | reverse", description: "Reverse a list", - result: Some(Value::list( - vec![ - Value::test_int(3), - Value::test_int(2), - Value::test_int(1), - Value::test_int(0), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(3), + Value::test_int(2), + Value::test_int(1), + Value::test_int(0), + ])), }, Example { example: "[{a: 1} {a: 2}] | reverse", description: "Reverse a table", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(1), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/select.rs b/crates/nu-command/src/filters/select.rs index 1d5a9c9cac..f5160f7306 100644 --- a/crates/nu-command/src/filters/select.rs +++ b/crates/nu-command/src/filters/select.rs @@ -2,7 +2,7 @@ use nu_engine::CallExt; use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, PipelineIterator, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, }; use std::collections::BTreeSet; @@ -151,20 +151,17 @@ produce a table, a list will produce a list, and a record will produce a record. Example { description: "Select a column in a table", example: "[{a: a b: b}] | select a", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_string("a")] + result: Some(Value::test_list( + vec![Value::test_record(record! { + "a" => Value::test_string("a") })], - Span::test_data(), )), }, Example { description: "Select a field in a record", example: "{a: a b: b} | select a", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_string("a")] + result: Some(Value::test_record(record! { + "a" => Value::test_string("a") })), }, Example { diff --git a/crates/nu-command/src/filters/skip/skip_.rs b/crates/nu-command/src/filters/skip/skip_.rs index 72370daf83..7bd2256750 100644 --- a/crates/nu-command/src/filters/skip/skip_.rs +++ b/crates/nu-command/src/filters/skip/skip_.rs @@ -4,8 +4,8 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -46,21 +46,18 @@ impl Command for Skip { Example { description: "Skip the first value of a list", example: "[2 4 6 8] | skip 1", - result: Some(Value::list( - vec![Value::test_int(4), Value::test_int(6), Value::test_int(8)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(4), + Value::test_int(6), + Value::test_int(8), + ])), }, Example { description: "Skip two rows of a table", example: "[[editions]; [2015] [2018] [2021]] | skip 2", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["editions".to_owned()], - vals: vec![Value::test_int(2021)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "editions" => Value::test_int(2021), + })])), }, ] } diff --git a/crates/nu-command/src/filters/skip/skip_until.rs b/crates/nu-command/src/filters/skip/skip_until.rs index 609c286147..e99b76e0f1 100644 --- a/crates/nu-command/src/filters/skip/skip_until.rs +++ b/crates/nu-command/src/filters/skip/skip_until.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::{ ast::Call, engine::{Closure, Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -44,35 +44,30 @@ impl Command for SkipUntil { Example { description: "Skip until the element is positive", example: "[-2 0 2 -1] | skip until {|x| $x > 0 }", - result: Some(Value::list( - vec![Value::test_int(2), Value::test_int(-1)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(2), + Value::test_int(-1), + ])), }, Example { description: "Skip until the element is positive using stored condition", example: "let cond = {|x| $x > 0 }; [-2 0 2 -1] | skip until $cond", - result: Some(Value::list( - vec![Value::test_int(2), Value::test_int(-1)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(2), + Value::test_int(-1), + ])), }, Example { description: "Skip until the field value is positive", example: "[{a: -2} {a: 0} {a: 2} {a: -1}] | skip until {|x| $x.a > 0 }", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-1)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(-1), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/skip/skip_while.rs b/crates/nu-command/src/filters/skip/skip_while.rs index 266b62df0d..6d78a5d95d 100644 --- a/crates/nu-command/src/filters/skip/skip_while.rs +++ b/crates/nu-command/src/filters/skip/skip_while.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::{ ast::Call, engine::{Closure, Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -44,39 +44,35 @@ impl Command for SkipWhile { Example { description: "Skip while the element is negative", example: "[-2 0 2 -1] | skip while {|x| $x < 0 }", - result: Some(Value::list( - vec![Value::test_int(0), Value::test_int(2), Value::test_int(-1)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(2), + Value::test_int(-1), + ])), }, Example { description: "Skip while the element is negative using stored condition", example: "let cond = {|x| $x < 0 }; [-2 0 2 -1] | skip while $cond", - result: Some(Value::list( - vec![Value::test_int(0), Value::test_int(2), Value::test_int(-1)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(0), + Value::test_int(2), + Value::test_int(-1), + ])), }, Example { description: "Skip while the field value is negative", example: "[{a: -2} {a: 0} {a: 2} {a: -1}] | skip while {|x| $x.a < 0 }", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(0)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-1)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(0), + }), + Value::test_record(record! { + "a" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(-1), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/sort.rs b/crates/nu-command/src/filters/sort.rs index c8bc16f5d8..8146f55470 100644 --- a/crates/nu-command/src/filters/sort.rs +++ b/crates/nu-command/src/filters/sort.rs @@ -2,8 +2,8 @@ use alphanumeric_sort::compare_str; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + Record, ShellError, Signature, Span, Type, Value, }; use std::cmp::Ordering; @@ -113,17 +113,18 @@ impl Command for Sort { Example { description: "Sort record by key (case-insensitive)", example: "{b: 3, a: 4} | sort", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(4), Value::test_int(3)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(4), + "b" => Value::test_int(3), })), }, Example { description: "Sort record by value", example: "{b: 4, a: 3, c:1} | sort -v", - result: Some(Value::test_record(Record { - cols: vec!["c".to_string(), "a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(3), Value::test_int(4)], + result: Some(Value::test_record(record! { + "c" => Value::test_int(1), + "a" => Value::test_int(3), + "b" => Value::test_int(4), })), }, ] diff --git a/crates/nu-command/src/filters/sort_by.rs b/crates/nu-command/src/filters/sort_by.rs index d708bc543a..0e5110765d 100644 --- a/crates/nu-command/src/filters/sort_by.rs +++ b/crates/nu-command/src/filters/sort_by.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -58,23 +58,20 @@ impl Command for SortBy { Example { description: "Sort a table by a column (reversed order)", example: "[[fruit count]; [apple 9] [pear 3] [orange 7]] | sort-by fruit --reverse", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/split_by.rs b/crates/nu-command/src/filters/split_by.rs index e6fd8987fb..61f46452a8 100644 --- a/crates/nu-command/src/filters/split_by.rs +++ b/crates/nu-command/src/filters/split_by.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -48,63 +48,32 @@ impl Command for SplitBy { { name: 'storm', lang: 'rs', 'year': '2021' } ] } | split-by lang"#, - result: Some(Value::test_record(Record { - cols: vec!["rb".to_string(), "rs".to_string()], - vals: vec![ - Value::test_record(Record { - cols: vec!["2019".to_string()], - vals: vec![Value::list( - vec![Value::test_record(Record { - cols: vec![ - "name".to_string(), - "lang".to_string(), - "year".to_string(), - ], - vals: vec![ - Value::test_string("andres"), - Value::test_string("rb"), - Value::test_string("2019"), - ], + result: Some(Value::test_record(record! { + "rb" => Value::test_record(record! { + "2019" => Value::test_list( + vec![Value::test_record(record! { + "name" => Value::test_string("andres"), + "lang" => Value::test_string("rb"), + "year" => Value::test_string("2019"), })], - Span::test_data(), - )], + ), }), - Value::test_record(Record { - cols: vec!["2019".to_string(), "2021".to_string()], - vals: vec![ - Value::list( - vec![Value::test_record(Record { - cols: vec![ - "name".to_string(), - "lang".to_string(), - "year".to_string(), - ], - vals: vec![ - Value::test_string("jt"), - Value::test_string("rs"), - Value::test_string("2019"), - ], + "rs" => Value::test_record(record! { + "2019" => Value::test_list( + vec![Value::test_record(record! { + "name" => Value::test_string("jt"), + "lang" => Value::test_string("rs"), + "year" => Value::test_string("2019"), })], - Span::test_data(), ), - Value::list( - vec![Value::test_record(Record { - cols: vec![ - "name".to_string(), - "lang".to_string(), - "year".to_string(), - ], - vals: vec![ - Value::test_string("storm"), - Value::test_string("rs"), - Value::test_string("2021"), - ], + "2021" => Value::test_list( + vec![Value::test_record(record! { + "name" => Value::test_string("storm"), + "lang" => Value::test_string("rs"), + "year" => Value::test_string("2021"), })], - Span::test_data(), ), - ], }), - ], })), }] } diff --git a/crates/nu-command/src/filters/take/take_.rs b/crates/nu-command/src/filters/take/take_.rs index 846dc21cf7..97b3da9e5a 100644 --- a/crates/nu-command/src/filters/take/take_.rs +++ b/crates/nu-command/src/filters/take/take_.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -107,45 +107,41 @@ impl Command for Take { Example { description: "Return the first item of a list/table", example: "[1 2 3] | take 1", - result: Some(Value::list(vec![Value::test_int(1)], Span::test_data())), + result: Some(Value::test_list(vec![Value::test_int(1)])), }, Example { description: "Return the first 2 items of a list/table", example: "[1 2 3] | take 2", - result: Some(Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(1), + Value::test_int(2), + ])), }, Example { description: "Return the first two rows of a table", example: "[[editions]; [2015] [2018] [2021]] | take 2", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["editions".to_string()], - vals: vec![Value::test_int(2015)], - }), - Value::test_record(Record { - cols: vec!["editions".to_string()], - vals: vec![Value::test_int(2018)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "editions" => Value::test_int(2015), + }), + Value::test_record(record! { + "editions" => Value::test_int(2018), + }), + ])), }, Example { description: "Return the first 2 bytes of a binary value", example: "0x[01 23 45] | take 2", - result: Some(Value::binary(vec![0x01, 0x23], Span::test_data())), + result: Some(Value::test_binary(vec![0x01, 0x23])), }, Example { description: "Return the first 3 elements of a range", example: "1..10 | take 3", - result: Some(Value::list( - vec![Value::test_int(1), Value::test_int(2), Value::test_int(3)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(1), + Value::test_int(2), + Value::test_int(3), + ])), }, ] } diff --git a/crates/nu-command/src/filters/take/take_until.rs b/crates/nu-command/src/filters/take/take_until.rs index ae18873317..859a719b7e 100644 --- a/crates/nu-command/src/filters/take/take_until.rs +++ b/crates/nu-command/src/filters/take/take_until.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::{ ast::Call, engine::{Closure, Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -40,35 +40,30 @@ impl Command for TakeUntil { Example { description: "Take until the element is positive", example: "[-1 -2 9 1] | take until {|x| $x > 0 }", - result: Some(Value::list( - vec![Value::test_int(-1), Value::test_int(-2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(-1), + Value::test_int(-2), + ])), }, Example { description: "Take until the element is positive using stored condition", example: "let cond = {|x| $x > 0 }; [-1 -2 9 1] | take until $cond", - result: Some(Value::list( - vec![Value::test_int(-1), Value::test_int(-2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(-1), + Value::test_int(-2), + ])), }, Example { description: "Take until the field value is positive", example: "[{a: -1} {a: -2} {a: 9} {a: 1}] | take until {|x| $x.a > 0 }", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-1)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-2)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(-1), + }), + Value::test_record(record! { + "a" => Value::test_int(-2), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/take/take_while.rs b/crates/nu-command/src/filters/take/take_while.rs index 8db101124e..74aec637f0 100644 --- a/crates/nu-command/src/filters/take/take_while.rs +++ b/crates/nu-command/src/filters/take/take_while.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::{ ast::Call, engine::{Closure, Command, EngineState, Stack}, - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, ShellError, Signature, + SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -40,35 +40,30 @@ impl Command for TakeWhile { Example { description: "Take while the element is negative", example: "[-1 -2 9 1] | take while {|x| $x < 0 }", - result: Some(Value::list( - vec![Value::test_int(-1), Value::test_int(-2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(-1), + Value::test_int(-2), + ])), }, Example { description: "Take while the element is negative using stored condition", example: "let cond = {|x| $x < 0 }; [-1 -2 9 1] | take while $cond", - result: Some(Value::list( - vec![Value::test_int(-1), Value::test_int(-2)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(-1), + Value::test_int(-2), + ])), }, Example { description: "Take while the field value is negative", example: "[{a: -1} {a: -2} {a: 9} {a: 1}] | take while {|x| $x.a < 0 }", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-1)], - }), - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(-2)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(-1), + }), + Value::test_record(record! { + "a" => Value::test_int(-2), + }), + ])), }, ] } diff --git a/crates/nu-command/src/filters/transpose.rs b/crates/nu-command/src/filters/transpose.rs index 23763cf05a..305986373e 100644 --- a/crates/nu-command/src/filters/transpose.rs +++ b/crates/nu-command/src/filters/transpose.rs @@ -3,8 +3,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, Signature, - Span, Spanned, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, Record, ShellError, + Signature, Spanned, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -83,66 +83,54 @@ impl Command for Transpose { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "Transposes the table contents with default column names", example: "[[c1 c2]; [1 2]] | transpose", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_string("c1"), Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["column0".to_string(), "column1".to_string()], - vals: vec![Value::test_string("c2"), Value::test_int(2)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "column0" => Value::test_string("c1"), + "column1" => Value::test_int(1), + }), + Value::test_record(record! { + "column0" => Value::test_string("c2"), + "column1" => Value::test_int(2), + }), + ])), }, Example { description: "Transposes the table contents with specified column names", example: "[[c1 c2]; [1 2]] | transpose key val", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["key".to_string(), "val".to_string()], - vals: vec![Value::test_string("c1"), Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["key".to_string(), "val".to_string()], - vals: vec![Value::test_string("c2"), Value::test_int(2)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "key" => Value::test_string("c1"), + "val" => Value::test_int(1), + }), + Value::test_record(record! { + "key" => Value::test_string("c2"), + "val" => Value::test_int(2), + }), + ])), }, Example { description: "Transposes the table without column names and specify a new column name", example: "[[c1 c2]; [1 2]] | transpose --ignore-titles val", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["val".to_string()], - vals: vec![Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["val".to_string()], - vals: vec![Value::test_int(2)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "val" => Value::test_int(1), + }), + Value::test_record(record! { + "val" => Value::test_int(2), + }), + ])), }, Example { description: "Transfer back to record with -d flag", example: "{c1: 1, c2: 2} | transpose | transpose --ignore-titles -r -d", - result: Some(Value::test_record(Record { - cols: vec!["c1".to_string(), "c2".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], + result: Some(Value::test_record(record! { + "c1" => Value::test_int(1), + "c2" => Value::test_int(2), })), }, ] diff --git a/crates/nu-command/src/filters/uniq.rs b/crates/nu-command/src/filters/uniq.rs index c2d5ed4951..426d28dc41 100644 --- a/crates/nu-command/src/filters/uniq.rs +++ b/crates/nu-command/src/filters/uniq.rs @@ -112,26 +112,24 @@ impl Command for Uniq { Example { description: "Ignore differences in case when comparing input values", example: "['hello' 'goodbye' 'Hello'] | uniq --ignore-case", - result: Some(Value::list( + result: Some(Value::test_list( vec![Value::test_string("hello"), Value::test_string("goodbye")], - Span::test_data(), )), }, Example { description: "Return a table containing the distinct input values together with their counts", example: "[1 2 2] | uniq --count", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["value".to_string(), "count".to_string()], - vals: vec![Value::test_int(1), Value::test_int(1)], + Value::test_record(record! { + "value" => Value::test_int(1), + "count" => Value::test_int(1), }), - Value::test_record(Record { - cols: vec!["value".to_string(), "count".to_string()], - vals: vec![Value::test_int(2), Value::test_int(2)], + Value::test_record(record! { + "value" => Value::test_int(2), + "count" => Value::test_int(2), }), ], - Span::test_data(), )), }, ] diff --git a/crates/nu-command/src/filters/uniq_by.rs b/crates/nu-command/src/filters/uniq_by.rs index bad32073a0..ced8fc0ecb 100644 --- a/crates/nu-command/src/filters/uniq_by.rs +++ b/crates/nu-command/src/filters/uniq_by.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -92,23 +92,20 @@ impl Command for UniqBy { vec![Example { description: "Get rows from table filtered by column uniqueness ", example: "[[fruit count]; [apple 9] [apple 2] [pear 3] [orange 7]] | uniq-by fruit", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + ])), }] } } diff --git a/crates/nu-command/src/filters/update.rs b/crates/nu-command/src/filters/update.rs index 52ff0ad67b..b3b4133ff0 100644 --- a/crates/nu-command/src/filters/update.rs +++ b/crates/nu-command/src/filters/update.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, + PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -57,42 +57,39 @@ impl Command for Update { Example { description: "Update a column value", example: "{'name': 'nu', 'stars': 5} | update name 'Nushell'", - result: Some(Value::test_record(Record { - cols: vec!["name".into(), "stars".into()], - vals: vec![Value::test_string("Nushell"), Value::test_int(5)], + result: Some(Value::test_record(record! { + "name" => Value::test_string("Nushell"), + "stars" => Value::test_int(5), })), }, Example { description: "Use in closure form for more involved updating logic", example: "[[count fruit]; [1 'apple']] | enumerate | update item.count {|e| ($e.item.fruit | str length) + $e.index } | get item", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["count".into(), "fruit".into()], - vals: vec![Value::test_int(5), Value::test_string("apple")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "count" => Value::test_int(5), + "fruit" => Value::test_string("apple"), })], - Span::test_data(), )), }, Example { description: "Alter each value in the 'authors' column to use a single string instead of a list", example: "[[project, authors]; ['nu', ['Andrés', 'JT', 'Yehuda']]] | update authors {|row| $row.authors | str join ','}", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["project".into(), "authors".into()], - vals: vec![Value::test_string("nu"), Value::test_string("Andrés,JT,Yehuda")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "project" => Value::test_string("nu"), + "authors" => Value::test_string("Andrés,JT,Yehuda"), })], - Span::test_data(), )), }, Example { description: "You can also use a simple command to update 'authors' to a single string", example: "[[project, authors]; ['nu', ['Andrés', 'JT', 'Yehuda']]] | update authors {|| str join ','}", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["project".into(), "authors".into()], - vals: vec![Value::test_string("nu"), Value::test_string("Andrés,JT,Yehuda")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "project" => Value::test_string("nu"), + "authors" => Value::test_string("Andrés,JT,Yehuda"), })], - Span::test_data(), )), } ] diff --git a/crates/nu-command/src/filters/upsert.rs b/crates/nu-command/src/filters/upsert.rs index d11400fb2f..2119c82b31 100644 --- a/crates/nu-command/src/filters/upsert.rs +++ b/crates/nu-command/src/filters/upsert.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::{Call, CellPath, PathMember}; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, FromValue, IntoInterruptiblePipelineData, IntoPipelineData, + PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -60,65 +60,62 @@ impl Command for Upsert { vec![Example { description: "Update a record's value", example: "{'name': 'nu', 'stars': 5} | upsert name 'Nushell'", - result: Some(Value::test_record(Record { - cols: vec!["name".into(), "stars".into()], - vals: vec![Value::test_string("Nushell"), Value::test_int(5)], + result: Some(Value::test_record(record! { + "name" => Value::test_string("Nushell"), + "stars" => Value::test_int(5), })), }, Example { description: "Update each row of a table", example: "[[name lang]; [Nushell ''] [Reedline '']] | upsert lang 'Rust'", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["name".into(), "lang".into()], - vals: vec![Value::test_string("Nushell"), Value::test_string("Rust")], + Value::test_record(record! { + "name" => Value::test_string("Nushell"), + "lang" => Value::test_string("Rust"), }), - Value::test_record(Record { - cols: vec!["name".into(), "lang".into()], - vals: vec![Value::test_string("Reedline"), Value::test_string("Rust")], + Value::test_record(record! { + "name" => Value::test_string("Reedline"), + "lang" => Value::test_string("Rust"), }), ], - Span::test_data(), )), }, Example { description: "Insert a new entry into a single record", example: "{'name': 'nu', 'stars': 5} | upsert language 'Rust'", - result: Some(Value::test_record(Record { - cols: vec!["name".into(), "stars".into(), "language".into()], - vals: vec![Value::test_string("nu"), Value::test_int(5), Value::test_string("Rust")], + result: Some(Value::test_record(record! { + "name" => Value::test_string("nu"), + "stars" => Value::test_int(5), + "language" => Value::test_string("Rust"), })), }, Example { description: "Use in closure form for more involved updating logic", example: "[[count fruit]; [1 'apple']] | enumerate | upsert item.count {|e| ($e.item.fruit | str length) + $e.index } | get item", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["count".into(), "fruit".into()], - vals: vec![Value::test_int(5), Value::test_string("apple")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "count" => Value::test_int(5), + "fruit" => Value::test_string("apple"), })], - Span::test_data(), )), }, Example { description: "Upsert an int into a list, updating an existing value based on the index", example: "[1 2 3] | upsert 0 2", - result: Some(Value::list( + result: Some(Value::test_list( vec![Value::test_int(2), Value::test_int(2), Value::test_int(3)], - Span::test_data(), )), }, Example { description: "Upsert an int into a list, inserting a new value based on the index", example: "[1 2 3] | upsert 3 4", - result: Some(Value::list( + result: Some(Value::test_list( vec![ Value::test_int(1), Value::test_int(2), Value::test_int(3), Value::test_int(4), ], - Span::test_data(), )), }, ] diff --git a/crates/nu-command/src/filters/where_.rs b/crates/nu-command/src/filters/where_.rs index a0aa725359..523c6948ed 100644 --- a/crates/nu-command/src/filters/where_.rs +++ b/crates/nu-command/src/filters/where_.rs @@ -2,8 +2,8 @@ use nu_engine::{eval_block, CallExt}; use nu_protocol::ast::Call; use nu_protocol::engine::{Closure, Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, - ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, + ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -111,20 +111,17 @@ not supported."# Example { description: "Filter rows of a table according to a condition", example: "[{a: 1} {a: 2}] | where a > 1", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(2)], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "a" => Value::test_int(2), })], - Span::test_data(), )), }, Example { description: "Filter items of a list according to a condition", example: "[1 2] | where {|x| $x > 1}", - result: Some(Value::list ( + result: Some(Value::test_list( vec![Value::test_int(2)], - Span::test_data(), )), }, Example { diff --git a/crates/nu-command/src/filters/wrap.rs b/crates/nu-command/src/filters/wrap.rs index c2f23ebc3f..75171a798a 100644 --- a/crates/nu-command/src/filters/wrap.rs +++ b/crates/nu-command/src/filters/wrap.rs @@ -3,7 +3,7 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, - Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -67,44 +67,32 @@ impl Command for Wrap { Example { description: "Wrap a list into a table with a given column name", example: "[1 2 3] | wrap num", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(3)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "num" => Value::test_int(1), + }), + Value::test_record(record! { + "num" => Value::test_int(2), + }), + Value::test_record(record! { + "num" => Value::test_int(3), + }), + ])), }, Example { description: "Wrap a range into a table with a given column name", example: "1..3 | wrap num", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["num".into()], - vals: vec![Value::test_int(3)], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "num" => Value::test_int(1), + }), + Value::test_record(record! { + "num" => Value::test_int(2), + }), + Value::test_record(record! { + "num" => Value::test_int(3), + }), + ])), }, ] } diff --git a/crates/nu-command/src/formats/from/csv.rs b/crates/nu-command/src/formats/from/csv.rs index f73676ced8..5072914f2c 100644 --- a/crates/nu-command/src/formats/from/csv.rs +++ b/crates/nu-command/src/formats/from/csv.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -81,15 +81,11 @@ impl Command for FromCsv { Example { description: "Convert comma-separated data to a table", example: "\"ColA,ColB\n1,2\" | from csv", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![ - Value::test_int(1), - Value::test_int(2), - ], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "ColA" => Value::test_int(1), + "ColB" => Value::test_int(2), })], - Span::test_data(), )) }, Example { diff --git a/crates/nu-command/src/formats/from/json.rs b/crates/nu-command/src/formats/from/json.rs index ceed8e497c..fb95d7719a 100644 --- a/crates/nu-command/src/formats/from/json.rs +++ b/crates/nu-command/src/formats/from/json.rs @@ -1,7 +1,7 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, Record, + record, Category, Example, IntoInterruptiblePipelineData, IntoPipelineData, PipelineData, ShellError, Signature, Span, Type, Value, }; @@ -29,23 +29,16 @@ impl Command for FromJson { Example { example: r#"'{ "a": 1 }' | from json"#, description: "Converts json formatted string to table", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), })), }, Example { example: r#"'{ "a": 1, "b": [1, 2] }' | from json"#, description: "Converts json formatted string to table", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![ - Value::test_int(1), - Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - ), - ], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_list(vec![Value::test_int(1), Value::test_int(2)]), })), }, ] diff --git a/crates/nu-command/src/formats/from/nuon.rs b/crates/nu-command/src/formats/from/nuon.rs index 8025daa517..0ff034aeff 100644 --- a/crates/nu-command/src/formats/from/nuon.rs +++ b/crates/nu-command/src/formats/from/nuon.rs @@ -1,8 +1,8 @@ use nu_protocol::ast::{Call, Expr, Expression, PipelineElement}; use nu_protocol::engine::{Command, EngineState, Stack, StateWorkingSet}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Range, Record, ShellError, Signature, Span, - Type, Unit, Value, + record, Category, Example, IntoPipelineData, PipelineData, Range, Record, ShellError, + Signature, Span, Type, Unit, Value, }; #[derive(Clone)] pub struct FromNuon; @@ -27,23 +27,16 @@ impl Command for FromNuon { Example { example: "'{ a:1 }' | from nuon", description: "Converts nuon formatted string to table", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), })), }, Example { example: "'{ a:1, b: [1, 2] }' | from nuon", description: "Converts nuon formatted string to table", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![ - Value::test_int(1), - Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - ), - ], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_list(vec![Value::test_int(1), Value::test_int(2)]), })), }, ] diff --git a/crates/nu-command/src/formats/from/ssv.rs b/crates/nu-command/src/formats/from/ssv.rs index 44249dba74..2ac02d759d 100644 --- a/crates/nu-command/src/formats/from/ssv.rs +++ b/crates/nu-command/src/formats/from/ssv.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -44,30 +44,28 @@ impl Command for FromSsv { example: r#"'FOO BAR 1 2' | from ssv"#, description: "Converts ssv formatted string to table", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["FOO".to_string(), "BAR".to_string()], - vals: vec![Value::test_string("1"), Value::test_string("2")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "FOO" => Value::test_string("1"), + "BAR" => Value::test_string("2"), })], - Span::test_data(), )), }, Example { example: r#"'FOO BAR 1 2' | from ssv --noheaders"#, description: "Converts ssv formatted string to table but not treating the first row as column names", result: Some( - Value::list( + Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("FOO"), Value::test_string("BAR")], + Value::test_record(record! { + "column1" => Value::test_string("FOO"), + "column2" => Value::test_string("BAR"), }), - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("1"), Value::test_string("2")], + Value::test_record(record! { + "column1" => Value::test_string("1"), + "column2" => Value::test_string("2"), }), ], - Span::test_data(), ) ), }] diff --git a/crates/nu-command/src/formats/from/toml.rs b/crates/nu-command/src/formats/from/toml.rs index 0732918919..ee3bdff722 100644 --- a/crates/nu-command/src/formats/from/toml.rs +++ b/crates/nu-command/src/formats/from/toml.rs @@ -1,7 +1,7 @@ use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, Type, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Type, Value, }; @@ -28,24 +28,19 @@ impl Command for FromToml { Example { example: "'a = 1' | from toml", description: "Converts toml formatted string to record", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), })), }, Example { example: "'a = 1 b = [1, 2]' | from toml", description: "Converts toml formatted string to record", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![ + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_list(vec![ Value::test_int(1), - Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - ), - ], + Value::test_int(2)],), })), }, ] diff --git a/crates/nu-command/src/formats/from/tsv.rs b/crates/nu-command/src/formats/from/tsv.rs index ed6cd353e3..280c40a570 100644 --- a/crates/nu-command/src/formats/from/tsv.rs +++ b/crates/nu-command/src/formats/from/tsv.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -75,15 +75,11 @@ impl Command for FromTsv { Example { description: "Convert tab-separated data to a table", example: "\"ColA\tColB\n1\t2\" | from tsv", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![ - Value::test_int(1), - Value::test_int(2), - ], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "ColA" => Value::test_int(1), + "ColB" => Value::test_int(2), })], - Span::test_data(), )) }, Example { diff --git a/crates/nu-command/src/formats/from/xml.rs b/crates/nu-command/src/formats/from/xml.rs index f42acfeb47..2907c2e360 100644 --- a/crates/nu-command/src/formats/from/xml.rs +++ b/crates/nu-command/src/formats/from/xml.rs @@ -3,8 +3,8 @@ use indexmap::map::IndexMap; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, Type, - Value, + record, Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, + Type, Value, }; use roxmltree::NodeType; @@ -69,45 +69,22 @@ string. This way content of every tag is always a table and is easier to parse"# Event ' | from xml"#, description: "Converts xml formatted string to record", - result: Some(Value::test_record(Record { - cols: vec![ - COLUMN_TAG_NAME.to_string(), - COLUMN_ATTRS_NAME.to_string(), - COLUMN_CONTENT_NAME.to_string(), - ], - vals: vec![ - Value::test_string("note"), - Value::test_record(Record::new()), - Value::list( - vec![Value::test_record(Record { - cols: vec![ - COLUMN_TAG_NAME.to_string(), - COLUMN_ATTRS_NAME.to_string(), - COLUMN_CONTENT_NAME.to_string(), - ], - vals: vec![ - Value::test_string("remember"), - Value::test_record(Record::new()), - Value::list( - vec![Value::test_record(Record { - cols: vec![ - COLUMN_TAG_NAME.to_string(), - COLUMN_ATTRS_NAME.to_string(), - COLUMN_CONTENT_NAME.to_string(), - ], - vals: vec![ - Value::test_nothing(), - Value::test_nothing(), - Value::test_string("Event"), - ], - })], - Span::test_data(), - ), - ], + result: Some(Value::test_record(record! { + COLUMN_TAG_NAME => Value::test_string("note"), + COLUMN_ATTRS_NAME => Value::test_record(Record::new()), + COLUMN_CONTENT_NAME => Value::test_list(vec![ + Value::test_record(record! { + COLUMN_TAG_NAME => Value::test_string("remember"), + COLUMN_ATTRS_NAME => Value::test_record(Record::new()), + COLUMN_CONTENT_NAME => Value::test_list(vec![ + Value::test_record(record! { + COLUMN_TAG_NAME => Value::test_nothing(), + COLUMN_ATTRS_NAME => Value::test_nothing(), + COLUMN_CONTENT_NAME => Value::test_string("Event"), })], - Span::test_data(), ), - ], + })], + ), })), }] } @@ -344,28 +321,18 @@ mod tests { attrs: IndexMap<&str, &str>, content: &[Value], ) -> Value { - Value::test_record(Record { - cols: vec![ - COLUMN_TAG_NAME.into(), - COLUMN_ATTRS_NAME.into(), - COLUMN_CONTENT_NAME.into(), - ], - vals: vec![string(tag), attributes(attrs), table(content)], + Value::test_record(record! { + COLUMN_TAG_NAME => string(tag), + COLUMN_ATTRS_NAME => attributes(attrs), + COLUMN_CONTENT_NAME => table(content), }) } fn content_string(value: impl Into) -> Value { - Value::test_record(Record { - cols: vec![ - COLUMN_TAG_NAME.into(), - COLUMN_ATTRS_NAME.into(), - COLUMN_CONTENT_NAME.into(), - ], - vals: vec![ - Value::nothing(Span::test_data()), - Value::nothing(Span::test_data()), - string(value), - ], + Value::test_record(record! { + COLUMN_TAG_NAME => Value::nothing(Span::test_data()), + COLUMN_ATTRS_NAME => Value::nothing(Span::test_data()), + COLUMN_CONTENT_NAME => string(value), }) } diff --git a/crates/nu-command/src/formats/from/yaml.rs b/crates/nu-command/src/formats/from/yaml.rs index ea85f74d1a..7fb28f68fe 100644 --- a/crates/nu-command/src/formats/from/yaml.rs +++ b/crates/nu-command/src/formats/from/yaml.rs @@ -3,7 +3,7 @@ use itertools::Itertools; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoPipelineData, PipelineData, Record, ShellError, Signature, Span, Type, + record, Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Type, Value, }; use serde::de::Deserialize; @@ -221,30 +221,22 @@ pub fn get_examples() -> Vec> { Example { example: "'a: 1' | from yaml", description: "Converts yaml formatted string to table", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), })), }, Example { example: "'[ a: 1, b: [1, 2] ]' | from yaml", description: "Converts yaml formatted string to table", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string()], - vals: vec![Value::test_int(1)], - }), - Value::test_record(Record { - cols: vec!["b".to_string()], - vals: vec![Value::list( - vec![Value::test_int(1), Value::test_int(2)], - Span::test_data(), - )], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(1), + }), + Value::test_record(record! { + "b" => Value::test_list( + vec![Value::test_int(1), Value::test_int(2)],), + }), + ])), }, ] } @@ -274,17 +266,15 @@ mod test { TestCase { description: "Double Curly Braces With Quotes", input: r#"value: "{{ something }}""#, - expected: Ok(Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::test_string("{{ something }}")], + expected: Ok(Value::test_record(record! { + "value" => Value::test_string("{{ something }}"), })), }, TestCase { description: "Double Curly Braces Without Quotes", input: r#"value: {{ something }}"#, - expected: Ok(Value::test_record(Record { - cols: vec!["value".to_string()], - vals: vec![Value::test_string("{{ something }}")], + expected: Ok(Value::test_record(record! { + "value" => Value::test_string("{{ something }}"), })), }, ]; @@ -335,19 +325,16 @@ mod test { Span::test_data(), ); - let expected: Result = Ok(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_string("b"), Value::test_string("c")], - }), - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_string("g"), Value::test_string("h")], - }), - ], - Span::test_data(), - )); + let expected: Result = Ok(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_string("b"), + "b" => Value::test_string("c"), + }), + Value::test_record(record! { + "a" => Value::test_string("g"), + "b" => Value::test_string("h"), + }), + ])); // Unfortunately the eq function for Value doesn't compare well enough to detect // ordering errors in List columns or values. @@ -388,37 +375,32 @@ mod test { let test_cases: Vec = vec![ TestCase { input: "Key: !Value ${TEST}-Test-role", - expected: Ok(Value::test_record(Record { - cols: vec!["Key".to_string()], - vals: vec![Value::test_string("!Value ${TEST}-Test-role")], + expected: Ok(Value::test_record(record! { + "Key" => Value::test_string("!Value ${TEST}-Test-role"), })), }, TestCase { input: "Key: !Value test-${TEST}", - expected: Ok(Value::test_record(Record { - cols: vec!["Key".to_string()], - vals: vec![Value::test_string("!Value test-${TEST}")], + expected: Ok(Value::test_record(record! { + "Key" => Value::test_string("!Value test-${TEST}"), })), }, TestCase { input: "Key: !Value", - expected: Ok(Value::test_record(Record { - cols: vec!["Key".to_string()], - vals: vec![Value::test_string("!Value")], + expected: Ok(Value::test_record(record! { + "Key" => Value::test_string("!Value"), })), }, TestCase { input: "Key: !True", - expected: Ok(Value::test_record(Record { - cols: vec!["Key".to_string()], - vals: vec![Value::test_string("!True")], + expected: Ok(Value::test_record(record! { + "Key" => Value::test_string("!True"), })), }, TestCase { input: "Key: !123", - expected: Ok(Value::test_record(Record { - cols: vec!["Key".to_string()], - vals: vec![Value::test_string("!123")], + expected: Ok(Value::test_record(record! { + "Key" => Value::test_string("!123"), })), }, ]; diff --git a/crates/nu-command/src/formats/to/md.rs b/crates/nu-command/src/formats/to/md.rs index c72ef05408..c882275372 100644 --- a/crates/nu-command/src/formats/to/md.rs +++ b/crates/nu-command/src/formats/to/md.rs @@ -320,7 +320,7 @@ fn get_padded_string(text: String, desired_length: usize, padding_character: cha #[cfg(test)] mod tests { use super::*; - use nu_protocol::{Config, IntoPipelineData, Record, Span, Value}; + use nu_protocol::{record, Config, IntoPipelineData, Value}; fn one(string: &str) -> String { string @@ -342,9 +342,8 @@ mod tests { #[test] fn render_h1() { - let value = Value::test_record(Record { - cols: vec!["H1".to_string()], - vals: vec![Value::test_string("Ecuador")], + let value = Value::test_record(record! { + "H1" => Value::test_string("Ecuador"), }); assert_eq!(fragment(value, false, &Config::default()), "# Ecuador\n"); @@ -352,9 +351,8 @@ mod tests { #[test] fn render_h2() { - let value = Value::test_record(Record { - cols: vec!["H2".to_string()], - vals: vec![Value::test_string("Ecuador")], + let value = Value::test_record(record! { + "H2" => Value::test_string("Ecuador"), }); assert_eq!(fragment(value, false, &Config::default()), "## Ecuador\n"); @@ -362,9 +360,8 @@ mod tests { #[test] fn render_h3() { - let value = Value::test_record(Record { - cols: vec!["H3".to_string()], - vals: vec![Value::test_string("Ecuador")], + let value = Value::test_record(record! { + "H3" => Value::test_string("Ecuador"), }); assert_eq!(fragment(value, false, &Config::default()), "### Ecuador\n"); @@ -372,9 +369,8 @@ mod tests { #[test] fn render_blockquote() { - let value = Value::test_record(Record { - cols: vec!["BLOCKQUOTE".to_string()], - vals: vec![Value::test_string("Ecuador")], + let value = Value::test_record(record! { + "BLOCKQUOTE" => Value::test_string("Ecuador"), }); assert_eq!(fragment(value, false, &Config::default()), "> Ecuador\n"); @@ -382,23 +378,17 @@ mod tests { #[test] fn render_table() { - let value = Value::list( - vec![ - Value::test_record(Record { - cols: vec!["country".to_string()], - vals: vec![Value::test_string("Ecuador")], - }), - Value::test_record(Record { - cols: vec!["country".to_string()], - vals: vec![Value::test_string("New Zealand")], - }), - Value::test_record(Record { - cols: vec!["country".to_string()], - vals: vec![Value::test_string("USA")], - }), - ], - Span::test_data(), - ); + let value = Value::test_list(vec![ + Value::test_record(record! { + "country" => Value::test_string("Ecuador"), + }), + Value::test_record(record! { + "country" => Value::test_string("New Zealand"), + }), + Value::test_record(record! { + "country" => Value::test_string("USA"), + }), + ]); assert_eq!( table( diff --git a/crates/nu-command/src/math/max.rs b/crates/nu-command/src/math/max.rs index edc7971d75..50ca940b69 100644 --- a/crates/nu-command/src/math/max.rs +++ b/crates/nu-command/src/math/max.rs @@ -3,7 +3,7 @@ use crate::math::utils::run_with_function; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; #[derive(Clone)] @@ -52,9 +52,9 @@ impl Command for SubCommand { Example { description: "Find the maxima of the columns of a table", example: "[{a: 1 b: 3} {a: 2 b: -1}] | math max", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(2), Value::test_int(3)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(2), + "b" => Value::test_int(3), })), }, ] diff --git a/crates/nu-command/src/math/median.rs b/crates/nu-command/src/math/median.rs index d4d29524ec..097b4a3044 100644 --- a/crates/nu-command/src/math/median.rs +++ b/crates/nu-command/src/math/median.rs @@ -5,7 +5,7 @@ use crate::math::utils::run_with_function; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; #[derive(Clone)] @@ -56,9 +56,9 @@ impl Command for SubCommand { Example { description: "Compute the medians of the columns of a table", example: "[{a: 1 b: 3} {a: 2 b: -1} {a: -3 b: 5}] | math median", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(3)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(3), })), }, ] diff --git a/crates/nu-command/src/math/min.rs b/crates/nu-command/src/math/min.rs index 8326ea6063..a130cd723f 100644 --- a/crates/nu-command/src/math/min.rs +++ b/crates/nu-command/src/math/min.rs @@ -3,7 +3,7 @@ use crate::math::utils::run_with_function; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; #[derive(Clone)] @@ -52,9 +52,9 @@ impl Command for SubCommand { Example { description: "Compute the minima of the columns of a table", example: "[{a: 1 b: 3} {a: 2 b: -1}] | math min", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(-1)], + result: Some(Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(-1), })), }, Example { diff --git a/crates/nu-command/src/math/mode.rs b/crates/nu-command/src/math/mode.rs index 2de4d050c7..c6c1b6de86 100644 --- a/crates/nu-command/src/math/mode.rs +++ b/crates/nu-command/src/math/mode.rs @@ -2,7 +2,7 @@ use crate::math::utils::run_with_function; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; use std::cmp::Ordering; use std::collections::HashMap; @@ -82,23 +82,20 @@ impl Command for SubCommand { Example { description: "Compute the mode(s) of a list of numbers", example: "[3 3 9 12 12 15] | math mode", - result: Some(Value::list( - vec![Value::test_int(3), Value::test_int(12)], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_int(3), + Value::test_int(12), + ])), }, Example { description: "Compute the mode(s) of the columns of a table", example: "[{a: 1 b: 3} {a: 2 b: -1} {a: 1 b: 5}] | math mode", - result: Some(Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![ - Value::list(vec![Value::test_int(1)], Span::test_data()), - Value::list( + result: Some(Value::test_record(record! { + "a" => Value::list(vec![Value::test_int(1)], Span::test_data()), + "b" => Value::list( vec![Value::test_int(-1), Value::test_int(3), Value::test_int(5)], Span::test_data(), ), - ], })), }, ] diff --git a/crates/nu-command/src/network/url/parse.rs b/crates/nu-command/src/network/url/parse.rs index f2fa4a21eb..3ef24883c3 100644 --- a/crates/nu-command/src/network/url/parse.rs +++ b/crates/nu-command/src/network/url/parse.rs @@ -2,8 +2,7 @@ use super::url; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, - Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; use url::Url; @@ -56,36 +55,20 @@ impl Command for SubCommand { vec![Example { description: "Parses a url", example: "'http://user123:pass567@www.example.com:8081/foo/bar?param1=section&p2=&f[name]=vldc#hello' | url parse", - result: Some(Value::test_record(Record { - cols: vec![ - "scheme".to_string(), - "username".to_string(), - "password".to_string(), - "host".to_string(), - "port".to_string(), - "path".to_string(), - "query".to_string(), - "fragment".to_string(), - "params".to_string(), - ], - vals: vec![ - Value::test_string("http"), - Value::test_string("user123"), - Value::test_string("pass567"), - Value::test_string("www.example.com"), - Value::test_string("8081"), - Value::test_string("/foo/bar"), - Value::test_string("param1=section&p2=&f[name]=vldc"), - Value::test_string("hello"), - Value::test_record(Record { - cols: vec!["param1".to_string(), "p2".to_string(), "f[name]".to_string()], - vals: vec![ - Value::test_string("section"), - Value::test_string(""), - Value::test_string("vldc"), - ], + result: Some(Value::test_record(record! { + "scheme" => Value::test_string("http"), + "username" => Value::test_string("user123"), + "password" => Value::test_string("pass567"), + "host" => Value::test_string("www.example.com"), + "port" => Value::test_string("8081"), + "path" => Value::test_string("/foo/bar"), + "query" => Value::test_string("param1=section&p2=&f[name]=vldc"), + "fragment" => Value::test_string("hello"), + "params" => Value::test_record(record! { + "param1" => Value::test_string("section"), + "p2" => Value::test_string(""), + "f[name]" => Value::test_string("vldc"), }), - ], })), }] } diff --git a/crates/nu-command/src/path/parse.rs b/crates/nu-command/src/path/parse.rs index 7482ed2d21..3435d48142 100644 --- a/crates/nu-command/src/path/parse.rs +++ b/crates/nu-command/src/path/parse.rs @@ -97,23 +97,17 @@ On Windows, an extra 'prefix' column is added."# #[cfg(windows)] fn examples(&self) -> Vec { + use nu_protocol::record; + vec![ Example { description: "Parse a single path", example: r"'C:\Users\viking\spam.txt' | path parse", - result: Some(Value::test_record(Record { - cols: vec![ - "prefix".into(), - "parent".into(), - "stem".into(), - "extension".into(), - ], - vals: vec![ - Value::test_string("C:"), - Value::test_string(r"C:\Users\viking"), - Value::test_string("spam"), - Value::test_string("txt"), - ], + result: Some(Value::test_record(record! { + "prefix" => Value::test_string("C:"), + "parent" => Value::test_string(r"C:\Users\viking"), + "stem" => Value::test_string("spam"), + "extension" => Value::test_string("txt"), })), }, Example { @@ -124,52 +118,28 @@ On Windows, an extra 'prefix' column is added."# Example { description: "Ignore the extension", example: r"'C:\Users\viking.d' | path parse --extension ''", - result: Some(Value::test_record(Record { - cols: vec![ - "prefix".into(), - "parent".into(), - "stem".into(), - "extension".into(), - ], - vals: vec![ - Value::test_string("C:"), - Value::test_string(r"C:\Users"), - Value::test_string("viking.d"), - Value::test_string(""), - ], + result: Some(Value::test_record(record! { + "prefix" => Value::test_string("C:"), + "parent" => Value::test_string(r"C:\Users"), + "stem" => Value::test_string("viking.d"), + "extension" => Value::test_string(""), })), }, Example { description: "Parse all paths in a list", example: r"[ C:\Users\viking.d C:\Users\spam.txt ] | path parse", result: Some(Value::test_list(vec![ - Value::test_record(Record { - cols: vec![ - "prefix".into(), - "parent".into(), - "stem".into(), - "extension".into(), - ], - vals: vec![ - Value::test_string("C:"), - Value::test_string(r"C:\Users"), - Value::test_string("viking"), - Value::test_string("d"), - ], + Value::test_record(record! { + "prefix" => Value::test_string("C:"), + "parent" => Value::test_string(r"C:\Users"), + "stem" => Value::test_string("viking"), + "extension" => Value::test_string("d"), }), - Value::test_record(Record { - cols: vec![ - "prefix".into(), - "parent".into(), - "stem".into(), - "extension".into(), - ], - vals: vec![ - Value::test_string("C:"), - Value::test_string(r"C:\Users"), - Value::test_string("spam"), - Value::test_string("txt"), - ], + Value::test_record(record! { + "prefix" => Value::test_string("C:"), + "parent" => Value::test_string(r"C:\Users"), + "stem" => Value::test_string("spam"), + "extension" => Value::test_string("txt"), }), ])), }, @@ -178,17 +148,16 @@ On Windows, an extra 'prefix' column is added."# #[cfg(not(windows))] fn examples(&self) -> Vec { + use nu_protocol::record; + vec![ Example { description: "Parse a path", example: r"'/home/viking/spam.txt' | path parse", - result: Some(Value::test_record(Record { - cols: vec!["parent".into(), "stem".into(), "extension".into()], - vals: vec![ - Value::test_string("/home/viking"), - Value::test_string("spam"), - Value::test_string("txt"), - ], + result: Some(Value::test_record(record! { + "parent" => Value::test_string("/home/viking"), + "stem" => Value::test_string("spam"), + "extension" => Value::test_string("txt"), })), }, Example { @@ -199,34 +168,25 @@ On Windows, an extra 'prefix' column is added."# Example { description: "Ignore the extension", example: r"'/etc/conf.d' | path parse --extension ''", - result: Some(Value::test_record(Record { - cols: vec!["parent".into(), "stem".into(), "extension".into()], - vals: vec![ - Value::test_string("/etc"), - Value::test_string("conf.d"), - Value::test_string(""), - ], + result: Some(Value::test_record(record! { + "parent" => Value::test_string("/etc"), + "stem" => Value::test_string("conf.d"), + "extension" => Value::test_string(""), })), }, Example { description: "Parse all paths in a list", example: r"[ /home/viking.d /home/spam.txt ] | path parse", result: Some(Value::test_list(vec![ - Value::test_record(Record { - cols: vec!["parent".into(), "stem".into(), "extension".into()], - vals: vec![ - Value::test_string("/home"), - Value::test_string("viking"), - Value::test_string("d"), - ], + Value::test_record(record! { + "parent" => Value::test_string("/home"), + "stem" => Value::test_string("viking"), + "extension" => Value::test_string("d"), }), - Value::test_record(Record { - cols: vec!["parent".into(), "stem".into(), "extension".into()], - vals: vec![ - Value::test_string("/home"), - Value::test_string("spam"), - Value::test_string("txt"), - ], + Value::test_record(record! { + "parent" => Value::test_string("/home"), + "stem" => Value::test_string("spam"), + "extension" => Value::test_string("txt"), }), ])), }, diff --git a/crates/nu-command/src/sort_utils.rs b/crates/nu-command/src/sort_utils.rs index 47db220b97..7607e67cd3 100644 --- a/crates/nu-command/src/sort_utils.rs +++ b/crates/nu-command/src/sort_utils.rs @@ -227,137 +227,119 @@ pub fn compare( #[cfg(test)] mod tests { use super::*; - use nu_protocol::{Record, Span, Value}; + use nu_protocol::{record, Value}; #[test] fn test_sort_value() { - let val = Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - ], - Span::test_data(), - ); + let val = Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + ]); let sorted_alphabetically = sort_value(&val, vec!["fruit".to_string()], true, false, false).unwrap(); assert_eq!( sorted_alphabetically, - Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - ], - Span::test_data(), - ) + Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + ],) ); let sorted_by_count_desc = sort_value(&val, vec!["count".to_string()], false, false, false).unwrap(); assert_eq!( sorted_by_count_desc, - Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - ], - Span::test_data(), - ) + Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + ],) ); } #[test] fn test_sort_value_in_place() { - let mut val = Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - ], - Span::test_data(), - ); + let mut val = Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + ]); sort_value_in_place(&mut val, vec!["fruit".to_string()], true, false, false).unwrap(); assert_eq!( val, - Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - ], - Span::test_data(), - ) + Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + ],) ); sort_value_in_place(&mut val, vec!["count".to_string()], false, false, false).unwrap(); assert_eq!( val, - Value::list( - vec![ - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("apple"), Value::test_int(9)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("orange"), Value::test_int(7)], - }), - Value::test_record(Record { - cols: vec!["fruit".to_string(), "count".to_string()], - vals: vec![Value::test_string("pear"), Value::test_int(3)], - }), - ], - Span::test_data(), - ) + Value::test_list(vec![ + Value::test_record(record! { + "fruit" => Value::test_string("apple"), + "count" => Value::test_int(9), + }), + Value::test_record(record! { + "fruit" => Value::test_string("orange"), + "count" => Value::test_int(7), + }), + Value::test_record(record! { + "fruit" => Value::test_string("pear"), + "count" => Value::test_int(3), + }), + ],) ); } } diff --git a/crates/nu-command/src/strings/detect_columns.rs b/crates/nu-command/src/strings/detect_columns.rs index 405ab6f832..c80cd47202 100644 --- a/crates/nu-command/src/strings/detect_columns.rs +++ b/crates/nu-command/src/strings/detect_columns.rs @@ -6,8 +6,8 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, IntoInterruptiblePipelineData, PipelineData, Range, Record, ShellError, - Signature, Span, Spanned, SyntaxShape, Type, Value, + record, Category, Example, IntoInterruptiblePipelineData, PipelineData, Range, Record, + ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; type Input<'t> = Peekable>; @@ -58,26 +58,15 @@ impl Command for DetectColumns { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "Splits string across multiple columns", example: "'a b c' | detect columns --no-headers", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "column0".to_string(), - "column1".to_string(), - "column2".to_string(), - ], - vals: vec![ - Value::test_string("a"), - Value::test_string("b"), - Value::test_string("c"), - ], - })], - span, - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "column0" => Value::test_string("a"), + "column1" => Value::test_string("b"), + "column2" => Value::test_string("c"), + })])), }, Example { description: "", diff --git a/crates/nu-command/src/strings/parse.rs b/crates/nu-command/src/strings/parse.rs index 2bd1cbd9cf..8d501d09b9 100644 --- a/crates/nu-command/src/strings/parse.rs +++ b/crates/nu-command/src/strings/parse.rs @@ -6,7 +6,7 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - Category, Example, ListStream, PipelineData, Record, ShellError, Signature, Span, Spanned, + record, Category, Example, ListStream, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -43,13 +43,10 @@ impl Command for Parse { } fn examples(&self) -> Vec { - let result = Value::list( - vec![Value::test_record(Record { - cols: vec!["foo".to_string(), "bar".to_string()], - vals: vec![Value::test_string("hi"), Value::test_string("there")], - })], - Span::test_data(), - ); + let result = Value::test_list(vec![Value::test_record(record! { + "foo" => Value::test_string("hi"), + "bar" => Value::test_string("there"), + })]); vec![ Example { @@ -65,55 +62,46 @@ impl Command for Parse { Example { description: "Parse a string using fancy-regex named capture group pattern", example: "\"foo bar.\" | parse --regex '\\s*(?\\w+)(?=\\.)'", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["name".to_string()], - vals: vec![Value::test_string("bar")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "name" => Value::test_string("bar"), })], - Span::test_data(), )), }, Example { description: "Parse a string using fancy-regex capture group pattern", example: "\"foo! bar.\" | parse --regex '(\\w+)(?=\\.)|(\\w+)(?=!)'", - result: Some(Value::list( + result: Some(Value::test_list( vec![ - Value::test_record(Record { - cols: vec!["capture0".to_string(), "capture1".to_string()], - vals: vec![Value::test_string(""), Value::test_string("foo")], + Value::test_record(record! { + "capture0" => Value::test_string(""), + "capture1" => Value::test_string("foo"), }), - Value::test_record(Record { - cols: vec!["capture0".to_string(), "capture1".to_string()], - vals: vec![Value::test_string("bar"), Value::test_string("")], + Value::test_record(record! { + "capture0" => Value::test_string("bar"), + "capture1" => Value::test_string(""), }), ], - Span::test_data(), )), }, Example { description: "Parse a string using fancy-regex look behind pattern", example: "\" @another(foo bar) \" | parse --regex '\\s*(?<=[() ])(@\\w+)(\\([^)]*\\))?\\s*'", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["capture0".to_string(), "capture1".to_string()], - vals: vec![ - Value::test_string("@another"), - Value::test_string("(foo bar)"), - ], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "capture0" => Value::test_string("@another"), + "capture1" => Value::test_string("(foo bar)"), })], - Span::test_data(), )), }, Example { description: "Parse a string using fancy-regex look ahead atomic group pattern", example: "\"abcd\" | parse --regex '^a(bc(?=d)|b)cd$'", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["capture0".to_string()], - vals: vec![Value::test_string("b")], + result: Some(Value::test_list( + vec![Value::test_record(record! { + "capture0" => Value::test_string("b"), })], - Span::test_data(), )), }, ] diff --git a/crates/nu-command/src/strings/size.rs b/crates/nu-command/src/strings/size.rs index 9e4a95851b..78261996f8 100644 --- a/crates/nu-command/src/strings/size.rs +++ b/crates/nu-command/src/strings/size.rs @@ -2,7 +2,7 @@ use fancy_regex::Regex; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; use std::collections::BTreeMap; use std::{fmt, str}; @@ -58,61 +58,34 @@ impl Command for Size { Example { description: "Count the number of words in a string", example: r#""There are seven words in this sentence" | size"#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(7), - Value::test_int(38), - Value::test_int(38), - Value::test_int(38), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(7), + "bytes" => Value::test_int(38), + "chars" => Value::test_int(38), + "graphemes" => Value::test_int(38), })), }, Example { description: "Counts unicode characters", example: r#"'今天天气真好' | size "#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(6), - Value::test_int(18), - Value::test_int(6), - Value::test_int(6), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(6), + "bytes" => Value::test_int(18), + "chars" => Value::test_int(6), + "graphemes" => Value::test_int(6), })), }, Example { description: "Counts Unicode characters correctly in a string", example: r#""Amélie Amelie" | size"#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(2), - Value::test_int(15), - Value::test_int(14), - Value::test_int(13), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(2), + "bytes" => Value::test_int(15), + "chars" => Value::test_int(14), + "graphemes" => Value::test_int(13), })), }, ] diff --git a/crates/nu-command/src/strings/split/column.rs b/crates/nu-command/src/strings/split/column.rs index 3e2fa30f6f..17c9fd3302 100644 --- a/crates/nu-command/src/strings/split/column.rs +++ b/crates/nu-command/src/strings/split/column.rs @@ -2,8 +2,8 @@ use nu_engine::CallExt; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, Spanned, SyntaxShape, - Type, Value, + record, Category, Example, PipelineData, Record, ShellError, Signature, Span, Spanned, + SyntaxShape, Type, Value, }; use regex::Regex; @@ -63,74 +63,48 @@ impl Command for SubCommand { Example { description: "Split a string into columns by the specified separator", example: "'a--b--c' | split column '--'", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_string("a"), - Value::test_string("b"), - Value::test_string("c"), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "column1" => Value::test_string("a"), + "column2" => Value::test_string("b"), + "column3" => Value::test_string("c"), + })])), }, Example { description: "Split a string into columns of char and remove the empty columns", example: "'abc' | split column --collapse-empty ''", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "column1".to_string(), - "column2".to_string(), - "column3".to_string(), - ], - vals: vec![ - Value::test_string("a"), - Value::test_string("b"), - Value::test_string("c"), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "column1" => Value::test_string("a"), + "column2" => Value::test_string("b"), + "column3" => Value::test_string("c"), + })])), }, Example { description: "Split a list of strings into a table", example: "['a-b' 'c-d'] | split column -", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("a"), Value::test_string("b")], - }), - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("c"), Value::test_string("d")], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "column1" => Value::test_string("a"), + "column2" => Value::test_string("b"), + }), + Value::test_record(record! { + "column1" => Value::test_string("c"), + "column2" => Value::test_string("d"), + }), + ])), }, Example { description: "Split a list of strings into a table, ignoring padding", example: r"['a - b' 'c - d'] | split column --regex '\s*-\s*'", - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("a"), Value::test_string("b")], - }), - Value::test_record(Record { - cols: vec!["column1".to_string(), "column2".to_string()], - vals: vec![Value::test_string("c"), Value::test_string("d")], - }), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "column1" => Value::test_string("a"), + "column2" => Value::test_string("b"), + }), + Value::test_record(record! { + "column1" => Value::test_string("c"), + "column2" => Value::test_string("d"), + }), + ])), }, ] } diff --git a/crates/nu-command/src/strings/str_/case/capitalize.rs b/crates/nu-command/src/strings/str_/case/capitalize.rs index fd66d14e7f..9c20942f75 100644 --- a/crates/nu-command/src/strings/str_/case/capitalize.rs +++ b/crates/nu-command/src/strings/str_/case/capitalize.rs @@ -2,10 +2,9 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::ast::CellPath; use nu_protocol::engine::{Command, EngineState, Stack}; +use nu_protocol::record; use nu_protocol::Category; -use nu_protocol::{ - Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, -}; +use nu_protocol::{Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value}; #[derive(Clone)] pub struct SubCommand; @@ -68,13 +67,10 @@ impl Command for SubCommand { Example { description: "Capitalize a column in a table", example: "[[lang, gems]; [nu_test, 100]] | str capitalize lang", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["lang".to_string(), "gems".to_string()], - vals: vec![Value::test_string("Nu_test"), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "lang" => Value::test_string("Nu_test"), + "gems" => Value::test_int(100), + })])), }, ] } diff --git a/crates/nu-command/src/strings/str_/case/downcase.rs b/crates/nu-command/src/strings/str_/case/downcase.rs index a5984ffc9a..821718d3c9 100644 --- a/crates/nu-command/src/strings/str_/case/downcase.rs +++ b/crates/nu-command/src/strings/str_/case/downcase.rs @@ -2,10 +2,9 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::ast::CellPath; use nu_protocol::engine::{Command, EngineState, Stack}; +use nu_protocol::record; use nu_protocol::Category; -use nu_protocol::{ - Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, -}; +use nu_protocol::{Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value}; #[derive(Clone)] pub struct SubCommand; @@ -68,24 +67,18 @@ impl Command for SubCommand { Example { description: "Downcase contents", example: "[[ColA ColB]; [Test ABC]] | str downcase ColA", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![Value::test_string("test"), Value::test_string("ABC")], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_string("test"), + "ColB" => Value::test_string("ABC"), + })])), }, Example { description: "Downcase contents", example: "[[ColA ColB]; [Test ABC]] | str downcase ColA ColB", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![Value::test_string("test"), Value::test_string("abc")], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_string("test"), + "ColB" => Value::test_string("abc"), + })])), }, ] } diff --git a/crates/nu-command/src/strings/str_/contains.rs b/crates/nu-command/src/strings/str_/contains.rs index 160dd71197..fceac1aad3 100644 --- a/crates/nu-command/src/strings/str_/contains.rs +++ b/crates/nu-command/src/strings/str_/contains.rs @@ -3,8 +3,9 @@ use nu_engine::CallExt; use nu_protocol::ast::Call; use nu_protocol::ast::CellPath; use nu_protocol::engine::{Command, EngineState, Stack}; +use nu_protocol::record; use nu_protocol::{ - Category, Example, PipelineData, Record, ShellError, Signature, Span, SyntaxShape, Type, Value, + Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; #[derive(Clone)] @@ -89,32 +90,26 @@ impl Command for SubCommand { Example { description: "Check if input contains string in a record", example: "{ ColA: test, ColB: 100 } | str contains 'e' ColA", - result: Some(Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![Value::test_bool(true), Value::test_int(100)], + result: Some(Value::test_record(record! { + "ColA" => Value::test_bool(true), + "ColB" => Value::test_int(100), })), }, Example { description: "Check if input contains string in a table", example: " [[ColA ColB]; [test 100]] | str contains --ignore-case 'E' ColA", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![Value::test_bool(true), Value::test_int(100)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_bool(true), + "ColB" => Value::test_int(100), + })])), }, Example { description: "Check if input contains string in a table", example: " [[ColA ColB]; [test hello]] | str contains 'e' ColA ColB", - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string()], - vals: vec![Value::test_bool(true), Value::test_bool(true)], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "ColA" => Value::test_bool(true), + "ColB" => Value::test_bool(true), + })])), }, Example { description: "Check if input string contains 'banana'", @@ -124,26 +119,20 @@ impl Command for SubCommand { Example { description: "Check if list contains string", example: "[one two three] | str contains o", - result: Some(Value::list( - vec![ - Value::test_bool(true), - Value::test_bool(true), - Value::test_bool(false), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_bool(true), + Value::test_bool(true), + Value::test_bool(false), + ])), }, Example { description: "Check if list does not contain string", example: "[one two three] | str contains --not o", - result: Some(Value::list( - vec![ - Value::test_bool(false), - Value::test_bool(false), - Value::test_bool(true), - ], - Span::test_data(), - )), + result: Some(Value::test_list(vec![ + Value::test_bool(false), + Value::test_bool(false), + Value::test_bool(true), + ])), }, ] } diff --git a/crates/nu-command/src/strings/str_/distance.rs b/crates/nu-command/src/strings/str_/distance.rs index 3000b81284..6fded58eec 100644 --- a/crates/nu-command/src/strings/str_/distance.rs +++ b/crates/nu-command/src/strings/str_/distance.rs @@ -3,7 +3,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - levenshtein_distance, Category, Example, PipelineData, Record, ShellError, Signature, Span, + levenshtein_distance, record, Category, Example, PipelineData, ShellError, Signature, Span, SyntaxShape, Type, Value, }; @@ -80,25 +80,21 @@ impl Command for SubCommand { Example { description: "Compute edit distance between strings in table and another string, using cell paths", example: "[{a: 'nutshell' b: 'numetal'}] | str distance 'nushell' 'a' 'b'", - result: Some(Value::list ( + result: Some(Value::test_list ( vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(4)], - }) - ], - Span::test_data(), - )), + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(4), + })])), }, Example { description: "Compute edit distance between strings in record and another string, using cell paths", example: "{a: 'nutshell' b: 'numetal'} | str distance 'nushell' a b", result: Some( - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(4)], - }) - ), + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(4), + })), }] } } diff --git a/crates/nu-command/src/strings/str_/replace.rs b/crates/nu-command/src/strings/str_/replace.rs index b4229fc10a..ec7276a6da 100644 --- a/crates/nu-command/src/strings/str_/replace.rs +++ b/crates/nu-command/src/strings/str_/replace.rs @@ -4,7 +4,7 @@ use nu_engine::CallExt; use nu_protocol::{ ast::{Call, CellPath}, engine::{Command, EngineState, Stack}, - Category, Example, PipelineData, Record, ShellError, Signature, Span, Spanned, SyntaxShape, + record, Category, Example, PipelineData, ShellError, Signature, Span, Spanned, SyntaxShape, Type, Value, }; @@ -132,29 +132,22 @@ impl Command for SubCommand { description: "Find and replace all occurrences of find string in table using regular expression", example: "[[ColA ColB ColC]; [abc abc ads]] | str replace --all --regex 'b' 'z' ColA ColC", - result: Some(Value::list ( - vec![Value::test_record(Record { - cols: vec!["ColA".to_string(), "ColB".to_string(), "ColC".to_string()], - vals: vec![ - Value::test_string("azc"), - Value::test_string("abc"), - Value::test_string("ads"), - ], + result: Some(Value::test_list ( + vec![Value::test_record(record! { + "ColA" => Value::test_string("azc"), + "ColB" => Value::test_string("abc"), + "ColC" => Value::test_string("ads"), })], - Span::test_data(), )), }, Example { description: "Find and replace all occurrences of find string in record using regular expression", example: "{ KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC", - result: Some(Value::test_record(Record { - cols: vec!["KeyA".to_string(), "KeyB".to_string(), "KeyC".to_string()], - vals: vec![ - Value::test_string("azc"), - Value::test_string("abc"), - Value::test_string("ads"), - ], + result: Some(Value::test_record(record! { + "KeyA" => Value::test_string("azc"), + "KeyB" => Value::test_string("abc"), + "KeyC" => Value::test_string("ads"), })), }, Example { diff --git a/crates/nu-command/src/strings/str_/stats.rs b/crates/nu-command/src/strings/str_/stats.rs index 842e99f1b4..d40374c3f4 100644 --- a/crates/nu-command/src/strings/str_/stats.rs +++ b/crates/nu-command/src/strings/str_/stats.rs @@ -2,7 +2,7 @@ use fancy_regex::Regex; use nu_protocol::ast::Call; use nu_protocol::engine::{Command, EngineState, Stack}; use nu_protocol::{ - record, Category, Example, PipelineData, Record, ShellError, Signature, Span, Type, Value, + record, Category, Example, PipelineData, ShellError, Signature, Span, Type, Value, }; use std::collections::BTreeMap; use std::{fmt, str}; @@ -48,61 +48,34 @@ impl Command for SubCommand { Example { description: "Count the number of words in a string", example: r#""There are seven words in this sentence" | str stats"#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(7), - Value::test_int(38), - Value::test_int(38), - Value::test_int(38), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(7), + "bytes" => Value::test_int(38), + "chars" => Value::test_int(38), + "graphemes" => Value::test_int(38), })), }, Example { description: "Counts unicode characters", example: r#"'今天天气真好' | str stats "#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(6), - Value::test_int(18), - Value::test_int(6), - Value::test_int(6), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(6), + "bytes" => Value::test_int(18), + "chars" => Value::test_int(6), + "graphemes" => Value::test_int(6), })), }, Example { description: "Counts Unicode characters correctly in a string", example: r#""Amélie Amelie" | str stats"#, - result: Some(Value::test_record(Record { - cols: vec![ - "lines".into(), - "words".into(), - "bytes".into(), - "chars".into(), - "graphemes".into(), - ], - vals: vec![ - Value::test_int(1), - Value::test_int(2), - Value::test_int(15), - Value::test_int(14), - Value::test_int(13), - ], + result: Some(Value::test_record(record! { + "lines" => Value::test_int(1), + "words" => Value::test_int(2), + "bytes" => Value::test_int(15), + "chars" => Value::test_int(14), + "graphemes" => Value::test_int(13), })), }, ] diff --git a/crates/nu-command/src/viewers/table.rs b/crates/nu-command/src/viewers/table.rs index 143b46e476..14041cc33b 100644 --- a/crates/nu-command/src/viewers/table.rs +++ b/crates/nu-command/src/viewers/table.rs @@ -2,6 +2,7 @@ use lscolors::{LsColors, Style}; use nu_color_config::color_from_hex; use nu_color_config::{StyleComputer, TextStyle}; use nu_engine::{env::get_config, env_to_string, CallExt}; +use nu_protocol::record; use nu_protocol::{ ast::Call, engine::{Command, EngineState, Stack}, @@ -130,7 +131,6 @@ impl Command for Table { } fn examples(&self) -> Vec { - let span = Span::test_data(); vec![ Example { description: "List the files in current directory, with indexes starting from 1.", @@ -140,53 +140,44 @@ impl Command for Table { Example { description: "Render data in table view", example: r#"[[a b]; [1 2] [3 4]] | table"#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(3), Value::test_int(4)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(4), + }), + ])), }, Example { description: "Render data in table view (expanded)", example: r#"[[a b]; [1 2] [2 [4 4]]] | table --expand"#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(3), Value::test_int(4)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(4), + }), + ])), }, Example { description: "Render data in table view (collapsed)", example: r#"[[a b]; [1 2] [2 [4 4]]] | table --collapse"#, - result: Some(Value::list( - vec![ - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(1), Value::test_int(2)], - }), - Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_int(3), Value::test_int(4)], - }), - ], - span, - )), + result: Some(Value::test_list(vec![ + Value::test_record(record! { + "a" => Value::test_int(1), + "b" => Value::test_int(2), + }), + Value::test_record(record! { + "a" => Value::test_int(3), + "b" => Value::test_int(4), + }), + ])), }, ] } diff --git a/crates/nu-protocol/src/value/mod.rs b/crates/nu-protocol/src/value/mod.rs index 96617a91b4..88528bd8f4 100644 --- a/crates/nu-protocol/src/value/mod.rs +++ b/crates/nu-protocol/src/value/mod.rs @@ -3846,23 +3846,22 @@ fn get_filesize_format(format_value: &str, filesize_metric: Option) -> (By #[cfg(test)] mod tests { - - use super::{Record, Span, Value}; + use super::{Record, Value}; + use crate::record; mod is_empty { use super::*; #[test] fn test_string() { - let value = Value::string("", Span::unknown()); + let value = Value::test_string(""); assert!(value.is_empty()); } #[test] fn test_list() { - let list_with_no_values = Value::list(vec![], Span::unknown()); - let list_with_one_empty_string = - Value::list(vec![Value::string("", Span::unknown())], Span::unknown()); + let list_with_no_values = Value::test_list(vec![]); + let list_with_one_empty_string = Value::test_list(vec![Value::test_string("")]); assert!(list_with_no_values.is_empty()); assert!(!list_with_one_empty_string.is_empty()); @@ -3872,21 +3871,18 @@ mod tests { fn test_record() { let no_columns_nor_cell_values = Value::test_record(Record::new()); - let one_column_and_one_cell_value_with_empty_strings = Value::test_record(Record { - cols: vec![String::from("")], - vals: vec![Value::string("", Span::unknown())], + let one_column_and_one_cell_value_with_empty_strings = Value::test_record(record! { + "" => Value::test_string(""), }); let one_column_with_a_string_and_one_cell_value_with_empty_string = - Value::test_record(Record { - cols: vec![String::from("column")], - vals: vec![Value::string("", Span::unknown())], + Value::test_record(record! { + "column" => Value::test_string(""), }); let one_column_with_empty_string_and_one_value_with_a_string = - Value::test_record(Record { - cols: vec![String::from("")], - vals: vec![Value::string("text", Span::unknown())], + Value::test_record(record! { + "" => Value::test_string("text"), }); assert!(no_columns_nor_cell_values.is_empty()); @@ -3903,24 +3899,15 @@ mod tests { #[test] fn test_list() { - let list_of_ints = Value::list(vec![Value::int(0, Span::unknown())], Span::unknown()); - let list_of_floats = - Value::list(vec![Value::float(0.0, Span::unknown())], Span::unknown()); - let list_of_ints_and_floats = Value::list( - vec![ - Value::int(0, Span::unknown()), - Value::float(0.0, Span::unknown()), - ], - Span::unknown(), - ); - let list_of_ints_and_floats_and_bools = Value::list( - vec![ - Value::int(0, Span::unknown()), - Value::float(0.0, Span::unknown()), - Value::bool(false, Span::unknown()), - ], - Span::unknown(), - ); + let list_of_ints = Value::test_list(vec![Value::test_int(0)]); + let list_of_floats = Value::test_list(vec![Value::test_float(0.0)]); + let list_of_ints_and_floats = + Value::test_list(vec![Value::test_int(0), Value::test_float(0.0)]); + let list_of_ints_and_floats_and_bools = Value::test_list(vec![ + Value::test_int(0), + Value::test_float(0.0), + Value::test_bool(false), + ]); assert_eq!(list_of_ints.get_type(), Type::List(Box::new(Type::Int))); assert_eq!(list_of_floats.get_type(), Type::List(Box::new(Type::Float))); assert_eq!( @@ -3941,13 +3928,10 @@ mod tests { #[test] fn test_datetime() { - let string = Value::date( - DateTime::from_naive_utc_and_offset( - NaiveDateTime::from_timestamp_millis(-123456789).unwrap(), - FixedOffset::east_opt(0).unwrap(), - ), - Span::unknown(), - ) + let string = Value::test_date(DateTime::from_naive_utc_and_offset( + NaiveDateTime::from_timestamp_millis(-123456789).unwrap(), + FixedOffset::east_opt(0).unwrap(), + )) .into_string("", &Default::default()); // We need to cut the humanized part off for tests to work, because @@ -3958,13 +3942,10 @@ mod tests { #[test] fn test_negative_year_datetime() { - let string = Value::date( - DateTime::from_naive_utc_and_offset( - NaiveDateTime::from_timestamp_millis(-72135596800000).unwrap(), - FixedOffset::east_opt(0).unwrap(), - ), - Span::unknown(), - ) + let string = Value::test_date(DateTime::from_naive_utc_and_offset( + NaiveDateTime::from_timestamp_millis(-72135596800000).unwrap(), + FixedOffset::east_opt(0).unwrap(), + )) .into_string("", &Default::default()); // We need to cut the humanized part off for tests to work, because diff --git a/crates/nu_plugin_formats/src/from/eml.rs b/crates/nu_plugin_formats/src/from/eml.rs index 50d62f7816..296cbad81e 100644 --- a/crates/nu_plugin_formats/src/from/eml.rs +++ b/crates/nu_plugin_formats/src/from/eml.rs @@ -2,7 +2,7 @@ use eml_parser::eml::*; use eml_parser::EmlParser; use indexmap::map::IndexMap; use nu_plugin::{EvaluatedCall, LabeledError}; -use nu_protocol::{record, PluginExample, Record, ShellError, Span, Value}; +use nu_protocol::{record, PluginExample, ShellError, Span, Value}; const DEFAULT_BODY_PREVIEW: usize = 50; pub const CMD_NAME: &str = "from eml"; @@ -24,31 +24,17 @@ Subject: Welcome To: someone@somewhere.com Test' | from eml" .into(), - result: Some(Value::test_record(Record { - cols: vec![ - "Subject".to_string(), - "From".to_string(), - "To".to_string(), - "Body".to_string(), - ], - vals: vec![ - Value::test_string("Welcome"), - Value::test_record(Record { - cols: vec!["Name".to_string(), "Address".to_string()], - vals: vec![ - Value::nothing(Span::test_data()), - Value::test_string("test@email.com"), - ], + result: Some(Value::test_record(record! { + "Subject" => Value::test_string("Welcome"), + "From" => Value::test_record(record! { + "Name" => Value::nothing(Span::test_data()), + "Address" => Value::test_string("test@email.com"), }), - Value::test_record(Record { - cols: vec!["Name".to_string(), "Address".to_string()], - vals: vec![ - Value::nothing(Span::test_data()), - Value::test_string("someone@somewhere.com"), - ], + "To" => Value::test_record(record! { + "Name" => Value::nothing(Span::test_data()), + "Address" => Value::test_string("someone@somewhere.com"), }), - Value::test_string("Test"), - ], + "Body" => Value::test_string("Test"), })), }, PluginExample { @@ -58,31 +44,17 @@ Subject: Welcome To: someone@somewhere.com Test' | from eml -b 1" .into(), - result: Some(Value::test_record(Record { - cols: vec![ - "Subject".to_string(), - "From".to_string(), - "To".to_string(), - "Body".to_string(), - ], - vals: vec![ - Value::test_string("Welcome"), - Value::test_record(Record { - cols: vec!["Name".to_string(), "Address".to_string()], - vals: vec![ - Value::nothing(Span::test_data()), - Value::test_string("test@email.com"), - ], + result: Some(Value::test_record(record! { + "Subject" => Value::test_string("Welcome"), + "From" => Value::test_record(record! { + "Name" => Value::nothing(Span::test_data()), + "Address" => Value::test_string("test@email.com"), }), - Value::test_record(Record { - cols: vec!["Name".to_string(), "Address".to_string()], - vals: vec![ - Value::nothing(Span::test_data()), - Value::test_string("someone@somewhere.com"), - ], + "To" => Value::test_record(record! { + "Name" => Value::nothing(Span::test_data()), + "Address" => Value::test_string("someone@somewhere.com"), }), - Value::test_string("T"), - ], + "Body" => Value::test_string("T"), })), }, ] diff --git a/crates/nu_plugin_formats/src/from/ics.rs b/crates/nu_plugin_formats/src/from/ics.rs index ede4a0d89c..52f3863497 100644 --- a/crates/nu_plugin_formats/src/from/ics.rs +++ b/crates/nu_plugin_formats/src/from/ics.rs @@ -2,7 +2,7 @@ use ical::parser::ical::component::*; use ical::property::Property; use indexmap::map::IndexMap; use nu_plugin::{EvaluatedCall, LabeledError}; -use nu_protocol::{record, PluginExample, Record, ShellError, Span, Value}; +use nu_protocol::{record, PluginExample, ShellError, Span, Value}; use std::io::BufReader; pub const CMD_NAME: &str = "from ics"; @@ -55,29 +55,15 @@ pub fn examples() -> Vec { END:VCALENDAR' | from ics" .into(), description: "Converts ics formatted string to table".into(), - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec![ - "properties".to_string(), - "events".to_string(), - "alarms".to_string(), - "to-Dos".to_string(), - "journals".to_string(), - "free-busys".to_string(), - "timezones".to_string(), - ], - vals: vec![ - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - Value::list(vec![], Span::test_data()), - ], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "properties" => Value::test_list(vec![]), + "events" => Value::test_list(vec![]), + "alarms" => Value::test_list(vec![]), + "to-Dos" => Value::test_list(vec![]), + "journals" => Value::test_list(vec![]), + "free-busys" => Value::test_list(vec![]), + "timezones" => Value::test_list(vec![]), + })])), }] } diff --git a/crates/nu_plugin_formats/src/from/ini.rs b/crates/nu_plugin_formats/src/from/ini.rs index c426913ab5..ba16f23a7f 100644 --- a/crates/nu_plugin_formats/src/from/ini.rs +++ b/crates/nu_plugin_formats/src/from/ini.rs @@ -1,5 +1,5 @@ use nu_plugin::{EvaluatedCall, LabeledError}; -use nu_protocol::{PluginExample, Record, ShellError, Value}; +use nu_protocol::{record, PluginExample, Record, ShellError, Value}; pub const CMD_NAME: &str = "from ini"; @@ -57,12 +57,11 @@ a=1 b=2' | from ini" .into(), description: "Converts ini formatted string to record".into(), - result: Some(Value::test_record(Record { - cols: vec!["foo".to_string()], - vals: vec![Value::test_record(Record { - cols: vec!["a".to_string(), "b".to_string()], - vals: vec![Value::test_string("1"), Value::test_string("2")], - })], + result: Some(Value::test_record(record! { + "foo" => Value::test_record(record! { + "a" => Value::test_string("1"), + "b" => Value::test_string("2"), + }), })), }] } diff --git a/crates/nu_plugin_formats/src/from/vcf.rs b/crates/nu_plugin_formats/src/from/vcf.rs index 1cb91d588a..0c5c1a5fe5 100644 --- a/crates/nu_plugin_formats/src/from/vcf.rs +++ b/crates/nu_plugin_formats/src/from/vcf.rs @@ -2,7 +2,7 @@ use ical::parser::vcard::component::*; use ical::property::Property; use indexmap::map::IndexMap; use nu_plugin::{EvaluatedCall, LabeledError}; -use nu_protocol::{record, PluginExample, Record, ShellError, Span, Value}; +use nu_protocol::{record, PluginExample, ShellError, Span, Value}; pub const CMD_NAME: &str = "from vcf"; @@ -55,53 +55,27 @@ EMAIL:foo@bar.com END:VCARD' | from vcf" .into(), description: "Converts ics formatted string to table".into(), - result: Some(Value::list( - vec![Value::test_record(Record { - cols: vec!["properties".to_string()], - vals: vec![Value::list( - vec![ - Value::test_record(Record { - cols: vec![ - "name".to_string(), - "value".to_string(), - "params".to_string(), - ], - vals: vec![ - Value::test_string("N"), - Value::test_string("Foo"), - Value::nothing(Span::test_data()), - ], - }), - Value::test_record(Record { - cols: vec![ - "name".to_string(), - "value".to_string(), - "params".to_string(), - ], - vals: vec![ - Value::test_string("FN"), - Value::test_string("Bar"), - Value::nothing(Span::test_data()), - ], - }), - Value::test_record(Record { - cols: vec![ - "name".to_string(), - "value".to_string(), - "params".to_string(), - ], - vals: vec![ - Value::test_string("EMAIL"), - Value::test_string("foo@bar.com"), - Value::nothing(Span::test_data()), - ], - }), - ], - Span::test_data(), - )], - })], - Span::test_data(), - )), + result: Some(Value::test_list(vec![Value::test_record(record! { + "properties" => Value::test_list( + vec![ + Value::test_record(record! { + "name" => Value::test_string("N"), + "value" => Value::test_string("Foo"), + "params" => Value::nothing(Span::test_data()), + }), + Value::test_record(record! { + "name" => Value::test_string("FN"), + "value" => Value::test_string("Bar"), + "params" => Value::nothing(Span::test_data()), + }), + Value::test_record(record! { + "name" => Value::test_string("EMAIL"), + "value" => Value::test_string("foo@bar.com"), + "params" => Value::nothing(Span::test_data()), + }), + ], + ), + })])), }] } diff --git a/crates/nu_plugin_query/src/query_xml.rs b/crates/nu_plugin_query/src/query_xml.rs index 813c515210..fe48f27b99 100644 --- a/crates/nu_plugin_query/src/query_xml.rs +++ b/crates/nu_plugin_query/src/query_xml.rs @@ -111,7 +111,7 @@ fn build_xpath(xpath_str: &str, span: Span) -> Result Value::test_float(1.0), })], Span::test_data(), ); @@ -163,9 +162,8 @@ mod tests { let actual = query("", &call, &text, Some(spanned_str)).expect("test should not fail"); let expected = Value::list( - vec![Value::test_record(Record { - cols: vec!["count(//*[contain...".to_string()], - vals: vec![Value::test_float(1.0)], + vec![Value::test_record(record! { + "count(//*[contain..." => Value::test_float(1.0), })], Span::test_data(), );