MCPcopy Create free account
hub / github.com/hashintel/hash / parse_dict

Function parse_dict

libs/@local/hashql/syntax-jexpr/src/parser/object/dict.rs:199–233  ·  view source on GitHub ↗
(
    state: &mut ParserState<'heap, '_, '_>,
)

Source from the content-addressed store, hash-verified

197}
198
199fn 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)]
236mod tests {

Callers 1

parseMethod · 0.85

Calls 8

ErrInterface · 0.85
dict_expected_formatFunction · 0.85
parse_dict_objectFunction · 0.85
parse_dict_arrayFunction · 0.85
change_categoryMethod · 0.80
syntaxMethod · 0.80
advanceMethod · 0.45
insert_rangeMethod · 0.45

Tested by

no test coverage detected