diff --git a/compiler/rustc_hir/src/attrs/data_structures.rs b/compiler/rustc_hir/src/attrs/data_structures.rs index b7f8be3ec88f4..1a29ec3df8189 100644 --- a/compiler/rustc_hir/src/attrs/data_structures.rs +++ b/compiler/rustc_hir/src/attrs/data_structures.rs @@ -549,6 +549,21 @@ pub struct DocAttribute { pub no_crate_inject: Option, } +impl DocAttribute { + /// Returns `true` if contains `doc(inline)` and doesn't contain `doc(no_inline)`. + pub fn is_inline(&self) -> bool { + let mut is_no_inline = false; + let mut is_inline = false; + for (inline, _) in &self.inline { + match inline { + DocInline::Inline => is_inline = true, + DocInline::NoInline => is_no_inline = true, + } + } + is_inline && !is_no_inline + } +} + /// Represents parsed *built-in* inert attributes. /// /// ## Overview diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs index 2069c06c3f774..300a611502d9c 100644 --- a/compiler/rustc_metadata/src/rmeta/encoder.rs +++ b/compiler/rustc_metadata/src/rmeta/encoder.rs @@ -880,7 +880,7 @@ fn analyze_attr(attr: &hir::Attribute, state: &mut AnalyzeAttrState<'_>) -> bool } else if let hir::Attribute::Parsed(AttributeKind::Doc(d)) = attr { // If this is a `doc` attribute that doesn't have anything except maybe `inline` (as in // `#[doc(inline)]`), then we can remove it. It won't be inlinable in downstream crates. - if d.inline.is_empty() { + if !d.is_inline() { should_encode = true; if d.hidden.is_some() { state.is_doc_hidden = true;