Skip to content

Commit

Permalink
Auto merge of rust-lang#51861 - GuillaumeGomez:prevent-some-markdown-…
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
bors committed Jul 6, 2018
2 parents 00f4972 + 6a86ee7 commit a8403e1
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 7 deletions.
43 changes: 36 additions & 7 deletions src/librustdoc/html/markdown.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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>;

Expand All @@ -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
}
}

Expand Down Expand Up @@ -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();

Expand Down
35 changes: 35 additions & 0 deletions src/test/rustdoc/short-dockblock.rs
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit a8403e1

Please sign in to comment.