MCPcopy Create free account
hub / github.com/AmrDeveloper/GQL / parse_assignment_expression

Function parse_assignment_expression

crates/gitql-parser/src/parser.rs:1362–1397  ·  view source on GitHub ↗
(
    context: &mut ParserContext,
    env: &mut Environment,
    tokens: &[Token],
    position: &mut usize,
)

Source from the content-addressed store, hash-verified

1360}
1361
1362fn parse_assignment_expression(
1363 context: &mut ParserContext,
1364 env: &mut Environment,
1365 tokens: &[Token],
1366 position: &mut usize,
1367) -> Result<Box<dyn Expr>, Box<Diagnostic>> {
1368 let expression = parse_regex_expression(context, env, tokens, position)?;
1369 if is_current_token(tokens, position, TokenKind::ColonEqual) {
1370 if expression.kind() != ExprKind::GlobalVariable {
1371 return Err(Diagnostic::error(
1372 "Assignment expressions expect global variable name before `:=`",
1373 )
1374 .with_location(tokens[*position].location)
1375 .as_boxed());
1376 }
1377
1378 let expr = expression
1379 .as_any()
1380 .downcast_ref::<GlobalVariableExpr>()
1381 .unwrap();
1382
1383 let variable_name = expr.name.to_string();
1384
1385 // Consume `:=` operator
1386 *position += 1;
1387
1388 let value = parse_regex_expression(context, env, tokens, position)?;
1389 env.define_global(variable_name.clone(), value.expr_type());
1390
1391 return Ok(Box::new(AssignmentExpr {
1392 symbol: variable_name.clone(),
1393 value,
1394 }));
1395 }
1396 Ok(expression)
1397}
1398
1399pub(crate) fn parse_is_null_expression(
1400 context: &mut ParserContext,

Callers 1

parse_expressionFunction · 0.85

Calls 8

parse_regex_expressionFunction · 0.85
is_current_tokenFunction · 0.85
kindMethod · 0.80
as_boxedMethod · 0.80
with_locationMethod · 0.80
define_globalMethod · 0.80
expr_typeMethod · 0.80
as_anyMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…