<NME> Records.txt
<BEF> Elm File
  ElmTypeAliasDeclaration(TYPE_ALIAS_DECLARATION)
    PsiElement(TYPE)('type')
    PsiWhiteSpace(' ')
    PsiElement(ALIAS)('alias')
    PsiWhiteSpace(' ')
    PsiElement(UPPER_CASE_IDENTIFIER)('Point')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace('\n')
    PsiWhiteSpace('    ')
    ElmTypeExpression(TYPE_EXPRESSION)
      ElmRecordType(RECORD_TYPE)
        PsiElement(LEFT_BRACE)('{')
        PsiWhiteSpace(' ')
        ElmFieldType(FIELD_TYPE)
          PsiElement(LOWER_CASE_IDENTIFIER)('x')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          ElmTypeExpression(TYPE_EXPRESSION)
            ElmTypeRef(TYPE_REF)
              ElmUpperCaseQID(UPPER_CASE_QID)
                PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiWhiteSpace('\n')
        PsiWhiteSpace('    ')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        ElmFieldType(FIELD_TYPE)
          PsiElement(LOWER_CASE_IDENTIFIER)('y')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          ElmTypeExpression(TYPE_EXPRESSION)
            ElmTypeRef(TYPE_REF)
              ElmUpperCaseQID(UPPER_CASE_QID)
                PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiWhiteSpace('\n')
        PsiWhiteSpace('    ')
        PsiElement(RIGHT_BRACE)('}')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  PsiWhiteSpace('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('p')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace('\n')
    PsiWhiteSpace('    ')
    ElmRecordExpr(RECORD_EXPR)
      PsiElement(LEFT_BRACE)('{')
      PsiWhiteSpace(' ')
      ElmField(FIELD)
        PsiElement(LOWER_CASE_IDENTIFIER)('x')
        PsiWhiteSpace(' ')
        PsiElement(EQ)('=')
        PsiWhiteSpace(' ')
        ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
          PsiElement(NUMBER_LITERAL)('0')
      PsiWhiteSpace('\n')
      PsiWhiteSpace('    ')
      PsiElement(COMMA)(',')
      PsiWhiteSpace(' ')
      ElmField(FIELD)
        PsiElement(LOWER_CASE_IDENTIFIER)('y')
        PsiWhiteSpace(' ')
        PsiElement(EQ)('=')
        PsiWhiteSpace(' ')
        ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
          PsiElement(NUMBER_LITERAL)('0')
      PsiWhiteSpace('\n')
      PsiWhiteSpace('    ')
      PsiElement(RIGHT_BRACE)('}')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  PsiWhiteSpace('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('emptyRecord')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace('\n')
    PsiWhiteSpace('    ')
    ElmRecordExpr(RECORD_EXPR)
      PsiElement(LEFT_BRACE)('{')
      PsiElement(RIGHT_BRACE)('}')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  PsiWhiteSpace('\n')
  ElmTypeAnnotation(TYPE_ANNOTATION)
    PsiElement(LOWER_CASE_IDENTIFIER)('makePair')
    PsiWhiteSpace(' ')
    PsiElement(COLON)(':')
    PsiWhiteSpace(' ')
    ElmTypeExpression(TYPE_EXPRESSION)
      ElmRecordType(RECORD_TYPE)
        PsiElement(LEFT_BRACE)('{')
        PsiWhiteSpace(' ')
        ElmRecordBaseIdentifier(RECORD_BASE_IDENTIFIER)
          PsiElement(LOWER_CASE_IDENTIFIER)('a')
        PsiWhiteSpace(' ')
        PsiElement(PIPE)('|')
        PsiWhiteSpace(' ')
        ElmFieldType(FIELD_TYPE)
          PsiElement(LOWER_CASE_IDENTIFIER)('x')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          ElmTypeExpression(TYPE_EXPRESSION)
            ElmTypeRef(TYPE_REF)
              ElmUpperCaseQID(UPPER_CASE_QID)
                PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        ElmFieldType(FIELD_TYPE)
          PsiElement(LOWER_CASE_IDENTIFIER)('y')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          ElmTypeExpression(TYPE_EXPRESSION)
            ElmTypeRef(TYPE_REF)
              ElmUpperCaseQID(UPPER_CASE_QID)
                PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiWhiteSpace(' ')
        PsiElement(RIGHT_BRACE)('}')
      PsiWhiteSpace(' ')
      PsiElement(ARROW)('->')
      PsiWhiteSpace(' ')
      ElmTupleType(TUPLE_TYPE)
        PsiElement(LEFT_PARENTHESIS)('(')
        ElmTypeExpression(TYPE_EXPRESSION)
          ElmTypeRef(TYPE_REF)
            ElmUpperCaseQID(UPPER_CASE_QID)
              PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        ElmTypeExpression(TYPE_EXPRESSION)
          ElmTypeRef(TYPE_REF)
            ElmUpperCaseQID(UPPER_CASE_QID)
              PsiElement(UPPER_CASE_IDENTIFIER)('Int')
        PsiElement(RIGHT_PARENTHESIS)(')')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('makePair')
      PsiWhiteSpace(' ')
      ElmRecordPattern(RECORD_PATTERN)
        PsiElement(LEFT_BRACE)('{')
        PsiWhiteSpace(' ')
        ElmLowerPattern(LOWER_PATTERN)
          PsiElement(LOWER_CASE_IDENTIFIER)('x')
        PsiElement(COMMA)(',')
        PsiWhiteSpace(' ')
        ElmLowerPattern(LOWER_PATTERN)
          PsiElement(LOWER_CASE_IDENTIFIER)('y')
        PsiWhiteSpace(' ')
        PsiElement(RIGHT_BRACE)('}')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace('\n')
    PsiWhiteSpace('    ')
    ElmTupleExpr(TUPLE_EXPR)
      PsiElement(LEFT_PARENTHESIS)('(')
      PsiWhiteSpace(' ')
      ElmValueExpr(VALUE_EXPR)
        ElmValueQID(VALUE_QID)
          PsiElement(LOWER_CASE_IDENTIFIER)('x')
      PsiElement(COMMA)(',')
      PsiWhiteSpace(' ')
      ElmValueExpr(VALUE_EXPR)
        ElmValueQID(VALUE_QID)
          PsiElement(LOWER_CASE_IDENTIFIER)('y')
      PsiWhiteSpace(' ')
      PsiElement(RIGHT_PARENTHESIS)(')')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
            ElmValueQID(VALUE_QID)
              PsiElement(LOWER_CASE_IDENTIFIER)('y')
        PsiWhiteSpace(' ')
        PsiElement(RIGHT_PARENTHESIS)(')')

<MSG> Allow FieldAccess as target for function calls (#89)

Allow FieldAccess as target for function calls

We were incorrectly rejecting syntax like the following:

```elm
input =  { x = \() -> () }
valueRef = { foo = input.x (), bar = () }
                   -------
```

The issue was that `FieldAccess` wasn't an option in the `FunctionCallTarget` rule.

In order to get this to work, I cleaned up the hack that required `FieldAccess` be a higher priority than `FunctionCall`. Now we do a small lookahead in all the whitespace-sensitive rules to make sure they don't match on part of a dotted id.

<DFF> @@ -179,4 +179,76 @@ Elm File
             ElmValueQID(VALUE_QID)
               PsiElement(LOWER_CASE_IDENTIFIER)('y')
         PsiWhiteSpace(' ')
-        PsiElement(RIGHT_PARENTHESIS)(')')
\ No newline at end of file
+        PsiElement(RIGHT_PARENTHESIS)(')')
+  PsiElement(VIRTUAL_END_DECL)('\n')
+  PsiWhiteSpace('\n')
+  ElmValueDeclaration(VALUE_DECLARATION)
+    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
+      PsiElement(LOWER_CASE_IDENTIFIER)('input')
+    PsiWhiteSpace(' ')
+    PsiElement(EQ)('=')
+    PsiWhiteSpace('  ')
+    ElmExpression(EXPRESSION)
+      ElmRecord(RECORD)
+        PsiElement(LEFT_BRACE)('{')
+        PsiWhiteSpace(' ')
+        ElmField(FIELD)
+          PsiElement(LOWER_CASE_IDENTIFIER)('x')
+          PsiWhiteSpace(' ')
+          PsiElement(EQ)('=')
+          PsiWhiteSpace(' ')
+          ElmExpression(EXPRESSION)
+            ElmAnonymousFunction(ANONYMOUS_FUNCTION)
+              PsiElement(BACKSLASH)('\')
+              ElmPattern(PATTERN)
+                ElmUnit(UNIT)
+                  PsiElement(LEFT_PARENTHESIS)('(')
+                  PsiElement(RIGHT_PARENTHESIS)(')')
+              PsiWhiteSpace(' ')
+              PsiElement(ARROW)('->')
+              PsiWhiteSpace(' ')
+              ElmExpression(EXPRESSION)
+                ElmUnit(UNIT)
+                  PsiElement(LEFT_PARENTHESIS)('(')
+                  PsiElement(RIGHT_PARENTHESIS)(')')
+        PsiWhiteSpace(' ')
+        PsiElement(RIGHT_BRACE)('}')
+  PsiElement(VIRTUAL_END_DECL)('\n')
+  ElmValueDeclaration(VALUE_DECLARATION)
+    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
+      PsiElement(LOWER_CASE_IDENTIFIER)('valueRef')
+    PsiWhiteSpace(' ')
+    PsiElement(EQ)('=')
+    PsiWhiteSpace(' ')
+    ElmExpression(EXPRESSION)
+      ElmRecord(RECORD)
+        PsiElement(LEFT_BRACE)('{')
+        PsiWhiteSpace(' ')
+        ElmField(FIELD)
+          PsiElement(LOWER_CASE_IDENTIFIER)('foo')
+          PsiWhiteSpace(' ')
+          PsiElement(EQ)('=')
+          PsiWhiteSpace(' ')
+          ElmExpression(EXPRESSION)
+            ElmFunctionCall(FUNCTION_CALL)
+              ElmFieldAccess(FIELD_ACCESS)
+                PsiElement(LOWER_CASE_IDENTIFIER)('input')
+                PsiElement(DOT)('.')
+                PsiElement(LOWER_CASE_IDENTIFIER)('x')
+              PsiWhiteSpace(' ')
+              ElmUnit(UNIT)
+                PsiElement(LEFT_PARENTHESIS)('(')
+                PsiElement(RIGHT_PARENTHESIS)(')')
+        PsiElement(COMMA)(',')
+        PsiWhiteSpace(' ')
+        ElmField(FIELD)
+          PsiElement(LOWER_CASE_IDENTIFIER)('bar')
+          PsiWhiteSpace(' ')
+          PsiElement(EQ)('=')
+          PsiWhiteSpace(' ')
+          ElmExpression(EXPRESSION)
+            ElmUnit(UNIT)
+              PsiElement(LEFT_PARENTHESIS)('(')
+              PsiElement(RIGHT_PARENTHESIS)(')')
+        PsiWhiteSpace(' ')
+        PsiElement(RIGHT_BRACE)('}')
\ No newline at end of file

Allow FieldAccess as target for function calls (#89)