diff options
| author | bors <bors@rust-lang.org> | 2018-10-12 09:23:10 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-10-12 09:23:10 +0000 |
| commit | 849a0e9c40ef79efec0802334fe10406ea3e7256 (patch) | |
| tree | fe723bda29970a99a90d0433d95a4c2ef02c4f7b /src/librustdoc/html | |
| parent | 8dc554a32507de2d923e5ba3ca3d672adaf0a822 (diff) | |
| parent | 322e46916e8251821543769ada7e38d6e4532da4 (diff) | |
| download | rust-849a0e9c40ef79efec0802334fe10406ea3e7256.tar.gz rust-849a0e9c40ef79efec0802334fe10406ea3e7256.zip | |
Auto merge of #53933 - GuillaumeGomez:codeblock-error-display, r=QuietMisdreavus
Improve error display for codeblocks in rustdoc Part of #53919. r? @QuietMisdreavus
Diffstat (limited to 'src/librustdoc/html')
| -rw-r--r-- | src/librustdoc/html/highlight.rs | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/librustdoc/html/highlight.rs b/src/librustdoc/html/highlight.rs index 5df4862290e..87b4527a2a7 100644 --- a/src/librustdoc/html/highlight.rs +++ b/src/librustdoc/html/highlight.rs @@ -44,9 +44,21 @@ pub fn render_with_highlighting(src: &str, class: Option<&str>, } write_header(class, &mut out).unwrap(); - let mut classifier = Classifier::new(lexer::StringReader::new(&sess, fm, None), - sess.source_map()); + let lexer = match lexer::StringReader::new_without_err(&sess, fm, None, "Output from rustc:") { + Ok(l) => l, + Err(_) => { + let first_line = src.lines().next().unwrap_or_else(|| ""); + let mut err = sess.span_diagnostic + .struct_warn(&format!("Invalid doc comment starting with: `{}`\n\ + (Ignoring this codeblock)", + first_line)); + err.emit(); + return String::new(); + } + }; + let mut classifier = Classifier::new(lexer, sess.source_map()); if classifier.write_source(&mut out).is_err() { + classifier.lexer.emit_fatal_errors(); return format!("<pre>{}</pre>", src); } @@ -162,11 +174,10 @@ impl<'a> Classifier<'a> { match self.lexer.try_next_token() { Ok(tas) => Ok(tas), Err(_) => { - self.lexer.emit_fatal_errors(); - self.lexer.sess.span_diagnostic - .struct_warn("Backing out of syntax highlighting") - .note("You probably did not intend to render this as a rust code-block") - .emit(); + let mut err = self.lexer.sess.span_diagnostic + .struct_warn("Backing out of syntax highlighting"); + err.note("You probably did not intend to render this as a rust code-block"); + err.emit(); Err(io::Error::new(io::ErrorKind::Other, "")) } } |
