cairo_lang_parser/
operators.rs1use 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 | 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}