============================================
This decorator
============================================

foo(bar, @this (me, amount) => set(me, amount))

---

(source_file
  (expression_statement
    (call_expression
      (value_identifier)
      (arguments
        (value_identifier)
        (decorator (decorator_identifier))
        (function
          (formal_parameters
            (parameter (value_identifier))
            (parameter (value_identifier)))
          (call_expression
            (value_identifier)
            (arguments
              (value_identifier)
              (value_identifier))))))))

============================================
Reanalyze Decorator
============================================

let foo = (@doesNotRaise String.make)(12, ' ')

let foo = @doesNotRaise String.make(12, ' ')

let onResult = () => @doesNotRaise Belt.Array.getExn([], 0)

---

(source_file
  (let_binding
    (value_identifier)
    (call_expression
      (parenthesized_expression
        (decorator (decorator_identifier))
        (value_identifier_path
          (module_identifier) (value_identifier)))
      (arguments
        (number)
        (character))))

  (let_binding
    (value_identifier)
    (decorator (decorator_identifier))
    (call_expression
      (value_identifier_path (module_identifier) (value_identifier))
      (arguments
        (number)
        (character))))

  (let_binding
    (value_identifier)
    (function
      (formal_parameters)
      (decorator (decorator_identifier))
      (call_expression
        (value_identifier_path (module_identifier) (module_identifier) (value_identifier))
        (arguments
          (array)
          (number))))))

============================================
Decorator before type `and`
============================================

@deriving
type foo = {
  foo: string
}
@deriving
and bar = {bar: int}


@deriving @hello and baz = {baz: float}

---

(source_file
  (decorated
    (decorator (decorator_identifier))
    (type_declaration
      (type_identifier)
      (record_type (record_type_field (property_identifier) (type_annotation (type_identifier))))
      (type_declaration
        (decorator (decorator_identifier))
        (type_identifier)
        (record_type (record_type_field (property_identifier) (type_annotation (type_identifier)))))
      (type_declaration
        (decorator (decorator_identifier))
        (decorator (decorator_identifier))
        (type_identifier)
        (record_type (record_type_field (property_identifier) (type_annotation (type_identifier))))))))
