cairo-lang-parser 0.1.0

Cairo parser.
Documentation
//! > Test empty traits and impls.

//! > test_function_name
test_partial_parser_tree

//! > cairo_code
trait Foo<T>;
impl FooImpl<S> of Foo::<S> {
    fn foo(a: int) -> felt {
        return a;
    }
}

//! > top_level_kind
SyntaxFile

//! > ignored_kinds
ItemFreeFunction

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: SyntaxFile
    ├── items (kind: ItemList)
    │   ├── child #0 (kind: ItemTrait)
    │   │   ├── attributes (kind: AttributeList) []
    │   │   ├── trait_kw (kind: TokenTrait): 'trait'
    │   │   ├── name (kind: TokenIdentifier): 'Foo'
    │   │   ├── generic_params (kind: WrappedGenericParamList)
    │   │   │   ├── langle (kind: TokenLT): '<'
    │   │   │   ├── generic_params (kind: GenericParamList)
    │   │   │   │   └── item #0 (kind: GenericParam)
    │   │   │   │       └── name (kind: TokenIdentifier): 'T'
    │   │   │   └── rangle (kind: TokenGT): '>'
    │   │   └── body (kind: TokenSemicolon): ';'
    │   └── child #1 (kind: ItemImpl)
    │       ├── attributes (kind: AttributeList) []
    │       ├── impl_kw (kind: TokenImpl): 'impl'
    │       ├── name (kind: TokenIdentifier): 'FooImpl'
    │       ├── generic_params (kind: WrappedGenericParamList)
    │       │   ├── langle (kind: TokenLT): '<'
    │       │   ├── generic_params (kind: GenericParamList)
    │       │   │   └── item #0 (kind: GenericParam)
    │       │   │       └── name (kind: TokenIdentifier): 'S'
    │       │   └── rangle (kind: TokenGT): '>'
    │       ├── of_kw (kind: TokenOf): 'of'
    │       ├── trait_path (kind: ExprPath)
    │       │   └── item #0 (kind: PathSegmentWithGenericArgs)
    │       │       ├── ident (kind: TokenIdentifier): 'Foo'
    │       │       ├── separator (kind: TokenColonColon): '::'
    │       │       └── generic_args (kind: GenericArgs)
    │       │           ├── langle (kind: TokenLT): '<'
    │       │           ├── generic_args (kind: GenericArgList)
    │       │           │   └── item #0 (kind: ExprPath)
    │       │           │       └── item #0 (kind: PathSegmentSimple)
    │       │           │           └── ident (kind: TokenIdentifier): 'S'
    │       │           └── rangle (kind: TokenGT): '>'
    │       └── body (kind: ImplBody)
    │           ├── lbrace (kind: TokenLBrace): '{'
    │           ├── items (kind: ItemList)
    │           │   └── child #0 (kind: ItemFreeFunction) <ignored>
    │           └── rbrace (kind: TokenRBrace): '}'
    └── eof (kind: TokenEndOfFile).

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

//! > Test nonempty traits and impls.

//! > test_function_name
test_partial_parser_tree

//! > cairo_code
trait Foo<T> {
    fn foo<S>(x: T, y: S);
}
impl FooImpl<S> of Foo::<S> {}

//! > top_level_kind
SyntaxFile

