anchor.diff:            path.relative(file.path, from: root),
             '/${klass.matchAsPrefix(declaration.toSource())[0]}/;"',
             'c',
  +          'access:${declaration.name.name[0] == '_' ? 'private' : 'public'}',
             options['line-numbers'] as bool
                 ? 'line:${unit.lineInfo.getLocation(declaration.offset).lineNumber}'
                 : ''
           ]);
           declaration.members.forEach((member) {
             if (member is ConstructorDeclaration) {
  +            String name;
  +            int offset;
  +            if (member.name == null) {
  +              name = declaration.name.name;
  +              offset = declaration.offset;
  +            } else {
  +              name = member.name.name;
  +              offset = member.offset;
  +            }
  +
  +            var constructorString =
  +                constructor.matchAsPrefix(member.toSource())[0];
  +
               lines.add([
  -              member.name == null ? declaration.name.name : member.name.name,
  +              name,
                 path.relative(file.path, from: root),
  -              '/${constructor.matchAsPrefix(member.toSource())[0]}/;"',
  -              'M',
  +              '/${constructorString}/;"',
  +              'C',
  +              options['line-numbers'] as bool
  +                  ? 'line:${unit.lineInfo.getLocation(offset).lineNumber}'
  +                  : '',
  +              'class:${declaration.name}',
  +              'signature:(${_parseArgs(constructorString)})',
  +            ]);
  +          } else if (member is FieldDeclaration) {
  +            member.fields.variables.forEach((variable) {
  +              var memberSource = member.toSource();
  +
  +              lines.add([
  +                variable.name.name,
  +                path.relative(file.path, from: root),
  +                '/${memberSource}/;"',
  +                'i',
  +                'access:${variable.name.name[0] == '_' ? 'private' : 'public'}',
  +                options['line-numbers'] as bool
  +                    ? 'line:${unit.lineInfo.getLocation(member.offset).lineNumber}'
  +                    : '',
  +                'class:${declaration.name}',
  +                'type:${_parseVarType(memberSource)}'
  +              ]);
  +            });
  +          } else if (member is MethodDeclaration) {
  +            var tag = 'm';
  +            if (member.isStatic) {
  +              tag = 'M';
  +            } else if (member.isOperator) {
  +              tag = 'o';
  +            } else if (member.isGetter) {
  +              tag = 'g';
  +            } else if (member.isSetter) {
  +              tag = 's';
  +            } else if (member.isAbstract) {
  +              tag = 'a';
  +            }
  +
  +            var memberSource = method.matchAsPrefix(member.toSource())[0];
  +
  +            lines.add([
  +              member.name.name,
  +              path.relative(file.path, from: root),
  +              '/${memberSource}/;"',
  +              tag,
  +              'access:${member.name.name[0] == '_' ? 'private' : 'public'}',
                 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}'
  +              'class:${declaration.name}',
  +              'signature:(${_parseArgs(memberSource)})',
  +              'type:${_parseMethodReturnType(memberSource)}'
               ]);
             }
           });
         }
       });
  -    return lines.map((line) => line.join('\t'));
  +    // eliminate \t string termination
  +    return lines.map((line) => line.join('\t').trimRight());
     }
   }
   
  -main([List<String> args]) {
  +void main([List<String> args]) {
     ArgParser parser = ArgParser();
     parser.addOption('output',
         abbr: 'o',
  
positive.code:     var unit = result.unit;
      unit.declarations.forEach((declaration) {
        if (declaration is FunctionDeclaration) {
          lines.add([
            declaration.name.name,
            path.relative(file.path, from: root),
  
negative.code:           'f',
            options['line-numbers'] as bool
                ? 'line:${unit.lineInfo.getLocation(declaration.offset).lineNumber}'
                : '',
            'signature:(${_parseArgs(declarationSource)})',
            'type:${_parseFunctionReturnType(declarationSource)}'
          ]);
        } else if (declaration is ClassDeclaration) {
          lines.add([
  