1
Fork 0

rustdoc: only filter lines starting with '# ' from the shown code.

Currently any line starting with `#` is filtered from the output,
including line like `#[deriving]`; this patch makes it so lines are only
filtered when followed by a space similar to the current behaviour of
the tutorial/manual tester.
This commit is contained in:
Huon Wilson 2013-12-29 10:54:56 +11:00
parent 9477c49a7b
commit 582ad8ffc2
6 changed files with 46 additions and 5 deletions

View file

@ -132,9 +132,10 @@ specifiers that can be used to dictate how a code block is tested:
~~~ ~~~
Rustdoc also supplies some extra sugar for helping with some tedious Rustdoc also supplies some extra sugar for helping with some tedious
documentation examples. If a line is prefixed with a `#` character, then the documentation examples. If a line is prefixed with `# `, then the line
line will not show up in the HTML documentation, but it will be used when will not show up in the HTML documentation, but it will be used when
testing the code block. testing the code block (NB. the space after the `#` is required, so
that one can still write things like `#[deriving(Eq)]`).
~~~ ~~~
```rust ```rust

View file

@ -101,7 +101,7 @@ pub fn render(w: &mut io::Writer, s: &str) {
vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| { vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| {
let text = str::from_utf8(text); let text = str::from_utf8(text);
let mut lines = text.lines().filter(|l| { let mut lines = text.lines().filter(|l| {
!l.trim().starts_with("#") !l.trim().starts_with("# ")
}); });
let text = lines.to_owned_vec().connect("\n"); let text = lines.to_owned_vec().connect("\n");
@ -169,7 +169,9 @@ pub fn find_testable_code(doc: &str, tests: &mut ::test::Collector) {
vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| { vec::raw::buf_as_slice((*text).data, (*text).size as uint, |text| {
let tests: &mut ::test::Collector = intrinsics::transmute(opaque); let tests: &mut ::test::Collector = intrinsics::transmute(opaque);
let text = str::from_utf8(text); let text = str::from_utf8(text);
let mut lines = text.lines().map(|l| l.trim_chars(&'#')); let mut lines = text.lines().map(|l| {
if l.starts_with("# ") {l.slice_from(2)} else {l}
});
let text = lines.to_owned_vec().connect("\n"); let text = lines.to_owned_vec().connect("\n");
tests.add_test(text, ignore, shouldfail); tests.add_test(text, ignore, shouldfail);
}) })

View file

@ -171,6 +171,7 @@ impl Collector {
self.cnt += 1; self.cnt += 1;
let libs = (*self.libs).clone(); let libs = (*self.libs).clone();
let cratename = self.cratename.to_owned(); let cratename = self.cratename.to_owned();
debug!("Creating test {}: {}", name, test);
self.tests.push(test::TestDescAndFn { self.tests.push(test::TestDescAndFn {
desc: test::TestDesc { desc: test::TestDesc {
name: test::DynTestName(name), name: test::DynTestName(name),

View file

@ -0,0 +1,7 @@
-include ../tools.mk
all:
$(RUSTDOC) --test foo.rs
$(RUSTDOC) -w html -o $(TMPDIR)/doc foo.rs
cp verify.sh $(TMPDIR)
$(call RUN,verify.sh) $(TMPDIR)

View file

@ -0,0 +1,22 @@
#[crate_id="foo#0.1"];
/// The '# ' lines should be removed from the output, but the #[deriving] should be
/// retained.
///
/// ```rust
/// mod to_make_deriving_work { // FIXME #4913
///
/// # #[deriving(Eq)] // invisible
/// # struct Foo; // invisible
///
/// #[deriving(Eq)] // Bar
/// struct Bar(Foo);
///
/// fn test() {
/// let x = Bar(Foo);
/// assert!(x == x); // check that the derivings worked
/// }
///
/// }
/// ```
pub fn foo() {}

View file

@ -0,0 +1,8 @@
#!/bin/sh
file="$1/doc/foo/fn.foo.html"
grep -v 'invisible' $file &&
grep '#\[deriving(Eq)\] // Bar' $file
exit $?