//! > 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).