anchor.diff:  import 'package:analysis_server_client/server.dart';
   import 'package:args/command_runner.dart';
   import 'package:cli_util/cli_logging.dart';
  +import 'package:nnbd_migration/src/messages.dart';
   import 'package:path/path.dart' as path;
  -import 'package:nnbd_migration/src/messages.dart';
   
   import '../util.dart';
   import 'apply.dart';
   import 'display.dart';
   import 'options.dart';
   
  -typedef LogProvider = Logger Function();
  +String get _dartSdkVersion {
  +  String version = Platform.version;
  +
  +  // Remove the build date and OS.
  +  if (version.contains(' ')) {
  +    version = version.substring(0, version.indexOf(' '));
  +  }
  +
  +  // Convert a git hash to 8 chars.
  +  // '2.8.0-edge.fd992e423ef69ece9f44bd3ac58fa2355b563212'
  +  final RegExp versionRegExp = RegExp(r'^.*\.([0123456789abcdef]+)$');
  +  RegExpMatch match = versionRegExp.firstMatch(version);
  +  if (match != null && match.group(1).length == 40) {
  +    String commit = match.group(1);
  +    version = version.replaceAll(commit, commit.substring(0, 10));
  +  }
  +
  +  return version;
  +}
   
   // TODO(devoncarew): Over time, we should look to share code with the
   // implementation here and that in lib/src/driver.dart.
  +
  +typedef LogProvider = Logger Function();
   
   /// Perform null safety related migrations on the user's code.
   class MigrateCommand extends Command {
  
positive.code:     return '${super.invocation} [project or directory]';
    }
  
    MigrateCommand({this.logProvider, this.hidden = false}) {
      MigrateOptions.defineOptions(argParser);
    }
  
    @override
    Future<int> run() async {
  
negative.code:       }
      }
    }
  
    @override
    void onServerStatus(ServerStatusParams event) {
      if (event.analysis != null) {
        _serverStatusController.add(event);
      }
    }
  }
  