From 03e34f8f816c2594238585bdca39716f4050cb69 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sat, 21 Jul 2018 17:15:25 -0600 Subject: [PATCH] Remove dependency on error handling from find_testable_code --- src/librustdoc/html/markdown.rs | 21 +++++++++++++-------- src/librustdoc/markdown.rs | 6 +++++- src/librustdoc/test.rs | 10 ++++++---- 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::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 @@ fn next(&mut self) -> Option { } } -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, 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 @@ fn visit_testable(&mut self, // 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); -- 2.44.0