Skip to content

Commit e38844a

Browse files
authored
Rollup merge of #90502 - GuillaumeGomez:split-doc-cfg-feature, r=jyn514
Split doc_cfg and doc_auto_cfg features Part of #90497. With this feature, `doc_cfg` won't pick up items automatically anymore. cc `@Mark-Simulacrum` r? `@jyn514`
2 parents 673aafe + d7afbf6 commit e38844a

File tree

8 files changed

+29
-5
lines changed

8 files changed

+29
-5
lines changed

compiler/rustc_feature/src/active.rs

+3
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,9 @@ declare_features! (
689689
/// not changed from prior instances of the same struct (RFC #2528)
690690
(incomplete, type_changing_struct_update, "1.58.0", Some(86555), None),
691691

692+
/// Tells rustdoc to automatically generate `#[doc(cfg(...))]`.
693+
(active, doc_auto_cfg, "1.58.0", Some(43781), None),
694+
692695
// -------------------------------------------------------------------------
693696
// feature-group-end: actual feature gates
694697
// -------------------------------------------------------------------------

compiler/rustc_span/src/symbol.rs

+1
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ symbols! {
549549
div_assign,
550550
doc,
551551
doc_alias,
552+
doc_auto_cfg,
552553
doc_cfg,
553554
doc_cfg_hide,
554555
doc_keyword,

src/librustdoc/clean/types.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,7 @@ impl AttributesExt for [ast::Attribute] {
789789
fn cfg(&self, tcx: TyCtxt<'_>, hidden_cfg: &FxHashSet<Cfg>) -> Option<Arc<Cfg>> {
790790
let sess = tcx.sess;
791791
let doc_cfg_active = tcx.features().doc_cfg;
792+
let doc_auto_cfg_active = tcx.features().doc_auto_cfg;
792793

793794
fn single<T: IntoIterator>(it: T) -> Option<T::Item> {
794795
let mut iter = it.into_iter();
@@ -799,24 +800,26 @@ impl AttributesExt for [ast::Attribute] {
799800
Some(item)
800801
}
801802

802-
let mut cfg = if doc_cfg_active {
803+
let mut cfg = if doc_cfg_active || doc_auto_cfg_active {
803804
let mut doc_cfg = self
804805
.iter()
805806
.filter(|attr| attr.has_name(sym::doc))
806807
.flat_map(|attr| attr.meta_item_list().unwrap_or_else(Vec::new))
807808
.filter(|attr| attr.has_name(sym::cfg))
808809
.peekable();
809-
if doc_cfg.peek().is_some() {
810+
if doc_cfg.peek().is_some() && doc_cfg_active {
810811
doc_cfg
811812
.filter_map(|attr| Cfg::parse(attr.meta_item()?).ok())
812813
.fold(Cfg::True, |cfg, new_cfg| cfg & new_cfg)
813-
} else {
814+
} else if doc_auto_cfg_active {
814815
self.iter()
815816
.filter(|attr| attr.has_name(sym::cfg))
816817
.filter_map(|attr| single(attr.meta_item_list()?))
817818
.filter_map(|attr| Cfg::parse(attr.meta_item()?).ok())
818819
.filter(|cfg| !hidden_cfg.contains(cfg))
819820
.fold(Cfg::True, |cfg, new_cfg| cfg & new_cfg)
821+
} else {
822+
Cfg::True
820823
}
821824
} else {
822825
Cfg::True

src/test/rustdoc/doc-auto-cfg.rs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#![feature(doc_auto_cfg)]
2+
3+
#![crate_name = "foo"]
4+
5+
// @has foo/fn.foo.html
6+
// @has - '//*[@class="item-info"]/*[@class="stab portability"]' 'non-test'
7+
#[cfg(not(test))]
8+
pub fn foo() {}

src/test/rustdoc/doc-cfg-hide.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![crate_name = "oud"]
2-
#![feature(doc_cfg, doc_cfg_hide)]
2+
#![feature(doc_auto_cfg, doc_cfg, doc_cfg_hide)]
33

44
#![doc(cfg_hide(feature = "solecism"))]
55

src/test/rustdoc/doc-cfg-implicit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![crate_name = "funambulism"]
2-
#![feature(doc_cfg)]
2+
#![feature(doc_auto_cfg, doc_cfg)]
33

44
// @has 'funambulism/struct.Disorbed.html'
55
// @count - '//*[@class="stab portability"]' 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#![feature(doc_cfg)]
2+
3+
#![crate_name = "foo"]
4+
5+
// @has foo/fn.foo.html
6+
// @count - '//*[@class="item-info"]/*[@class="stab portability"]' 0
7+
#[cfg(not(test))]
8+
pub fn foo() {}

src/tools/tidy/src/features.rs

+1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ pub fn check(
9797
&src_path.join("test/ui"),
9898
&src_path.join("test/ui-fulldeps"),
9999
&src_path.join("test/rustdoc-ui"),
100+
&src_path.join("test/rustdoc"),
100101
],
101102
&mut |path| super::filter_dirs(path),
102103
&mut |entry, contents| {

0 commit comments

Comments
 (0)