==================================
Simple Annotation
==================================

@Hypen()
myFunction() {}

---

(program
  (annotation
    (identifier)
    (arguments))
  (function_signature
    (identifier)
    (formal_parameter_list))
  (function_body
    (block)))

==================================
Complex Annotation
==================================

@TypedGoRoute<LoginRoute>(path: LoginRoute.path)
class LoginRoute {}

---

(program
  (class_definition
    (annotation
      (identifier)
      (type_arguments
        (type_identifier))
      (arguments
        (named_argument
          (label
            (identifier))
          (unconditional_assignable_selector
            (identifier)
            (assignable_operator)
            (identifier)))))
    (identifier)
    (class_body)))

================================================================
Annotation in Constructor Parameters
================================================================

@freezed
class Item with _$Item {
  const factory Item({
    required int id,
    @JsonKey(name: 'user_id') required int userId,
  }) = _Item;
}

---

(program
  (class_definition
    (annotation
      (identifier))
    (identifier)
    (superclass
      (mixins
        (type_identifier)))
    (class_body
      (declaration
        (redirecting_factory_constructor_signature
          (const_builtin)
          (identifier)
          (formal_parameter_list
            (optional_formal_parameters
              (formal_parameter
                (type_identifier)
                (identifier))
              (annotation
                (identifier)
                (arguments
                  (named_argument
                    (label
                      (identifier))
                    (string_literal))))
              (formal_parameter
                (type_identifier)
                (identifier))))
          (type_identifier))))))
