anchor.diff:  #!/usr/bin/env dart
   
   import 'dart:io';
  +import 'dart:math';
   import 'package:analyzer/src/services/formatter_impl.dart';
   import 'package:analyzer/src/generated/ast.dart';
   import 'package:analyzer/src/generated/scanner.dart';
  
positive.code:   if (OUTPUT_DIR != null) dir = new Directory(OUTPUT_DIR);
    
    for (String arg in files) {
      StripCodeFormatterImpl cf = new StripCodeFormatterImpl(const FormatterOptions());
      CodeFormatter finisher = new CodeFormatter();
      File file = new File(arg);
      var src = file.readAsStringSync();
      FormattedSource fs = cf.format(CodeKind.COMPILATION_UNIT, src);
      fs = finisher.format(CodeKind.COMPILATION_UNIT, fs.source);
      if (dir != null){
        new File(dir.absolute.path + Platform.pathSeparator + basename(file.path)).writeAsStringSync(fs.source);  
      } else {
        print(fs.source);
      }
    }
  }
  
  class StripCodeFormatterImpl extends CodeFormatterImpl {
    
    StripCodeFormatterImpl(options):super(options);
    
    @override
    FormattedSource format(CodeKind kind, String source, {int offset, int end,
        int indentationLevel: 0, Selection selection: null}) {
  
  
negative.code:     var node = parse(kind, startToken);
      checkForErrors();
  
      var t = node.toString();
      
      var formatter = new StripSourceVisitor(options, lineInfo, source, selection);
      node.accept(formatter);
  
      var formattedSource = formatter.writer.toString();
  print(formattedSource);
      checkTokenStreams(startToken, tokenize(formattedSource),
                        allowTransforms: options.codeTransforms);
  
      return new FormattedSource(formattedSource, formatter.selection);
    }
  