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:
parent
9477c49a7b
commit
582ad8ffc2
6 changed files with 46 additions and 5 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
})
|
})
|
||||||
|
|
|
@ -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),
|
||||||
|
|
7
src/test/run-make/rustdoc-hidden-line/Makefile
Normal file
7
src/test/run-make/rustdoc-hidden-line/Makefile
Normal 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)
|
22
src/test/run-make/rustdoc-hidden-line/foo.rs
Normal file
22
src/test/run-make/rustdoc-hidden-line/foo.rs
Normal 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() {}
|
8
src/test/run-make/rustdoc-hidden-line/verify.sh
Executable file
8
src/test/run-make/rustdoc-hidden-line/verify.sh
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
file="$1/doc/foo/fn.foo.html"
|
||||||
|
|
||||||
|
grep -v 'invisible' $file &&
|
||||||
|
grep '#\[deriving(Eq)\] // Bar' $file
|
||||||
|
|
||||||
|
exit $?
|
Loading…
Add table
Add a link
Reference in a new issue