diff options
| author | bors <bors@rust-lang.org> | 2018-07-06 00:36:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-07-06 00:36:34 +0000 |
| commit | a8403e1cda2e0cba4f2c7282ab5adb5392bef473 (patch) | |
| tree | 6e50a040eb0509b7cd78e05b708974d4a19c7e52 | |
| parent | 00f49728e03d7bcf419e0d94fa45f3f4285ff7e3 (diff) | |
| parent | 6a86ee73285c6a522dce0da5fee3ed4681501b21 (diff) | |
| download | rust-a8403e1cda2e0cba4f2c7282ab5adb5392bef473.tar.gz rust-a8403e1cda2e0cba4f2c7282ab5adb5392bef473.zip | |
Auto merge of #51861 - GuillaumeGomez:prevent-some-markdown-short-doc, r=QuietMisdreavus
Prevent some markdown transformation on short docblocks Before: <img width="1440" alt="screen shot 2018-06-28 at 01 46 01" src="https://user-images.githubusercontent.com/3050060/42005762-7d533bbe-7a76-11e8-8361-027886803399.png"> After: <img width="1440" alt="screen shot 2018-06-28 at 01 46 02" src="https://user-images.githubusercontent.com/3050060/42005768-81bd59a0-7a76-11e8-819b-9b4be72579d6.png"> This is only performed on short doc blocks, not on plain ones. Not all transformations are prevented (you still have a few like urls, code blocks, etc...). cc @nical r? @QuietMisdreavus
| -rw-r--r-- | src/librustdoc/html/markdown.rs | 43 | ||||
| -rw-r--r-- | src/test/rustdoc/short-dockblock.rs | 35 |
2 files changed, 71 insertions, 7 deletions
diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index c77a720b16b..8040548ce6b 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -339,6 +339,20 @@ impl<'a, I: Iterator<Item = Event<'a>>> SummaryLine<'a, I> { } } +fn check_if_allowed_tag(t: &Tag) -> bool { + match *t { + Tag::Paragraph + | Tag::CodeBlock(_) + | Tag::Item + | Tag::Emphasis + | Tag::Strong + | Tag::Code + | Tag::Link(_, _) + | Tag::BlockQuote => true, + _ => false, + } +} + impl<'a, I: Iterator<Item = Event<'a>>> Iterator for SummaryLine<'a, I> { type Item = Event<'a>; @@ -350,12 +364,28 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for SummaryLine<'a, I> { self.started = true; } let event = self.inner.next(); - match event { - Some(Event::Start(..)) => self.depth += 1, - Some(Event::End(..)) => self.depth -= 1, - _ => {} + let mut is_start = true; + let is_allowed_tag = match event { + Some(Event::Start(ref c)) => { + self.depth += 1; + check_if_allowed_tag(c) + } + Some(Event::End(ref c)) => { + self.depth -= 1; + is_start = false; + check_if_allowed_tag(c) + } + _ => true, + }; + if is_allowed_tag == false { + if is_start { + Some(Event::Start(Tag::Paragraph)) + } else { + Some(Event::End(Tag::Paragraph)) + } + } else { + event } - event } } @@ -688,8 +718,7 @@ impl<'a> fmt::Display for MarkdownSummaryLine<'a> { } }; - let p = Parser::new_with_broken_link_callback(md, Options::empty(), - Some(&replacer)); + let p = Parser::new_with_broken_link_callback(md, Options::empty(), Some(&replacer)); let mut s = String::new(); diff --git a/src/test/rustdoc/short-dockblock.rs b/src/test/rustdoc/short-dockblock.rs new file mode 100644 index 00000000000..cb36110b291 --- /dev/null +++ b/src/test/rustdoc/short-dockblock.rs @@ -0,0 +1,35 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![crate_name = "foo"] + +// @has foo/index.html '//*[@class="docblock-short"]/p' 'fooo' +// @!has foo/index.html '//*[@class="docblock-short"]/p/h1' 'fooo' +// @has foo/fn.foo.html '//h1[@id="fooo"]/a[@href="#fooo"]' 'fooo' + +/// # fooo +/// +/// foo +pub fn foo() {} + +// @has foo/index.html '//*[@class="docblock-short"]/p' 'mooood' +// @!has foo/index.html '//*[@class="docblock-short"]/p/h2' 'mooood' +// @has foo/foo/index.html '//h2[@id="mooood"]/a[@href="#mooood"]' 'mooood' + +/// ## mooood +/// +/// foo mod +pub mod foo {} + +// @has foo/index.html '//*[@class="docblock-short"]/p/a[@href=\ +// "https://nougat.world"]/code' 'nougat' + +/// [`nougat`](https://nougat.world) +pub struct Bar; |
