about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2018-07-21 17:15:25 -0600
committerMark Rousskov <mark.simulacrum@gmail.com>2018-07-31 11:37:21 -0600
commit03e34f8f816c2594238585bdca39716f4050cb69 (patch)
treedd3a63e35155a04fa7729dca7b8e60d8fb29e924 /src
parentde5cebdba58770ab555476bc4cdf23d89bd0c3ea (diff)
downloadrust-03e34f8f816c2594238585bdca39716f4050cb69.tar.gz
rust-03e34f8f816c2594238585bdca39716f4050cb69.zip
Remove dependency on error handling from find_testable_code
Diffstat (limited to 'src')
-rw-r--r--src/librustdoc/html/markdown.rs21
-rw-r--r--src/librustdoc/markdown.rs6
-rw-r--r--src/librustdoc/test.rs10
3 files changed, 24 insertions, 13 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs
index c73e6d4b355..54fd041fb00 100644
--- a/src/librustdoc/html/markdown.rs
+++ b/src/librustdoc/html/markdown.rs
@@ -34,10 +34,8 @@ use std::fmt::{self, Write};
 use std::borrow::Cow;
 use std::ops::Range;
 use std::str;
-use syntax::feature_gate::UnstableFeatures;
-use syntax::codemap::Span;
-use errors;
 
+use syntax::feature_gate::UnstableFeatures;
 use html::render::derive_id;
 use html::toc::TocBuilder;
 use html::highlight;
@@ -469,10 +467,17 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for Footnotes<'a, I> {
     }
 }
 
-pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, position: Span,
-                          handler: &errors::Handler) {
-    tests.set_position(position);
+pub struct TestableCodeError(());
+
+impl fmt::Display for TestableCodeError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        write!(f, "invalid start of a new code block")
+    }
+}
 
+pub fn find_testable_code(
+    doc: &str, tests: &mut test::Collector
+) -> Result<(), TestableCodeError> {
     let is_nightly = UnstableFeatures::from_environment().is_nightly_build();
     let mut parser = Parser::new(doc);
     let mut prev_offset = 0;
@@ -516,8 +521,7 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, position: Sp
                     tests.add_test(text, block_info, line);
                     prev_offset = offset;
                 } else {
-                    handler.span_warn(position, "invalid start of a new code block");
-                    break;
+                    return Err(TestableCodeError(()));
                 }
             }
             Event::Start(Tag::Header(level)) => {
@@ -535,6 +539,7 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, position: Sp
             _ => {}
         }
     }
+    Ok(())
 }
 
 #[derive(Eq, PartialEq, Clone, Debug)]
diff --git a/src/librustdoc/markdown.rs b/src/librustdoc/markdown.rs
index 82489e9fbdb..4d1eae1470f 100644
--- a/src/librustdoc/markdown.rs
+++ b/src/librustdoc/markdown.rs
@@ -156,7 +156,11 @@ pub fn test(input: &str, cfgs: Vec<String>, libs: SearchPaths, externs: Externs,
                                        true, opts, maybe_sysroot, None,
                                        Some(PathBuf::from(input)),
                                        linker, edition);
-    find_testable_code(&input_str, &mut collector, DUMMY_SP, diag);
+    collector.set_position(DUMMY_SP);
+    let res = find_testable_code(&input_str, &mut collector);
+    if let Err(err) = res {
+        diag.span_warn(DUMMY_SP, &err.to_string());
+    }
     test_args.insert(0, "rustdoctest".to_string());
     testing::test_main(&test_args, collector.tests,
                        testing::Options::new().display_output(display_warnings));
diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs
index 2885ce615d2..9723b452800 100644
--- a/src/librustdoc/test.rs
+++ b/src/librustdoc/test.rs
@@ -687,10 +687,12 @@ impl<'a, 'hir> HirCollector<'a, 'hir> {
         // the collapse-docs pass won't combine sugared/raw doc attributes, or included files with
         // anything else, this will combine them for us
         if let Some(doc) = attrs.collapsed_doc_value() {
-            markdown::find_testable_code(&doc,
-                                         self.collector,
-                                         attrs.span.unwrap_or(DUMMY_SP),
-                                         self.sess.diagnostic());
+            self.collector.set_position(attrs.span.unwrap_or(DUMMY_SP));
+            let res = markdown::find_testable_code(&doc, self.collector);
+            if let Err(err) = res {
+                self.sess.diagnostic().span_warn(attrs.span.unwrap_or(DUMMY_SP),
+                    &err.to_string());
+            }
         }
 
         nested(self);