diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-05-04 23:26:15 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-05-04 23:26:15 +0200 |
| commit | 1bca9ccecb9edb583a0a94bd3611147b66909ab9 (patch) | |
| tree | c9068332196eb754d65c6b51f124e39e91d3cd1a /src/parse/mod.rs | |
| parent | 2a45650dcc87c3bf047adaf030fd392bbe9fbb5e (diff) | |
Improve diagnostics
Diffstat (limited to 'src/parse/mod.rs')
| -rw-r--r-- | src/parse/mod.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 8bf7b1c5..b473c9af 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -604,6 +604,7 @@ fn collection(p: &mut Parser, keyed: bool) -> (CollectionKind, usize) { missing_coma = Some(p.trivia_start()); } } else { + p.eat_if(NodeKind::Comma); kind = Some(CollectionKind::Group); } } @@ -638,11 +639,15 @@ fn item(p: &mut Parser, keyed: bool) -> ParseResult<NodeKind> { p.eat(); marker.perform(p, NodeKind::Keyed, expr)?; } - _ => { + kind => { let mut msg = EcoString::from("expected identifier"); if keyed { msg.push_str(" or string"); } + if let Some(kind) = kind { + msg.push_str(", found "); + msg.push_str(kind.as_str()); + } let error = NodeKind::Error(ErrorPos::Full, msg); marker.end(p, error); p.eat(); @@ -661,8 +666,7 @@ fn item(p: &mut Parser, keyed: bool) -> ParseResult<NodeKind> { /// expressions. fn array(p: &mut Parser, marker: Marker) { marker.filter_children(p, |x| match x.kind() { - NodeKind::Named => Err("expected expression, found named pair"), - NodeKind::Keyed => Err("expected expression, found keyed pair"), + NodeKind::Named | NodeKind::Keyed => Err("expected expression"), _ => Ok(()), }); marker.end(p, NodeKind::ArrayExpr); @@ -685,7 +689,7 @@ fn dict(p: &mut Parser, marker: Marker) { Ok(()) } NodeKind::Spread | NodeKind::Comma | NodeKind::Colon => Ok(()), - _ => Err("expected named or keyed pair, found expression"), + _ => Err("expected named or keyed pair"), }); marker.end(p, NodeKind::DictExpr); } |
