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

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

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

(file
  (module_defn
    (attributes
      (attribute
        (simple_type
          (long_identifier
            (identifier)))))
    (identifier)
    (declaration_expression
      (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
        (simple_type
          (long_identifier
            (identifier))))
      (attribute
        (simple_type
          (long_identifier
            (identifier))))
      (attribute
        (simple_type
          (long_identifier
            (identifier)))))
    (identifier)
    (declaration_expression
      (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
        (simple_type
          (long_identifier
            (identifier))))
      (attribute
        (simple_type
          (long_identifier
            (identifier))))
      (attribute
        (simple_type
          (long_identifier
            (identifier)))))
    (identifier)
    (declaration_expression
      (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
        (simple_type
          (long_identifier
            (identifier)))
        (paren_expression
          (const
            (string)))))
    (anon_type_defn
      (type_name
        (identifier))
      (primary_constr_args)
      (type_extension_elements
        (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
        (simple_type
          (long_identifier
            (identifier)))))
    (identifier)
    (declaration_expression
      (attributes
        (attribute
          (simple_type
            (long_identifier
              (identifier)))))
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (string))))
    (declaration_expression
      (attributes
        (attribute
          (simple_type
            (long_identifier
              (identifier)))))
      (function_or_value_defn
        (value_declaration_left
          (identifier_pattern
            (long_identifier_or_op
              (identifier))))
        (const
          (string)))))
  (module_defn
    (identifier)
    (declaration_expression
      (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
          (simple_type
            (long_identifier
              (identifier)))))
      (identifier)
      (declaration_expression
        (attributes
          (attribute
            (simple_type
              (long_identifier
                (identifier)))))
        (function_or_value_defn
          (value_declaration_left
            (identifier_pattern
              (long_identifier_or_op
                (identifier))))
          (const
            (string))))
      (declaration_expression
        (attributes
          (attribute
            (simple_type
              (long_identifier
                (identifier)))))
        (function_or_value_defn
          (value_declaration_left
            (identifier_pattern
              (long_identifier_or_op
                (identifier))))
          (const
            (string)))))
    (module_defn
      (identifier)
      (declaration_expression
        (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)))))))))

================================================================================
assembly attribute with expression
================================================================================

namespace FSharp.Finance.Personal

[<assembly: System.Runtime.CompilerServices.InternalsVisibleTo("Tests")>]
()

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

(file
  (namespace
    (long_identifier
      (identifier)
      (identifier)
      (identifier))
    (declaration_expression
      (attributes
        (attribute
          (identifier)
          (simple_type
            (long_identifier
              (identifier)
              (identifier)
              (identifier)
              (identifier)))
          (paren_expression
            (const
              (string)))))
      (const
        (unit)))))