diff --git a/src/parser.rs b/src/parser.rs index 72b742c47c..a900aead14 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -824,15 +824,18 @@ impl ParserWorkingSet { let (output, err) = lite_parse(&output); error = error.or(err); - println!("{:?}", output); - let mut args = vec![]; for arg in &output.block[0].commands { - for part in &arg.parts { - let (arg, err) = self.parse_value(*part, element_shape.clone()); + let mut spans_idx = 0; + + while spans_idx < arg.parts.len() { + let (arg, err) = + self.parse_multispan_value(&arg.parts, &mut spans_idx, element_shape.clone()); error = error.or(err); args.push(arg); + + spans_idx += 1; } } @@ -1002,6 +1005,16 @@ impl ParserWorkingSet { return self.parse_dollar_expr(span); } else if bytes.starts_with(b"(") { return self.parse_full_column_path(span); + } else if bytes.starts_with(b"[") { + match shape { + SyntaxShape::Any | SyntaxShape::List(_) | SyntaxShape::Table => {} + _ => { + return ( + Expression::garbage(span), + Some(ParseError::Mismatch("non-table/non-list".into(), span)), + ); + } + } } match shape { @@ -1076,6 +1089,7 @@ impl ParserWorkingSet { SyntaxShape::Filesize, SyntaxShape::Duration, SyntaxShape::Block, + SyntaxShape::List(Box::new(SyntaxShape::Any)), SyntaxShape::Table, SyntaxShape::String, ];