anchor.diff:    }
   }
   
  +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;
  
positive.code:     pages.add(FeedbackPage(this));
      pages.add(AstPage(this));
      pages.add(ElementModelPage(this));
    }
  
    @override
  
negative.code:     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.writeln(' <a href="$elementPath">element</a>');
        buf.writeln(
            ' <a href="$contentsPath">contents${hasOverlay ? '*' : ''}</a>');
      }
  
      h4('Priority files ${lenCounter(priorityFiles)}', raw: true);
  