anchor.diff:        return suggestions;
       }
       return const <CompletionSuggestion>[];
  +  }
  +
  +  /// Given some [name], return a [CompletionSuggestion] with the name.
  +  ///
  +  /// If the passed name is `null` or empty, `null` is returned.
  +  CompletionSuggestion _createNameSuggestion(
  +      DartCompletionRequest request, String name) {
  +    if (name == null || name.isEmpty) {
  +      return null;
  +    }
  +    // TODO(brianwilkerson) Explore whether there are any features of the name
  +    //  that can be used to provide better relevance scores.
  +    return CompletionSuggestion(
  +        CompletionSuggestionKind.IDENTIFIER,
  +        request.useNewRelevance ? 500 : DART_RELEVANCE_DEFAULT,
  +        name,
  +        name.length,
  +        0,
  +        false,
  +        false);
  +  }
  +
  +  /// Convert some [Identifier] to its [String] name.
  +  String _getStringName(Identifier id) {
  +    if (id == null) {
  +      return null;
  +    }
  +    if (id is SimpleIdentifier) {
  +      return id.name;
  +    } else if (id is PrefixedIdentifier) {
  +      return id.identifier.name;
  +    }
  +    return id.name;
     }
   
     static Identifier _formalParameterTypeIdentifier(FormalParameter node) {
  
positive.code:         // 'Foo ': handled above
          // 'Foo ;': TopLevelVariableDeclaration with type null, and a first
          // variable of 'Foo'
          VariableDeclarationList varDeclarationList = node.variables;
          TypeAnnotation typeAnnotation = varDeclarationList.type;
          if (typeAnnotation != null) {
            var identifier = _typeAnnotationIdentifier(typeAnnotation);
            strName = _getStringName(identifier);
          } else {
            NodeList<VariableDeclaration> varDeclarations =
                varDeclarationList.variables;
            if (varDeclarations.length == 1) {
              VariableDeclaration varDeclaration = varDeclarations.first;
              strName = _getStringName(varDeclaration.name);
            }
          }
        }
  
negative.code: import 'package:analysis_server/src/protocol_server.dart'
      show CompletionSuggestion, CompletionSuggestionKind;
  import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
  import 'package:analysis_server/src/services/correction/name_suggestion.dart';
  import 'package:analyzer/dart/ast/ast.dart';
  import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
  
  /// A contributor that produces suggestions for variable names based on the
  /// static type of the variable.
  class VariableNameContributor extends DartCompletionContributor {
    @override
    Future<List<CompletionSuggestion>> computeSuggestions(
        DartCompletionRequest request) async {
      var opType = request.opType;
  
      // Collect suggestions from the specific child [AstNode] that contains
      // the completion offset and all of its parents recursively.
      if (opType.includeVarNameSuggestions) {
        // Resolution not needed for this completion.
  
        var node = request.target.containingNode;
        var offset = request.target.offset;
  
        // Use the refined node.
        if (node is FormalParameterList) {
  