anchor.diff:      void writeFile(String file) {
         String astPath = '/ast?file=${Uri.encodeQueryComponent(file)}';
         String elementPath = '/element?file=${Uri.encodeQueryComponent(file)}';
  +      String contentsPath = '/contents?file=${Uri.encodeQueryComponent(file)}';
  +      bool hasOverlay = server.resourceProvider.hasOverlay(file);
   
         buf.write(file);
         buf.writeln(' <a href="$astPath">ast</a>');
  -      buf.write(' ');
  -      buf.writeln('<a href="$elementPath">element</a>');
  +      buf.writeln(' <a href="$elementPath">element</a>');
  +      buf.writeln(
  +          ' <a href="$contentsPath">contents${hasOverlay ? '*' : ''}</a>');
       }
   
       h4('Priority files ${lenCounter(priorityFiles)}', raw: true);
  
positive.code:     pages.add(FeedbackPage(this));
      pages.add(AstPage(this));
      pages.add(ElementModelPage(this));
    }
  
    @override
  
negative.code:   }
  }
  
  class ContentsPage extends DiagnosticPageWithNav {
    String _description;
  
    ContentsPage(DiagnosticsSite site)
        : super(site, 'contents', 'Contents',
              description: 'The Contents/Overlay of a file.');
  
    @override
    String get description => _description ?? super.description;
  
    @override
    bool get showInNav => false;
  
    @override
    Future<void> generateContent(Map<String, String> params) async {
      String filePath = params['file'];
      if (filePath == null) {
        p('No file path provided.');
        return;
      }
      AnalysisDriver driver = server.getAnalysisDriver(filePath);
      if (driver == null) {
        p('The file <code>${escape(filePath)}</code> is not being analyzed.',
            raw: true);
        return;
      }
      File file = await server.resourceProvider.getFile(filePath);
      if (!file.exists) {
        p('The file <code>${escape(filePath)}</code> does not exist.', raw: true);
        return;
      }
  
      if (server.resourceProvider.hasOverlay(filePath)) {
        p('Showing overlay for file.');
      } else {
        p('Showing file system contents for file.');
      }
  
      pre(() {
        buf.write('<code>');
        buf.write(escape(file.readAsStringSync()));
        buf.writeln('</code>');
      });
    }
  
    @override
    Future<void> generatePage(Map<String, String> params) async {
      try {
        _description = params['file'];
        await super.generatePage(params);
      } finally {
        _description = null;
      }
    }
  }
  
  /// A page with a proscriptive notion of layout.
  abstract class DiagnosticPage extends Page {
    final DiagnosticsSite site;
  