anchor.diff:  
     Ctags(this.options);
   
  -  generate() {
  +  String _parseVarType(String input) {
  +    // const int test = 1;
  +    // final List<Map<String, dynamic>> list = [{'a': 1}];
  +    var leftHandSide = input.split('=')[0];
  +
  +    // const int test
  +    // final List<Map<String, dynamic>> list
  +    var varTypeList = leftHandSide
  +        .split(' ')
  +        .where((s) => s != 'const' && s != 'final' && s != 'static')
  +        .join(' ')
  +        .trim()
  +        .split(' ');
  +
  +    // [int, test]
  +    // [List<Map<String,, dynamic>>, list]
  +    varTypeList.removeLast();
  +
  +    // [int]
  +    // [List<Map<String,, dynamic>>]
  +    return varTypeList.join(' ');
  +  }
  +
  +  String _parseArgs(String input) {
  +    // everything in the brackets
  +    return input.contains('(') && input.contains(')')
  +        ? input.split('(')[1].split(')')[0]
  +        : '';
  +  }
  +
  +  String _parseFunctionReturnType(String input) {
  +    // assume following dart lint suggestion of always declaring return type
  +    return input.split(' ')[0];
  +  }
  +
  +  String _parseMethodReturnType(String input) {
  +    var returnType = input
  +        .split(' ')
  +        .where((s) => s != '@override' && s != 'static')
  +        .join(' ')
  +        .split(' ')[0];
  +    // return blank if no return type specified
  +    return returnType.contains('(') ? '' : returnType;
  +  }
  +
  +  void generate() {
       Iterable<String> dirs;
   
  -    if (options.rest.isEmpty) {
  +    if (options.rest.isEmpty as bool) {
         dirs = ['.'];
       } else {
         dirs = options.rest;
  
positive.code:           path.relative(file.path, from: root),
            '/${klass.matchAsPrefix(declaration.toSource())[0]}/;"',
            'c',
            options['line-numbers'] as bool
                ? 'line:${unit.lineInfo.getLocation(declaration.offset).lineNumber}'
                : ''
          ]);
          declaration.members.forEach((member) {
            if (member is ConstructorDeclaration) {
              lines.add([
                member.name == null ? declaration.name.name : member.name.name,
                path.relative(file.path, from: root),
                '/${constructor.matchAsPrefix(member.toSource())[0]}/;"',
                'M',
                options['line-numbers'] as bool
                    ? 'line:${unit.lineInfo.getLocation(member.offset).lineNumber}'
                    : '',
                'class:${declaration.name}'
              ]);
            } else if (member is FieldDeclaration) {
              member.fields.variables.forEach((variable) {
                lines.add([
                  variable.name.name,
                  path.relative(file.path, from: root),
                  '/${member.toSource()}/;"',
                  'i',
                  options['line-numbers'] as bool
                      ? 'line:${unit.lineInfo.getLocation(member.offset).lineNumber}'
                      : '',
                  'class:${declaration.name}'
                ]);
              });
            } else if (member is MethodDeclaration) {
              lines.add([
                member.name.name,
                path.relative(file.path, from: root),
                '/${method.matchAsPrefix(member.toSource())[0]}/;"',
                member.isStatic ? 'M' : 'm',
                options['line-numbers'] as bool
                    ? 'line:${unit.lineInfo.getLocation(member.offset).lineNumber}'
                    : '',
                'class:${declaration.name}'
              ]);
            }
          });
        }
      });
      return lines.map((line) => line.join('\t'));
    }
  }
  
  main([List<String> args]) {
    ArgParser parser = ArgParser();
    parser.addOption('output',
        abbr: 'o',
  
negative.code:     var unit = result.unit;
      unit.declarations.forEach((declaration) {
        if (declaration is FunctionDeclaration) {
          var declarationSource = declaration.toSource();
  
          lines.add([
            declaration.name.name,
            path.relative(file.path, from: root),
  