================================================================================
top-level module attribute
================================================================================

[<AutoOpen>]
module test =
 let x = 4

--------------------------------------------------------------------------------

(file
  (module_defn
    (attributes
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))))
    (identifier)
    (value_declaration
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (int))))))

================================================================================
top-level module attributes repeated
================================================================================

[<A;B;C>]
module test =
 let x = 4

--------------------------------------------------------------------------------

(file
  (module_defn
    (attributes
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))))
    (identifier)
    (value_declaration
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (int))))))

================================================================================
top-level module attributes separate
================================================================================

[<A>]
[<B;C>]
module test =
 let x = 4

--------------------------------------------------------------------------------

(file
  (module_defn
    (attributes
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier))))))
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))))
    (identifier)
    (value_declaration
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (int))))))

================================================================================
top-level class attribute
================================================================================

[<Route("test")>]
type A() =
 do ()

--------------------------------------------------------------------------------

(file
  (type_definition
    (attributes
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))
            (paren_expression
              (const
                (string)))))))
    (anon_type_defn
      (type_name
        (identifier))
      (primary_constr_args)
      (const
        (unit)))))

================================================================================
attribute on let binding
================================================================================

[<AutoOpen>]
module Constants =
  [<Literal>]
  let A = "A"

  [<Literal>]
  let B = "B"

module Impl =
  let v = A + B

--------------------------------------------------------------------------------

(file
  (module_defn
    (attributes
      (attribute_set
        (attribute
          (object_construction
            (type
              (long_identifier
                (identifier)))))))
    (identifier)
    (value_declaration
      (attributes
        (attribute_set
          (attribute
            (object_construction
              (type
                (long_identifier
                  (identifier)))))))
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (string))))
    (value_declaration
      (attributes
        (attribute_set
          (attribute
            (object_construction
              (type
                (long_identifier
                  (identifier)))))))
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (string)))))
  (module_defn
    (identifier)
    (value_declaration
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (infix_expression
          (long_identifier_or_op
            (identifier))
          (infix_op)
          (long_identifier_or_op
            (long_identifier
              (identifier))))))))

================================================================================
attribute on let binding in namespace
================================================================================
namespace Com.Test

[<AutoOpen>]
module Constants =
  [<Literal>]
  let A = "A"

  [<Literal>]
  let B = "B"

module Impl =
  let x = A + B

--------------------------------------------------------------------------------

(file
  (namespace
    (long_identifier
      (identifier)
      (identifier))
    (module_defn
      (attributes
        (attribute_set
          (attribute
            (object_construction
              (type
                (long_identifier
                  (identifier)))))))
      (identifier)
      (value_declaration
        (attributes
          (attribute_set
            (attribute
              (object_construction
                (type
                  (long_identifier
                    (identifier)))))))
        (function_or_value_defn
          (value_declaration_left
            (identifier_pattern
              (long_identifier_or_op
                (identifier))))
          (const
            (string))))
      (value_declaration
        (attributes
          (attribute_set
            (attribute
              (object_construction
                (type
                  (long_identifier
                    (identifier)))))))
        (function_or_value_defn
          (value_declaration_left
            (identifier_pattern
              (long_identifier_or_op
                (identifier))))
          (const
            (string)))))
    (module_defn
      (identifier)
      (value_declaration
        (function_or_value_defn
          (value_declaration_left
            (identifier_pattern
              (long_identifier_or_op
                (identifier))))
          (infix_expression
            (long_identifier_or_op
              (identifier))
            (infix_op)
            (long_identifier_or_op
              (long_identifier
                (identifier)))))))))
