# alone

@a

==>
Program(Annotation(AnnotationName))

# alone and anonymous

@

==>
Program(Annotation(AnnotationName))

# empty

@ann()

==>
Program(Annotation(AnnotationName,
                   AnnotationList))

# empty and anonymous

@()

==>
Program(Annotation(AnnotationName,
                   AnnotationList))

# equals

@setting(a=1)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number))))

# operator

@ann(a*1)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     MultOp,
                                                     Number))))

# anonymous

@(a=1)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number))))

# complex expr

@ann(a=(1+2+f('yes')))

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     ParenthesizedExpression(BinaryExpression(BinaryExpression(Number,
                                                                                                               AddOp,
                                                                                                               Number),
                                                                                              AddOp,
                                                                                              CallExpression(VariableName,
                                                                                                             ArgumentList(String))))))))

# many args

@ann(a=1, b=2)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number),
                                  AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number))))

# space around op

@ann(a / 1)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     MultOp,
                                                     Number))))

# space around sep

@ann(a/1 , b/2)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     MultOp,
                                                     Number),
                                  AnnotationProperty(PropertyName,
                                                     MultOp,
                                                     Number))))

# trailing sep

@ann(a=1,)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number))))

# lone sep

@ann(,)

==>
Program(Annotation(AnnotationName,
                   AnnotationList))

# inside fn

fn f() {
  @anno(b=2)
}

==>
Program(FunctionDeclaration(fn,
                            VariableDefinition,
                            ParamList,
                            Body(Annotation(AnnotationName,
                                            AnnotationList(AnnotationProperty(PropertyName,
                                                                              Equals,
                                                                              Number))))))

# laxer with space than the language parser is

@anno (b=2)

==>
Program(Annotation(AnnotationName,
                   AnnotationList(AnnotationProperty(PropertyName,
                                                     Equals,
                                                     Number))))
