anchor.diff:          'version': version,
           'unformattedFiles': unformattedFiles,
           'analyzerErrors': _analyzerItemJson.length,
  -        'pubClean': pubClean
  +        'pubClean': pubClean,
  +        'authorDomains': (authorDomains.toList()..sort()).join(', ')
         };
   
     Iterable<Map<String, Object>> get _analyzerItemJson sync* {
  
positive.code: import 'package:path/path.dart' as p;
  
  main() async {
    var dir = new Directory("pkg_clean.1491503303478");
  
    var items = dir
        .listSync()
  
negative.code:     }
    }
  }
  
  const _domainRegep =
      r"(?:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.)+[a-zA-Z]{2,}";
  final _domainThing = new RegExp("[@/]($_domainRegep)>");
  
  String _domainFromAuthor(String author) {
    var match = _domainThing.firstMatch(author);
    if (match == null) {
      return 'unknown';
    }
    return match.group(1);
  }
  