diff --git a/src/librustdoc/html/markdown.rs b/src/librustdoc/html/markdown.rs index 649a5c7ff33b6..00ca4fed2f4a0 100644 --- a/src/librustdoc/html/markdown.rs +++ b/src/librustdoc/html/markdown.rs @@ -399,7 +399,6 @@ impl<'a, I: Iterator>> SummaryLine<'a, I> { fn check_if_allowed_tag(t: &Tag) -> bool { match *t { Tag::Paragraph - | Tag::CodeBlock(_) | Tag::Item | Tag::Emphasis | Tag::Strong @@ -420,29 +419,36 @@ impl<'a, I: Iterator>> Iterator for SummaryLine<'a, I> { if !self.started { self.started = true; } - let event = self.inner.next(); - 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)) + while let Some(event) = self.inner.next() { + let mut is_start = true; + let is_allowed_tag = match event { + Event::Start(Tag::CodeBlock(_)) | Event::End(Tag::CodeBlock(_)) => { + return None; + } + Event::Start(ref c) => { + self.depth += 1; + check_if_allowed_tag(c) + } + Event::End(ref c) => { + self.depth -= 1; + is_start = false; + check_if_allowed_tag(c) + } + _ => { + true + } + }; + return if is_allowed_tag == false { + if is_start { + Some(Event::Start(Tag::Paragraph)) + } else { + Some(Event::End(Tag::Paragraph)) + } } else { - Some(Event::End(Tag::Paragraph)) - } - } else { - event + Some(event) + }; } + None } } diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index efd71ad0763e0..b9d259a3cfab4 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -2584,24 +2584,39 @@ fn item_module(w: &mut fmt::Formatter, cx: &Context, _ => "", }; + let stab = myitem.stability_class(); + let add = if stab.is_some() { + " " + } else { + "" + }; + let doc_value = myitem.doc_value().unwrap_or(""); - write!(w, " - - {name}{unsafety_flag} - - {stab_docs} {docs} - + write!(w, "\ + \ + {name}{unsafety_flag}\ + {stab_docs}{docs}\ + \ ", name = *myitem.name.as_ref().unwrap(), stab_docs = stab_docs, docs = MarkdownSummaryLine(doc_value, &myitem.links()), class = myitem.type_(), - stab = myitem.stability_class().unwrap_or(String::new()), + add = add, + stab = stab.unwrap_or_else(|| String::new()), unsafety_flag = unsafety_flag, href = item_path(myitem.type_(), myitem.name.as_ref().unwrap()), - title_type = myitem.type_(), - title = full_path(cx, myitem))?; + title = [full_path(cx, myitem), myitem.type_().to_string()] + .iter() + .filter_map(|s| if !s.is_empty() { + Some(s.as_str()) + } else { + None + }) + .collect::>() + .join(" "), + )?; } } } diff --git a/src/test/rustdoc/doc-cfg.rs b/src/test/rustdoc/doc-cfg.rs index 27077ed4f1ac1..f82dafa251720 100644 --- a/src/test/rustdoc/doc-cfg.rs +++ b/src/test/rustdoc/doc-cfg.rs @@ -20,8 +20,8 @@ pub struct Portable; // @has doc_cfg/unix_only/index.html \ // '//*[@id="main"]/*[@class="stability"]/*[@class="stab portability"]' \ // 'This is supported on Unix only.' -// @matches - '//*[@class=" module-item"]//*[@class="stab portability"]' '\AUnix\Z' -// @matches - '//*[@class=" module-item"]//*[@class="stab portability"]' '\AUnix and ARM\Z' +// @matches - '//*[@class="module-item"]//*[@class="stab portability"]' '\AUnix\Z' +// @matches - '//*[@class="module-item"]//*[@class="stab portability"]' '\AUnix and ARM\Z' // @count - '//*[@class="stab portability"]' 3 #[doc(cfg(unix))] pub mod unix_only { @@ -52,7 +52,7 @@ pub mod unix_only { // the portability header is different on the module view versus the full view // @has doc_cfg/index.html -// @matches - '//*[@class=" module-item"]//*[@class="stab portability"]' '\Aavx\Z' +// @matches - '//*[@class="module-item"]//*[@class="stab portability"]' '\Aavx\Z' // @has doc_cfg/fn.uses_target_feature.html // @has - '//*[@id="main"]/*[@class="stability"]/*[@class="stab portability"]' \ diff --git a/src/test/rustdoc/short-docblock-codeblock.rs b/src/test/rustdoc/short-docblock-codeblock.rs new file mode 100644 index 0000000000000..060b349c25177 --- /dev/null +++ b/src/test/rustdoc/short-docblock-codeblock.rs @@ -0,0 +1,22 @@ +// 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 or the MIT license +// , 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="module-item"]//td[@class="docblock-short"]' "" +// @!has foo/index.html '//*[@id="module-item"]//td[@class="docblock-short"]' "Some text." +// @!has foo/index.html '//*[@id="module-item"]//td[@class="docblock-short"]' "let x = 12;" + +/// ``` +/// let x = 12; +/// ``` +/// +/// Some text. +pub fn foo() {}