(
state: &mut ParserState<'heap, '_, '_>,
)
| 197 | } |
| 198 | |
| 199 | fn parse_dict<'heap>( |
| 200 | state: &mut ParserState<'heap, '_, '_>, |
| 201 | ) -> Result<DictExpr<'heap>, ParserDiagnostic> { |
| 202 | // We're parsing everything here, so that we're able to improve the error message |
| 203 | let token = state |
| 204 | .advance(Expected::hint(SyntaxKindSet::from_slice(&[ |
| 205 | SyntaxKind::LBrace, |
| 206 | SyntaxKind::LBracket, |
| 207 | ]))) |
| 208 | .change_category(From::from)?; |
| 209 | |
| 210 | let is_object = match token.kind.syntax() { |
| 211 | SyntaxKind::LBrace => true, |
| 212 | SyntaxKind::LBracket => false, |
| 213 | kind @ (SyntaxKind::String |
| 214 | | SyntaxKind::Number |
| 215 | | SyntaxKind::True |
| 216 | | SyntaxKind::False |
| 217 | | SyntaxKind::Null |
| 218 | | SyntaxKind::Comma |
| 219 | | SyntaxKind::Colon |
| 220 | | SyntaxKind::RBrace |
| 221 | | SyntaxKind::RBracket) => { |
| 222 | let span = state.insert_range(token.span); |
| 223 | |
| 224 | return Err(dict_expected_format(span, kind)).change_category(From::from)?; |
| 225 | } |
| 226 | }; |
| 227 | |
| 228 | if is_object { |
| 229 | parse_dict_object(state, token) |
| 230 | } else { |
| 231 | parse_dict_array(state, token) |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | #[cfg(test)] |
| 236 | mod tests { |
no test coverage detected