# Macro expression in an attribute value

#[doc = concat!("first", "second")]
fn documented() {}

==>

SourceFile(
  AttributeItem(
    Attribute(
      MetaItem(Identifier, MacroInvocation(Identifier, ParenthesizedTokens(String, String)))),
    FunctionItem(fn, BoundIdentifier, ParamList, Block)))

# Macro expression in an inner attribute value

#![doc = concat!("first", "second")]
fn documented() {}

==>

SourceFile(
  InnerAttribute(
    MetaItem(Identifier, MacroInvocation(Identifier, ParenthesizedTokens(String, String)))),
  FunctionItem(fn, BoundIdentifier, ParamList, Block))

# Nested macro expression in an attribute value

#[doc = concat!("item: ", stringify!(documented))]
fn documented() {}

==>

SourceFile(
  AttributeItem(
    Attribute(
      MetaItem(
        Identifier,
        MacroInvocation(
          Identifier,
          ParenthesizedTokens(String, Identifier, ParenthesizedTokens(Identifier))))),
    FunctionItem(fn, BoundIdentifier, ParamList, Block)))
