cairo_lang_parser/
operators.rs

1use cairo_lang_syntax::node::kind::SyntaxKind;
2
3pub fn get_unary_operator_precedence(kind: SyntaxKind) -> Option<usize> {
4    match kind {
5        SyntaxKind::TerminalAt
6        | SyntaxKind::TerminalAnd
7        | SyntaxKind::TerminalAndAnd
8        | SyntaxKind::TerminalNot
9        | SyntaxKind::TerminalBitNot
10        | SyntaxKind::TerminalMul
11        | SyntaxKind::TerminalMinus => Some(2),
12        _ => None,
13    }
14}
15pub fn get_post_operator_precedence(kind: SyntaxKind) -> Option<usize> {
16    match kind {
17        SyntaxKind::TerminalDot => Some(0),
18        SyntaxKind::TerminalQuestionMark
19        // [] Operator.
20        | SyntaxKind::TerminalLBrack => Some(1),
21        SyntaxKind::TerminalMul | SyntaxKind::TerminalDiv | SyntaxKind::TerminalMod => Some(2),
22        SyntaxKind::TerminalPlus | SyntaxKind::TerminalMinus => Some(3),
23        SyntaxKind::TerminalAnd => Some(4),
24        SyntaxKind::TerminalXor => Some(5),
25        SyntaxKind::TerminalOr => Some(6),
26        SyntaxKind::TerminalEqEq
27        | SyntaxKind::TerminalNeq
28        | SyntaxKind::TerminalLT
29        | SyntaxKind::TerminalGT
30        | SyntaxKind::TerminalLE
31        | SyntaxKind::TerminalGE => Some(7),
32        SyntaxKind::TerminalAndAnd => Some(8),
33        SyntaxKind::TerminalOrOr => Some(9),
34        SyntaxKind::TerminalDotDot | SyntaxKind::TerminalDotDotEq => Some(10),
35        SyntaxKind::TerminalEq
36        | SyntaxKind::TerminalPlusEq
37        | SyntaxKind::TerminalMinusEq
38        | SyntaxKind::TerminalMulEq
39        | SyntaxKind::TerminalDivEq
40        | SyntaxKind::TerminalModEq => Some(11),
41        _ => None,
42    }
43}