anchor.diff:      List<String> previewUrls;
       NonNullableFix nonNullableFix;
   
  -    await _withProgress(
  -        '${ansi.emphasized('Generating migration suggestions')}', () async {
  -      _fixCodeProcessor = _FixCodeProcessor(context, this);
  -      _dartFixListener = DartFixListener(
  -          DriverProviderImpl(resourceProvider, context), _exceptionReported);
  -      nonNullableFix = createNonNullableFix(
  -          _dartFixListener, resourceProvider, _fixCodeProcessor.getLineInfo,
  -          included: [options.directory],
  -          preferredPort: options.previewPort,
  -          summaryPath: options.summary);
  -      nonNullableFix.rerunFunction = _rerunFunction;
  -      _fixCodeProcessor.registerCodeTask(nonNullableFix);
  -      _fixCodeProcessor.nonNullableFixTask = nonNullableFix;
  -
  -      try {
  -        // TODO(devoncarew): The progress written by the fix processor conflicts
  -        // with the progress written by the ansi logger above.
  -        await _fixCodeProcessor.runFirstPhase();
  -        _fixCodeProcessor._progressBar.clear();
  -        _checkForErrors();
  -      } on ExperimentStatusException catch (e) {
  -        logger.stdout(e.toString());
  -        final sdkPathVar = _environmentVariables['SDK_PATH'];
  -        if (sdkPathVar != null) {
  -          logger.stdout('$sdkPathEnvironmentVariableSet: $sdkPathVar');
  -        }
  -        exitCode = 1;
  -      }
  -      if (exitCode != null) return;
  -      previewUrls = await _fixCodeProcessor.runLaterPhases();
  -    });
  +    logger.stdout(ansi.emphasized('Analyzing project...'));
  +    _fixCodeProcessor = _FixCodeProcessor(context, this);
  +    _dartFixListener = DartFixListener(
  +        DriverProviderImpl(resourceProvider, context), _exceptionReported);
  +    nonNullableFix = createNonNullableFix(
  +        _dartFixListener, resourceProvider, _fixCodeProcessor.getLineInfo,
  +        included: [options.directory],
  +        preferredPort: options.previewPort,
  +        summaryPath: options.summary);
  +    nonNullableFix.rerunFunction = _rerunFunction;
  +    _fixCodeProcessor.registerCodeTask(nonNullableFix);
  +    _fixCodeProcessor.nonNullableFixTask = nonNullableFix;
  +
  +    try {
  +      await _fixCodeProcessor.runFirstPhase(singlePhaseProgress: true);
  +      _checkForErrors();
  +    } on ExperimentStatusException catch (e) {
  +      logger.stdout(e.toString());
  +      final sdkPathVar = _environmentVariables['SDK_PATH'];
  +      if (sdkPathVar != null) {
  +        logger.stdout('$sdkPathEnvironmentVariableSet: $sdkPathVar');
  +      }
  +      exitCode = 1;
  +    }
  +    if (exitCode != null) return;
  +
  +    logger.stdout('');
  +    logger.stdout(ansi.emphasized('Generating migration suggestions...'));
  +    previewUrls = await _fixCodeProcessor.runLaterPhases(resetProgress: true);
  +
       if (exitCode != null) return;
   
       if (options.applyChanges) {
  
positive.code: 
        logger.stdout('When finished with the preview, hit ctrl-c '
            'to terminate this process.');
  
        // Block until sigint (ctrl-c).
        await blockUntilSignalInterrupt();
  
negative.code:       return b.offset - a.offset;
      });
      return edits;
    }
  
    static ArgParser createParser({bool hide = true}) {
  