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