Skip to content

#[doc(cfg(…))] doesn’t work properly with cross-crate re-exports. #88743

Open
@steffahn

Description

@steffahn

Hard to put in words the kind of mess that the situation currently seems to be…

Let’s just look at an example:

#![feature(doc_cfg)]

/// A module called `local_io`
pub mod local_io {}

#[doc(cfg(feature = "foo"))]
/// A module called `local_cfg_io`
pub mod local_cfg_io {}

pub mod m {
    #[doc(inline)]
    pub use std::io as io1;
    #[doc(no_inline)]
    pub use std::io as io2;
    #[doc(cfg(feature = "foo"), inline)]
    pub use std::io as io3;
    #[doc(cfg(feature = "foo"), no_inline)]
    pub use std::io as io4;

    #[doc(inline)]
    pub use crate::local_io as local_io1;
    #[doc(no_inline)]
    pub use crate::local_io as local_io2;
    #[doc(cfg(feature = "foo"), inline)]
    pub use crate::local_io as local_io3;
    #[doc(cfg(feature = "foo"), no_inline)]
    pub use crate::local_io as local_io4;

    #[doc(inline)]
    pub use crate::local_cfg_io as local_cfg_io1;
    #[doc(no_inline)]
    pub use crate::local_cfg_io as local_cfg_io2;
    #[doc(cfg(feature = "foo"), inline)]
    pub use crate::local_cfg_io as local_cfg_io3;
    #[doc(cfg(feature = "foo"), no_inline)]
    pub use crate::local_cfg_io as local_cfg_io4;
}

Resulting docs of module m:

Screenshot_20210908_152342

Bug description

As you can see above, the cfg(feature = "foo") is mostly ignored on the pub use items. Only external items with inline take that attribute into account.

Expected behavior

I would probably expect that the rendered cfg label on a re-export only depends on cfg(doc(…)) attributes on the pub use itself. For a no_inline item, this would mean that the label in the “Re-exports” list might differ from the label you see on the item itself once you click on it; maybe we want a more clear way to distinguish the cfg of the pub use from the cfg of the used item.


@rustbot label A-rustdoc-ui, F-doc_cfg, requires-nightly

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-cross-crate-reexportsArea: Documentation that has been re-exported from a different crateA-rustdoc-uiArea: Rustdoc UI (generated HTML)C-bugCategory: This is a bug.F-doc_cfg`#![feature(doc_cfg)]`T-rustdocRelevant to the rustdoc team, which will review and decide on the PR/issue.requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions