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::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 | 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}