cairo-lang-parser 2.9.3

Cairo parser.
Documentation
//! > Test a FunctionSignature syntax tree

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
fn foo(a: int, mut b: felt252, ref c{}, mut ref d: felt252) -> felt252 implicits(RangeCheck, Hash) nopanic {
    return a;
}

fn bar() -> (felt252) {
    (1,)
}

//! > top_level_kind
FunctionSignature

//! > ignored_kinds

//! > expected_diagnostics
error: Unexpected token, expected ':' followed by a type.
 --> dummy_file.cairo:1:37
fn foo(a: int, mut b: felt252, ref c{}, mut ref d: felt252) -> felt252 implicits(RangeCheck, Hash) nopanic {
                                    ^

error: Missing token TokenComma.
 --> dummy_file.cairo:5:21
fn bar() -> (felt252) {
                    ^

//! > expected_tree
└── Top level kind: FunctionSignature
    ├── lparen (kind: TokenLParen): '('
    ├── parameters (kind: ParamList)
    │   ├── item #0 (kind: Param)
    │   │   ├── modifiers (kind: ModifierList) []
    │   │   ├── name (kind: TokenIdentifier): 'a'
    │   │   └── type_clause (kind: TypeClause)
    │   │       ├── colon (kind: TokenColon): ':'
    │   │       └── ty (kind: ExprPath)
    │   │           └── item #0 (kind: PathSegmentSimple)
    │   │               └── ident (kind: TokenIdentifier): 'int'
    │   ├── separator #0 (kind: TokenComma): ','
    │   ├── item #1 (kind: Param)
    │   │   ├── modifiers (kind: ModifierList)
    │   │   │   └── child #0 (kind: TokenMut): 'mut'
    │   │   ├── name (kind: TokenIdentifier): 'b'
    │   │   └── type_clause (kind: TypeClause)
    │   │       ├── colon (kind: TokenColon): ':'
    │   │       └── ty (kind: ExprPath)
    │   │           └── item #0 (kind: PathSegmentSimple)
    │   │               └── ident (kind: TokenIdentifier): 'felt252'
    │   ├── separator #1 (kind: TokenComma): ','
    │   ├── item #2 (kind: Param)
    │   │   ├── modifiers (kind: ModifierList)
    │   │   │   └── child #0 (kind: TokenRef): 'ref'
    │   │   ├── name (kind: TokenIdentifier): 'c'
    │   │   └── type_clause (kind: TypeClause)
    │   │       ├── colon: Missing
    │   │       └── ty: Missing []
    │   ├── separator #2 (kind: TokenComma): ','
    │   └── item #3 (kind: Param)
    │       ├── modifiers (kind: ModifierList)
    │       │   ├── child #0 (kind: TokenMut): 'mut'
    │       │   └── child #1 (kind: TokenRef): 'ref'
    │       ├── name (kind: TokenIdentifier): 'd'
    │       └── type_clause (kind: TypeClause)
    │           ├── colon (kind: TokenColon): ':'
    │           └── ty (kind: ExprPath)
    │               └── item #0 (kind: PathSegmentSimple)
    │                   └── ident (kind: TokenIdentifier): 'felt252'
    ├── rparen (kind: TokenRParen): ')'
    ├── ret_ty (kind: ReturnTypeClause)
    │   ├── arrow (kind: TokenArrow): '->'
    │   └── ty (kind: ExprPath)
    │       └── item #0 (kind: PathSegmentSimple)
    │           └── ident (kind: TokenIdentifier): 'felt252'
    ├── implicits_clause (kind: ImplicitsClause)
    │   ├── implicits_kw (kind: TokenImplicits): 'implicits'
    │   ├── lparen (kind: TokenLParen): '('
    │   ├── implicits (kind: ImplicitsList)
    │   │   ├── item #0 (kind: ExprPath)
    │   │   │   └── item #0 (kind: PathSegmentSimple)
    │   │   │       └── ident (kind: TokenIdentifier): 'RangeCheck'
    │   │   ├── separator #0 (kind: TokenComma): ','
    │   │   └── item #1 (kind: ExprPath)
    │   │       └── item #0 (kind: PathSegmentSimple)
    │   │           └── ident (kind: TokenIdentifier): 'Hash'
    │   └── rparen (kind: TokenRParen): ')'
    └── optional_no_panic (kind: TokenNoPanic): 'nopanic'
└── Top level kind: FunctionSignature
    ├── lparen (kind: TokenLParen): '('
    ├── parameters (kind: ParamList) []
    ├── rparen (kind: TokenRParen): ')'
    ├── ret_ty (kind: ReturnTypeClause)
    │   ├── arrow (kind: TokenArrow): '->'
    │   └── ty (kind: ExprListParenthesized)
    │       ├── lparen (kind: TokenLParen): '('
    │       ├── expressions (kind: ExprList)
    │       │   └── item #0 (kind: ExprPath)
    │       │       └── item #0 (kind: PathSegmentSimple)
    │       │           └── ident (kind: TokenIdentifier): 'felt252'
    │       └── rparen (kind: TokenRParen): ')'
    ├── implicits_clause (kind: OptionImplicitsClauseEmpty) []
    └── optional_no_panic (kind: OptionTerminalNoPanicEmpty) []