//! > Test attributes without an item.

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
#[aaa]
3

//! > top_level_kind
ItemList

//! > ignored_kinds

//! > expected_diagnostics
error: Missing tokens. Expected an item after attributes.
 --> dummy_file.cairo:1:7
#[aaa]
      ^

error: Skipped tokens. Expected: Const/Module/Use/FreeFunction/ExternFunction/ExternType/Trait/Impl/Struct/Enum/TypeAlias/InlineMacro or an attribute.
 --> dummy_file.cairo:2:1
3
^

//! > expected_tree
└── Top level kind: ItemList
    └── child #0: Missing []

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

//! > Test attributes without a trait item.

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
trait Abc {
    #[aaa]
    3
}

//! > top_level_kind
TraitItemList

//! > ignored_kinds

//! > expected_diagnostics
error: Missing tokens. Expected a trait item after attributes.
 --> dummy_file.cairo:2:11
    #[aaa]
          ^

error: Skipped tokens. Expected: trait item or an attribute.
 --> dummy_file.cairo:3:5
    3
    ^

//! > expected_tree
└── Top level kind: TraitItemList
    └── child #0: Missing []

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

//! > Test attributes without an impl item.

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
impl Abc of Def {
    #[aaa]
    3
}

//! > top_level_kind
ImplItemList

//! > ignored_kinds

//! > expected_diagnostics
error: Missing tokens. Expected an impl item after attributes.
 --> dummy_file.cairo:2:11
    #[aaa]
          ^

error: Skipped tokens. Expected: impl item or an attribute.
 --> dummy_file.cairo:3:5
    3
    ^

//! > expected_tree
└── Top level kind: ImplItemList
    └── child #0: Missing []

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

//! > Test repeated attributes without an item.

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
#[aaa]
#[bbb]
2

//! > top_level_kind
ItemList

//! > ignored_kinds

//! > expected_diagnostics
error: Missing tokens. Expected an item after attributes.
 --> dummy_file.cairo:2:7
#[bbb]
      ^

error: Skipped tokens. Expected: Const/Module/Use/FreeFunction/ExternFunction/ExternType/Trait/Impl/Struct/Enum/TypeAlias/InlineMacro or an attribute.
 --> dummy_file.cairo:3:1
2
^

//! > expected_tree
└── Top level kind: ItemList
    └── child #0: Missing []

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

//! > Test repeated attributed literals.

//! > test_runner_name
test_partial_parser_tree(expect_diagnostics: true)

//! > cairo_code
#[aaa]
[bbb]
#[ccc]
fn foo() {}

//! > top_level_kind
ItemList

//! > ignored_kinds

//! > expected_diagnostics
error: Missing tokens. Expected an item after attributes.
 --> dummy_file.cairo:1:7
#[aaa]
      ^

error: Skipped tokens. Expected: Const/Module/Use/FreeFunction/ExternFunction/ExternType/Trait/Impl/Struct/Enum/TypeAlias/InlineMacro or an attribute.
 --> dummy_file.cairo:2:1
[bbb]
^***^

//! > expected_tree
└── Top level kind: ItemList
    ├── child #0: Missing []
    └── child #1 (kind: FunctionWithBody)
        ├── attributes (kind: AttributeList)
        │   └── child #0 (kind: Attribute)
        │       ├── hash (kind: TokenHash): '#'
        │       ├── lbrack (kind: TokenLBrack): '['
        │       ├── attr (kind: ExprPath)
        │       │   └── item #0 (kind: PathSegmentSimple)
        │       │       └── ident (kind: TokenIdentifier): 'ccc'
        │       ├── arguments (kind: OptionArgListParenthesizedEmpty) []
        │       └── rbrack (kind: TokenRBrack): ']'
        ├── declaration (kind: FunctionDeclaration)
        │   ├── function_kw (kind: TokenFunction): 'fn'
        │   ├── name (kind: TokenIdentifier): 'foo'
        │   ├── generic_params (kind: OptionWrappedGenericParamListEmpty) []
        │   └── signature (kind: FunctionSignature)
        │       ├── lparen (kind: TokenLParen): '('
        │       ├── parameters (kind: ParamList) []
        │       ├── rparen (kind: TokenRParen): ')'
        │       ├── ret_ty (kind: OptionReturnTypeClauseEmpty) []
        │       ├── implicits_clause (kind: OptionImplicitsClauseEmpty) []
        │       └── optional_no_panic (kind: OptionTerminalNoPanicEmpty) []
        └── body (kind: ExprBlock)
            ├── lbrace (kind: TokenLBrace): '{'
            ├── statements (kind: StatementList) []
            └── rbrace (kind: TokenRBrace): '}'
