use html::markdown::{Markdown, MarkdownWithToc, find_testable_code};
use test::{TestOptions, Collector};
-/// Separate any lines at the start of the file that begin with `%`.
+/// Separate any lines at the start of the file that begin with `# ` or `%`.
fn extract_leading_metadata<'a>(s: &'a str) -> (Vec<&'a str>, &'a str) {
let mut metadata = Vec::new();
let mut count = 0;
+
for line in s.lines() {
- if line.starts_with("%") {
- // remove %<whitespace>
+ if line.starts_with("# ") || line.starts_with("%") {
+ // trim the whitespace after the symbol
metadata.push(line[1..].trim_left());
count += line.len() + 1;
} else {
return (metadata, &s[count..]);
}
}
- // if we're here, then all lines were metadata % lines.
+
+ // if we're here, then all lines were metadata `# ` or `%` lines.
(metadata, "")
}
if metadata.is_empty() {
let _ = writeln!(
&mut io::stderr(),
- "rustdoc: invalid markdown file: expecting initial line with `% ...TITLE...`"
+ "rustdoc: invalid markdown file: no initial lines starting with `# ` or `%`"
);
return 5;
}
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, None);
+ true, opts, maybe_sysroot, None,
+ Some(input.to_owned()));
find_testable_code(&input_str, &mut collector, DUMMY_SP);
test_args.insert(0, "rustdoctest".to_string());
testing::test_main(&test_args, collector.tests);