//! > ignored_kinds

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: SyntaxFile
    ├── items (kind: ItemList)
    │   ├── child #0 (kind: ItemTrait)
    │   │   ├── attributes (kind: AttributeList) []
    │   │   ├── trait_kw (kind: TokenTrait): 'trait'
    │   │   ├── name (kind: TokenIdentifier): 'Foo'
    │   │   ├── generic_params (kind: WrappedGenericParamList)
    │   │   │   ├── langle (kind: TokenLT): '<'
    │   │   │   ├── generic_params (kind: GenericParamList)
    │   │   │   │   └── item #0 (kind: GenericParam)
    │   │   │   │       └── name (kind: TokenIdentifier): 'T'
    │   │   │   └── rangle (kind: TokenGT): '>'
    │   │   └── body (kind: TraitBody)
    │   │       ├── lbrace (kind: TokenLBrace): '{'
    │   │       ├── items (kind: TraitItemList)
    │   │       │   └── child #0 (kind: TraitItemFunction)
    │   │       │       ├── attributes (kind: AttributeList) []
    │   │       │       ├── declaration (kind: FunctionDeclaration)
    │   │       │       │   ├── function_kw (kind: TokenFunction): 'fn'
    │   │       │       │   ├── name (kind: TokenIdentifier): 'foo'
    │   │       │       │   ├── generic_params (kind: WrappedGenericParamList)
    │   │       │       │   │   ├── langle (kind: TokenLT): '<'
    │   │       │       │   │   ├── generic_params (kind: GenericParamList)
    │   │       │       │   │   │   └── item #0 (kind: GenericParam)
    │   │       │       │   │   │       └── name (kind: TokenIdentifier): 'S'
    │   │       │       │   │   └── rangle (kind: TokenGT): '>'
    │   │       │       │   └── signature (kind: FunctionSignature)
    │   │       │       │       ├── lparen (kind: TokenLParen): '('
    │   │       │       │       ├── parameters (kind: ParamList)
    │   │       │       │       │   ├── item #0 (kind: Param)
    │   │       │       │       │   │   ├── modifiers (kind: ModifierList) []
    │   │       │       │       │   │   ├── name (kind: TokenIdentifier): 'x'
    │   │       │       │       │   │   └── type_clause (kind: TypeClause)
    │   │       │       │       │   │       ├── colon (kind: TokenColon): ':'
    │   │       │       │       │   │       └── ty (kind: ExprPath)
    │   │       │       │       │   │           └── item #0 (kind: PathSegmentSimple)
    │   │       │       │       │   │               └── ident (kind: TokenIdentifier): 'T'
    │   │       │       │       │   ├── separator #0 (kind: TokenComma): ','
    │   │       │       │       │   └── item #1 (kind: Param)
    │   │       │       │       │       ├── modifiers (kind: ModifierList) []
    │   │       │       │       │       ├── name (kind: TokenIdentifier): 'y'
    │   │       │       │       │       └── type_clause (kind: TypeClause)
    │   │       │       │       │           ├── colon (kind: TokenColon): ':'
    │   │       │       │       │           └── ty (kind: ExprPath)
    │   │       │       │       │               └── item #0 (kind: PathSegmentSimple)
    │   │       │       │       │                   └── ident (kind: TokenIdentifier): 'S'
    │   │       │       │       ├── rparen (kind: TokenRParen): ')'
    │   │       │       │       ├── ret_ty (kind: OptionReturnTypeClauseEmpty) []
    │   │       │       │       ├── implicits_clause (kind: OptionImplicitsClauseEmpty) []
    │   │       │       │       └── optional_no_panic (kind: OptionTerminalNoPanicEmpty) []
    │   │       │       └── body (kind: TokenSemicolon): ';'
    │   │       └── rbrace (kind: TokenRBrace): '}'
    │   └── child #1 (kind: ItemImpl)
    │       ├── attributes (kind: AttributeList) []
    │       ├── impl_kw (kind: TokenImpl): 'impl'
    │       ├── name (kind: TokenIdentifier): 'FooImpl'
    │       ├── generic_params (kind: WrappedGenericParamList)
    │       │   ├── langle (kind: TokenLT): '<'
    │       │   ├── generic_params (kind: GenericParamList)
    │       │   │   └── item #0 (kind: GenericParam)
    │       │   │       └── name (kind: TokenIdentifier): 'S'
    │       │   └── rangle (kind: TokenGT): '>'
    │       ├── of_kw (kind: TokenOf): 'of'
    │       ├── trait_path (kind: ExprPath)
    │       │   └── item #0 (kind: PathSegmentWithGenericArgs)
    │       │       ├── ident (kind: TokenIdentifier): 'Foo'
    │       │       ├── separator (kind: TokenColonColon): '::'
    │       │       └── generic_args (kind: GenericArgs)
    │       │           ├── langle (kind: TokenLT): '<'
    │       │           ├── generic_args (kind: GenericArgList)
    │       │           │   └── item #0 (kind: ExprPath)
    │       │           │       └── item #0 (kind: PathSegmentSimple)
    │       │           │           └── ident (kind: TokenIdentifier): 'S'
    │       │           └── rangle (kind: TokenGT): '>'
    │       └── body (kind: ImplBody)
    │           ├── lbrace (kind: TokenLBrace): '{'
    │           ├── items (kind: ItemList) []
    │           └── rbrace (kind: TokenRBrace): '}'
    └── eof (kind: TokenEndOfFile).

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

//! > Test trait function with "accidental" body in a module - later items should still be in the module.

//! > test_function_name
test_partial_parser_tree

//! > cairo_code
mod X {
    trait A {
        fn foo() {}
    }
    struct Y {}
}

//! > top_level_kind
SyntaxFile

//! > ignored_kinds
FunctionDeclaration
ItemStruct

//! > expected_diagnostics

//! > expected_tree
└── Top level kind: SyntaxFile
    ├── items (kind: ItemList)
    │   └── child #0 (kind: ItemModule)
    │       ├── attributes (kind: AttributeList) []
    │       ├── module_kw (kind: TokenModule): 'mod'
    │       ├── name (kind: TokenIdentifier): 'X'
    │       └── body (kind: ModuleBody)
    │           ├── lbrace (kind: TokenLBrace): '{'
    │           ├── items (kind: ItemList)
    │           │   ├── child #0 (kind: ItemTrait)
    │           │   │   ├── attributes (kind: AttributeList) []
    │           │   │   ├── trait_kw (kind: TokenTrait): 'trait'
    │           │   │   ├── name (kind: TokenIdentifier): 'A'
    │           │   │   ├── generic_params (kind: OptionWrappedGenericParamListEmpty) []
    │           │   │   └── body (kind: TraitBody)
    │           │   │       ├── lbrace (kind: TokenLBrace): '{'
    │           │   │       ├── items (kind: TraitItemList)
    │           │   │       │   └── child #0 (kind: TraitItemFunction)
    │           │   │       │       ├── attributes (kind: AttributeList) []
    │           │   │       │       ├── declaration (kind: FunctionDeclaration) <ignored>
    │           │   │       │       └── body (kind: ExprBlock)
    │           │   │       │           ├── lbrace (kind: TokenLBrace): '{'
    │           │   │       │           ├── statements (kind: StatementList) []
    │           │   │       │           └── rbrace (kind: TokenRBrace): '}'
    │           │   │       └── rbrace (kind: TokenRBrace): '}'
    │           │   └── child #1 (kind: ItemStruct) <ignored>
    │           └── rbrace (kind: TokenRBrace): '}'
    └── eof (kind: TokenEndOfFile).