Skip to content

Commit a654610

Browse files
Fix line display for hoedown
1 parent e621e1c commit a654610

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

src/librustdoc/html/markdown.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ pub fn old_find_testable_code(doc: &str, tests: &mut ::test::Collector, position
492492
text: *const hoedown_buffer,
493493
lang: *const hoedown_buffer,
494494
data: *const hoedown_renderer_data,
495-
line: libc::size_t) {
495+
_line: libc::size_t) {
496496
unsafe {
497497
if text.is_null() { return }
498498
let block_info = if lang.is_null() {
@@ -503,11 +503,15 @@ pub fn old_find_testable_code(doc: &str, tests: &mut ::test::Collector, position
503503
LangString::parse(s)
504504
};
505505
if !block_info.rust { return }
506+
let text = (*text).as_bytes();
506507
let opaque = (*data).opaque as *mut hoedown_html_renderer_state;
507508
let tests = &mut *((*opaque).opaque as *mut ::test::Collector);
508-
let line = tests.get_line() + line;
509+
let text = str::from_utf8(text).unwrap();
510+
let lines = text.lines().map(|l| {
511+
stripped_filtered_line(l).unwrap_or(l)
512+
});
509513
let filename = tests.get_filename();
510-
tests.add_old_test(line, filename);
514+
tests.add_old_test(lines.collect::<Vec<&str>>().join("\n"), filename);
511515
}
512516
}
513517

src/librustdoc/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#![feature(staged_api)]
2828
#![feature(test)]
2929
#![feature(unicode)]
30+
#![feature(vec_remove_item)]
3031

3132
extern crate arena;
3233
extern crate getopts;

src/librustdoc/test.rs

+29-6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
use std::collections::HashMap;
1112
use std::env;
1213
use std::ffi::OsString;
1314
use std::io::prelude::*;
@@ -381,7 +382,7 @@ fn partition_source(s: &str) -> (String, String) {
381382
pub struct Collector {
382383
pub tests: Vec<testing::TestDescAndFn>,
383384
// to be removed when hoedown will be definitely gone
384-
pub old_tests: Vec<String>,
385+
pub old_tests: HashMap<String, Vec<String>>,
385386
names: Vec<String>,
386387
cfgs: Vec<String>,
387388
libs: SearchPaths,
@@ -403,7 +404,7 @@ impl Collector {
403404
codemap: Option<Rc<CodeMap>>, filename: Option<String>) -> Collector {
404405
Collector {
405406
tests: Vec::new(),
406-
old_tests: Vec::new(),
407+
old_tests: HashMap::new(),
407408
names: Vec::new(),
408409
cfgs: cfgs,
409410
libs: libs,
@@ -432,17 +433,39 @@ impl Collector {
432433
}
433434
}
434435

435-
pub fn add_old_test(&mut self, line: usize, filename: String) {
436-
let name = self.generate_name(line, &filename);
437-
self.old_tests.push(name);
436+
// to be removed once hoedown is gone
437+
fn generate_name_beginning(&self, filename: &str) -> String {
438+
if self.use_headers {
439+
if let Some(ref header) = self.current_header {
440+
format!("{} - {} (line", filename, header)
441+
} else {
442+
format!("{} - (line", filename)
443+
}
444+
} else {
445+
format!("{} - {} (line", filename, self.names.join("::"))
446+
}
447+
}
448+
449+
pub fn add_old_test(&mut self, test: String, filename: String) {
450+
let name_beg = self.generate_name_beginning(&filename);
451+
let entry = self.old_tests.entry(name_beg)
452+
.or_insert(Vec::new());
453+
entry.push(test.trim().to_owned());
438454
}
439455

440456
pub fn add_test(&mut self, test: String,
441457
should_panic: bool, no_run: bool, should_ignore: bool,
442458
as_test_harness: bool, compile_fail: bool, error_codes: Vec<String>,
443459
line: usize, filename: String) {
444460
let name = self.generate_name(line, &filename);
445-
if self.old_tests.iter().find(|&x| x == &name).is_none() {
461+
let name_beg = self.generate_name_beginning(&filename);
462+
let mut found = false;
463+
// to be removed when hoedown is removed
464+
let test = test.trim().to_owned();
465+
if let Some(entry) = self.old_tests.get_mut(&name_beg) {
466+
found = entry.remove_item(&test).is_some();
467+
}
468+
if !found {
446469
let _ = writeln!(&mut io::stderr(),
447470
"WARNING: {} Code block is not currently run as a test, but will in \
448471
future versions of rustdoc. Please ensure this code block is a \

0 commit comments

Comments
 (0)