anchor.diff:      'lib/src/fasta/source',
       'lib/src/fasta/util',
     ]),
  -  'lib/src/fasta/parser':
  -      new SubpackageRules(allowSubdirs: true, allowedDependencies: [
  -    'lib/src/fasta',
  -    'lib/src/fasta/scanner',
  -    'lib/src/fasta/util',
  -  ]),
  -  'lib/src/fasta/scanner':
  -      new SubpackageRules(allowSubdirs: true, allowedDependencies: [
  +  'lib/src/fasta/parser': new SubpackageRules(allowedDependencies: [
  +    'lib/src/fasta',
  +    'lib/src/fasta/scanner',
  +    'lib/src/fasta/util',
  +  ]),
  +  'lib/src/fasta/scanner': new SubpackageRules(allowedDependencies: [
       'lib/src/fasta',
       'lib/src/fasta/parser',
       // fasta scanner produces analyzer scanner tokens
  
positive.code:   /// Indicates which other subpackages a given subpackage may directly depend
    /// on.
    final List<String> allowedDependencies;
  
    SubpackageRules(
        {this.mayImportAnalyzer: false,
  
negative.code:           'subpackageRules');
        return;
      }
      srcSubpackageRules.actuallyContainsFiles = true;
      if (dst.pathSegments[0] == 'analyzer') {
        if (srcSubpackageRules.mayImportAnalyzer) {
          srcSubpackageRules.actuallyImportsAnalyzer = true;
        } else {
          problem('$src depends on $dst, but subpackage "$srcSubpackage" may not '
              'import analyzer');
        }
      }
      var dstSubPackage = subpackageForUri(dst);
      if (dstSubPackage == null) return;
      if (dstSubPackage == srcSubpackage) return;
      if (srcSubpackageRules.allowedDependencies.contains(dstSubPackage)) {
        srcSubpackageRules.actualDependencies.add(dstSubPackage);
      } else {
        problem('$src depends on $dst, but subpackage "$srcSubpackage" is not '
            'allowed to depend on subpackage "$dstSubPackage"');
      }
  