diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2017-02-06 22:11:03 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2017-02-06 22:11:03 +0100 |
| commit | b0803d4aedc06504cb4cb86f63beb6650ff67a8e (patch) | |
| tree | fa0fa33f9084c0e8a975ebe35d97eab5837d5fac /src | |
| parent | 324b175174c19b8be4592df11e65e0c4b6fee9d3 (diff) | |
| download | rust-b0803d4aedc06504cb4cb86f63beb6650ff67a8e.tar.gz rust-b0803d4aedc06504cb4cb86f63beb6650ff67a8e.zip | |
Display correct filename with --test option
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/html/markdown.rs | 8 | ||||
| -rw-r--r-- | src/librustdoc/markdown.rs | 6 | ||||
| -rw-r--r-- | src/librustdoc/test.rs | 37 |
3 files changed, 29 insertions, 22 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index e8ff8930bdd..e70030912db 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -35,6 +35,7 @@ use std::fmt::{self, Write}; use std::slice; use std::str; use syntax::feature_gate::UnstableFeatures; +use syntax::codemap::Span; use html::render::derive_id; use html::toc::TocBuilder; @@ -429,7 +430,7 @@ pub fn render(w: &mut fmt::Formatter, } } -pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, start_line: usize) { +pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, position: Span) { extern fn block(_ob: *mut hoedown_buffer, text: *const hoedown_buffer, lang: *const hoedown_buffer, @@ -454,11 +455,12 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, start_line: }); let text = lines.collect::<Vec<&str>>().join("\n"); let line = tests.get_line() + line; + let filename = tests.get_filename(); tests.add_test(text.to_owned(), block_info.should_panic, block_info.no_run, block_info.ignore, block_info.test_harness, block_info.compile_fail, block_info.error_codes, - line); + line, filename); } } @@ -479,7 +481,7 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector, start_line: } } - tests.set_line(start_line); + tests.set_position(position); unsafe { let ob = hoedown_buffer_new(DEF_OUNIT); let renderer = hoedown_html_renderer_new(0, 0); diff --git a/src/librustdoc/markdown.rs b/src/librustdoc/markdown.rs index 49497957be9..70ef7c597e4 100644 --- a/src/librustdoc/markdown.rs +++ b/src/librustdoc/markdown.rs @@ -18,6 +18,7 @@ use getopts; use testing; use rustc::session::search_paths::SearchPaths; use rustc::session::config::Externs; +use syntax::codemap::DUMMY_SP; use externalfiles::{ExternalHtml, LoadStringError, load_string}; @@ -154,9 +155,8 @@ pub fn test(input: &str, cfgs: Vec<String>, libs: SearchPaths, externs: Externs, let mut opts = TestOptions::default(); opts.no_crate_inject = true; let mut collector = Collector::new(input.to_string(), cfgs, libs, externs, - true, opts, maybe_sysroot, "input".to_string(), - None); - find_testable_code(&input_str, &mut collector, 0); + true, opts, maybe_sysroot, None); + find_testable_code(&input_str, &mut collector, DUMMY_SP); test_args.insert(0, "rustdoctest".to_string()); testing::test_main(&test_args, collector.tests); 0 diff --git a/src/librustdoc/test.rs b/src/librustdoc/test.rs index 6f38da4f24b..930cf401e74 100644 --- a/src/librustdoc/test.rs +++ b/src/librustdoc/test.rs @@ -37,7 +37,7 @@ use rustc_trans::back::link; use syntax::ast; use syntax::codemap::CodeMap; use syntax::feature_gate::UnstableFeatures; -use syntax_pos::{BytePos, DUMMY_SP, Pos}; +use syntax_pos::{BytePos, DUMMY_SP, Pos, Span}; use errors; use errors::emitter::ColorConfig; @@ -97,7 +97,6 @@ pub fn run(input: &str, link::find_crate_name(None, &hir_forest.krate().attrs, &input) }); let opts = scrape_test_config(hir_forest.krate()); - let filename = input_path.to_str().unwrap_or("").to_owned(); let mut collector = Collector::new(crate_name, cfgs, libs, @@ -105,7 +104,6 @@ pub fn run(input: &str, false, opts, maybe_sysroot, - filename, Some(codemap)); { @@ -391,15 +389,14 @@ pub struct Collector { cratename: String, opts: TestOptions, maybe_sysroot: Option<PathBuf>, - filename: String, - start_line: usize, + position: Span, codemap: Option<Rc<CodeMap>>, } impl Collector { pub fn new(cratename: String, cfgs: Vec<String>, libs: SearchPaths, externs: Externs, use_headers: bool, opts: TestOptions, maybe_sysroot: Option<PathBuf>, - filename: String, codemap: Option<Rc<CodeMap>>) -> Collector { + codemap: Option<Rc<CodeMap>>) -> Collector { Collector { tests: Vec::new(), names: Vec::new(), @@ -412,8 +409,7 @@ impl Collector { cratename: cratename, opts: opts, maybe_sysroot: maybe_sysroot, - filename: filename, - start_line: 0, + position: DUMMY_SP, codemap: codemap, } } @@ -421,8 +417,8 @@ impl Collector { pub fn add_test(&mut self, test: String, should_panic: bool, no_run: bool, should_ignore: bool, as_test_harness: bool, compile_fail: bool, error_codes: Vec<String>, - line: usize) { - let name = format!("{} - line {}", self.filename, line); + line: usize, filename: String) { + let name = format!("{} - line {}", filename, line); self.cnt += 1; let cfgs = self.cfgs.clone(); let libs = self.libs.clone(); @@ -467,16 +463,25 @@ impl Collector { } pub fn get_line(&self) -> usize { - if let Some(ref codemap) = self.codemap{ - let line = codemap.lookup_char_pos(BytePos(self.start_line as u32)).line; + if let Some(ref codemap) = self.codemap { + let line = self.position.lo.to_usize(); + let line = codemap.lookup_char_pos(BytePos(line as u32)).line; if line > 0 { line - 1 } else { line } } else { - self.start_line + 0 } } - pub fn set_line(&mut self, start_line: usize) { - self.start_line = start_line; + pub fn set_position(&mut self, position: Span) { + self.position = position; + } + + pub fn get_filename(&self) -> String { + if let Some(ref codemap) = self.codemap { + codemap.span_to_filename(self.position) + } else { + "<input>".to_owned() + } } pub fn register_header(&mut self, name: &str, level: u32) { @@ -520,7 +525,7 @@ impl<'a, 'hir> HirCollector<'a, 'hir> { if let Some(doc) = attrs.doc_value() { self.collector.cnt = 0; markdown::find_testable_code(doc, self.collector, - attrs.span.unwrap_or(DUMMY_SP).lo.to_usize()); + attrs.span.unwrap_or(DUMMY_SP)); } nested(self); |
