# Attributed expression statement

fn call() {} fn run() { #[allow(unused_must_use)] call(); }

==>

SourceFile(
  FunctionItem(fn, BoundIdentifier, ParamList, Block),
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList,
    Block(
      ExpressionStatement(
        Attribute(MetaItem(Identifier, ParenthesizedTokens(Identifier))),
        CallExpression(Identifier, ArgList)))))

# Attributed block statement

fn run() { #[allow(unused)] { let value = 1; } }

==>

SourceFile(
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList,
    Block(
      ExpressionStatement(
        Attribute(MetaItem(Identifier, ParenthesizedTokens(Identifier))),
        Block(LetDeclaration(let, BoundIdentifier, Integer))))))

# Attributed tail expression

fn value() -> i32 { #[allow(unused)] 1 }

==>

SourceFile(
  FunctionItem(
    fn,
    BoundIdentifier,
    ParamList,
    TypeIdentifier,
    Block(
      ExpressionStatement(
        Attribute(MetaItem(Identifier, ParenthesizedTokens(Identifier))),
        Integer))))
