anchor.diff:  
       // TODO: Timeout if the refactor request takes too long?
       Job job = new AnalysisRequestJob('rename', () {
  -      return analysisServer.getAvailableRefactorings(
  -          path, offset, end - offset).then((AvailableRefactoringsResult result) {
  +      return analysisServer
  +          .getAvailableRefactorings(path, offset, end - offset)
  +          .then((AvailableRefactoringsResult result) {
           if (result == null) return;
           _handleAvailableRefactoringsResult(result, path, offset, end, oldName);
         });
  
positive.code:       sourceFileEdits.forEach((SourceFileEdit fileEdit) {
          fileEdit.edits.removeWhere((SourceEdit edit) => edit.id != null);
        });
        sourceFileEdits.removeWhere((SourceFileEdit fileEdit) => fileEdit.edits.isEmpty);
  
        // We want to confirm this refactoring with users if it's going to
        // rename across files.
  
negative.code: 
          var userCancelled = () => notification.dismiss();
  
          notification = atom.notifications
              .addInfo('Confirm rename in ${sourceFileEdits.length} files?',
                  detail: fileSummary,
                  dismissable: true,
                  buttons: [
                    new NotificationButton('Rename', userConfirmed),
                    new NotificationButton('Cancel', userCancelled)
                  ]);
        } else {
          apply();
        }
      }
    }
  
    Future _apply(
        List<SourceFileEdit> sourceFileEdits, String oldName, String newName) {
      return Future.forEach(sourceFileEdits, (SourceFileEdit edit) {
        return atom.workspace.open(edit.file, options: {'searchAllPanes': true})
            .then((TextEditor editor) {
          applyEdits(editor, edit.edits);
        });
      }).then((_) {
  