cairo-lang-parser 2.18.0

Cairo parser.
Documentation
//! > Test basic reference type

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)

//! > cairo_code
fn f(x: &u32, y: &&u32, z: &&&u32) {}

//! > top_level_kind
ExprUnary

//! > ignored_kinds

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprPath)
        ├── dollar (kind: OptionTerminalDollarEmpty) []
        └── segments (kind: ExprPathInner)
            └── item #0 (kind: PathSegmentSimple)
                └── ident (kind: TokenIdentifier): 'u32'
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprUnary)
        ├── op (kind: TokenAnd): '&'
        └── expr (kind: ExprPath)
            ├── dollar (kind: OptionTerminalDollarEmpty) []
            └── segments (kind: ExprPathInner)
                └── item #0 (kind: PathSegmentSimple)
                    └── ident (kind: TokenIdentifier): 'u32'
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprUnary)
        ├── op (kind: TokenAnd): '&'
        └── expr (kind: ExprUnary)
            ├── op (kind: TokenAnd): '&'
            └── expr (kind: ExprPath)
                ├── dollar (kind: OptionTerminalDollarEmpty) []
                └── segments (kind: ExprPathInner)
                    └── item #0 (kind: PathSegmentSimple)
                        └── ident (kind: TokenIdentifier): 'u32'

//! > ==========================================================================

//! > Test reference of snapshot vs snapshot of reference

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)

//! > cairo_code
fn f(x: &@u32, y: @&u32) {}

//! > top_level_kind
ParamList

//! > ignored_kinds

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: ParamList
    ├── item #0 (kind: Param)
    │   ├── modifiers (kind: ModifierList) []
    │   ├── name (kind: TokenIdentifier): 'x'
    │   └── type_clause (kind: TypeClause)
    │       ├── colon (kind: TokenColon): ':'
    │       └── ty (kind: ExprUnary)
    │           ├── op (kind: TokenAnd): '&'
    │           └── expr (kind: ExprUnary)
    │               ├── op (kind: TokenAt): '@'
    │               └── expr (kind: ExprPath)
    │                   ├── dollar (kind: OptionTerminalDollarEmpty) []
    │                   └── segments (kind: ExprPathInner)
    │                       └── item #0 (kind: PathSegmentSimple)
    │                           └── ident (kind: TokenIdentifier): 'u32'
    ├── separator #0 (kind: TokenComma): ','
    └── item #1 (kind: Param)
        ├── modifiers (kind: ModifierList) []
        ├── name (kind: TokenIdentifier): 'y'
        └── type_clause (kind: TypeClause)
            ├── colon (kind: TokenColon): ':'
            └── ty (kind: ExprUnary)
                ├── op (kind: TokenAt): '@'
                └── expr (kind: ExprUnary)
                    ├── op (kind: TokenAnd): '&'
                    └── expr (kind: ExprPath)
                        ├── dollar (kind: OptionTerminalDollarEmpty) []
                        └── segments (kind: ExprPathInner)
                            └── item #0 (kind: PathSegmentSimple)
                                └── ident (kind: TokenIdentifier): 'u32'

//! > ==========================================================================

//! > Test reference inside generics

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)

//! > cairo_code
fn f() -> Option<&u64> {}

//! > top_level_kind
ExprUnary

//! > ignored_kinds

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprPath)
        ├── dollar (kind: OptionTerminalDollarEmpty) []
        └── segments (kind: ExprPathInner)
            └── item #0 (kind: PathSegmentSimple)
                └── ident (kind: TokenIdentifier): 'u64'

//! > ==========================================================================

//! > Test double reference with literal &&5_u32

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: false)

//! > cairo_code
fn f() {
    let x = &1_u32;
    let y = &&2_u32;
    let z = &&&3_u32;
}

//! > top_level_kind
ExprUnary

//! > ignored_kinds

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: TokenLiteralNumber): '1_u32'
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprUnary)
        ├── op (kind: TokenAnd): '&'
        └── expr (kind: TokenLiteralNumber): '2_u32'
└── Top level kind: ExprUnary
    ├── op (kind: TokenAnd): '&'
    └── expr (kind: ExprUnary)
        ├── op (kind: TokenAnd): '&'
        └── expr (kind: ExprUnary)
            ├── op (kind: TokenAnd): '&'
            └── expr (kind: TokenLiteralNumber): '3_u32'