anchor.diff:    }
   }
   
  +Future<void> fetchSinceInfo() async {
  +  sinceInfo = await sinceMap;
  +}
  +
   Future<LintConfig> fetchConfig(String url) async {
     var client = new http.Client();
     var req = await client.get(url);
     return processAnalysisOptionsFile(req.body);
   }
  +
  +Map<String, SinceInfo> sinceInfo;
   
   Future<void> generateDocs(String dir) async {
     String outDir = dir;
  
positive.code:             <h1>$humanReadableName</h1>
              <p>Group: $group</p>
              <p>Maturity: $maturityString</p>
              ${getBadges(name)}
              <p class="view"><a href="https://github.com/dart-lang/linter">View the Project on GitHub <small>dart-lang/linter</small></a></p>
              <ul>
  
negative.code:   }
  
    String get name => rule.name;
  
    String get since {
      var info = sinceInfo[name];
      // todo (pq): consider a footnote explaining that since info is static and "unreleased" tags may be stale.
      return '${info.sinceLinter}, Dart Sdk ${info.sinceDartSdk ?? "unreleased"}';
    }
  
    generate([String filePath]) {
      var generated = _generate();
  