parent
11c94a1977
commit
cb4553bdae
11 changed files with 109 additions and 2 deletions
|
|
@ -2157,11 +2157,26 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
|
|||
return Vec::new();
|
||||
}
|
||||
|
||||
let (doc_meta_item, please_inline) = self.attrs.lists(sym::doc).get_word_attr(sym::inline);
|
||||
let pub_underscore = self.vis.node.is_pub() && self.name == kw::Underscore;
|
||||
|
||||
if pub_underscore && please_inline {
|
||||
rustc_errors::struct_span_err!(
|
||||
cx.tcx.sess,
|
||||
doc_meta_item.unwrap().span(),
|
||||
E0780,
|
||||
"anonymous imports cannot be inlined"
|
||||
)
|
||||
.span_label(self.span, "anonymous import")
|
||||
.emit();
|
||||
}
|
||||
|
||||
// We consider inlining the documentation of `pub use` statements, but we
|
||||
// forcefully don't inline if this is not public or if the
|
||||
// #[doc(no_inline)] attribute is present.
|
||||
// Don't inline doc(hidden) imports so they can be stripped at a later stage.
|
||||
let mut denied = !self.vis.node.is_pub()
|
||||
|| pub_underscore
|
||||
|| self.attrs.iter().any(|a| {
|
||||
a.has_name(sym::doc)
|
||||
&& match a.meta_item_list() {
|
||||
|
|
@ -2174,7 +2189,6 @@ impl Clean<Vec<Item>> for doctree::Import<'_> {
|
|||
});
|
||||
// Also check whether imports were asked to be inlined, in case we're trying to re-export a
|
||||
// crate in Rust 2018+
|
||||
let please_inline = self.attrs.lists(sym::doc).has_word(sym::inline);
|
||||
let path = self.path.clean(cx);
|
||||
let inner = if self.glob {
|
||||
if !denied {
|
||||
|
|
|
|||
|
|
@ -431,12 +431,22 @@ impl AttributesExt for [ast::Attribute] {
|
|||
crate trait NestedAttributesExt {
|
||||
/// Returns `true` if the attribute list contains a specific `Word`
|
||||
fn has_word(self, word: Symbol) -> bool;
|
||||
fn get_word_attr(self, word: Symbol) -> (Option<ast::NestedMetaItem>, bool);
|
||||
}
|
||||
|
||||
impl<I: IntoIterator<Item = ast::NestedMetaItem>> NestedAttributesExt for I {
|
||||
impl<I: Iterator<Item = ast::NestedMetaItem> + IntoIterator<Item = ast::NestedMetaItem>>
|
||||
NestedAttributesExt for I
|
||||
{
|
||||
fn has_word(self, word: Symbol) -> bool {
|
||||
self.into_iter().any(|attr| attr.is_word() && attr.has_name(word))
|
||||
}
|
||||
|
||||
fn get_word_attr(mut self, word: Symbol) -> (Option<ast::NestedMetaItem>, bool) {
|
||||
match self.find(|attr| attr.is_word() && attr.has_name(word)) {
|
||||
Some(a) => (Some(a), true),
|
||||
None => (None, false),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A portion of documentation, extracted from a `#[doc]` attribute.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue