anchor.diff:          constructors: true,
           returnValue: true,
           typeNames: true,
  -        voidReturn: true);
  +        voidReturn: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression() async {
       // SimpleIdentifier  AwaitExpression  ExpressionStatement
       addTestSource('main() async {A a; await ^}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression2() async {
       addTestSource('main() async {A a; await c^ await}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression3() async {
       addTestSource('main() async {A a; await ^ await foo;}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression4() async {
       addTestSource('main() async {A a; await ^ await bar();}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression_assignment() async {
       addTestSource('main() async {A a; int x = await ^}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression_assignment2() async {
       addTestSource('main() async {A a; int x = await ^ await foo;}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_AwaitExpression_assignment3() async {
       addTestSource('main() async {A a; int x = await v^ int y = await foo;}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_BinaryExpression_LHS() async {
       // SimpleIdentifier  BinaryExpression  VariableDeclaration
       // VariableDeclarationList  VariableDeclarationStatement
       addTestSource('main() {int a = 1, b = ^ + 2;}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_BinaryExpression_RHS() async {
       // SimpleIdentifier  BinaryExpression  VariableDeclaration
       // VariableDeclarationList  VariableDeclarationStatement
       addTestSource('main() {int a = 1, b = 2 + ^;}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_BinaryExpression_RHS2() async {
       // SimpleIdentifier  BinaryExpression
       addTestSource('main() {if (c < ^)}');
  -    await assertOpType(constructors: true, returnValue: true, typeNames: true);
  +    await assertOpType(
  +        constructors: true,
  +        returnValue: true,
  +        typeNames: true,
  +        functionBody: true);
     }
   
     test_Block() async {
  
positive.code:   test_FunctionDeclaration_returnType_afterStarDocComment() async {
      // FunctionDeclaration  CompilationUnit
      addTestSource('/** */ ^ zoo(z) { } String name;');
      await assertOpType(typeNames: true);
    }
  
    test_FunctionDeclaration_returnType_afterStarDocComment2() async {
      // FunctionDeclaration  CompilationUnit
      addTestSource('/** */^ zoo(z) { } String name;');
      await assertOpType(typeNames: true);
    }
  
    test_FunctionExpression() async {
      // BlockFunctionBody  FunctionExpression  FunctionDeclaration
      addTestSource('main()^ { int b = 2; b++; b. }');
      await assertOpType();
    }
  
    test_FunctionExpressionInvocation() async {
      // ArgumentList  FunctionExpressionInvocation  ExpressionStatement
      addTestSource('main() { ((x) => x + 7)^(2) }');
      await assertOpType();
    }
  
    test_FunctionTypeAlias() async {
  
negative.code:         constructors: true,
          returnValue: true,
          typeNames: true,
          voidReturn: true,
          functionBody: true);
    }
  
    test_Block_catch_3d() async {
  