Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions compiler/rustc_error_messages/locales/en-US/passes.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ passes_doc_test_takes_list =
passes_doc_primitive =
`doc(primitive)` should never have been stable

passes_doc_cfg_hide_takes_list =
`#[doc(cfg_hide(...)]` takes a list of attributes

passes_doc_test_unknown_any =
unknown `doc` attribute `{$path}`

Expand Down
23 changes: 23 additions & 0 deletions compiler/rustc_passes/src/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,22 @@ impl CheckAttrVisitor<'_> {
is_valid
}

/// Check that the `#![doc(cfg_hide(...))]` attribute only contains a list of attributes.
/// Returns `true` if valid.
fn check_doc_cfg_hide(&self, meta: &NestedMetaItem, hir_id: HirId) -> bool {
if meta.meta_item_list().is_some() {
true
} else {
self.tcx.emit_spanned_lint(
INVALID_DOC_ATTRIBUTES,
hir_id,
meta.span(),
errors::DocCfgHideTakesList,
);
false
}
}

/// Runs various checks on `#[doc]` attributes. Returns `true` if valid.
///
/// `specified_inline` should be initialized to `None` and kept for the scope
Expand Down Expand Up @@ -987,6 +1003,13 @@ impl CheckAttrVisitor<'_> {
is_valid = false;
}

sym::cfg_hide
if !self.check_attr_crate_level(attr, meta, hir_id)
|| !self.check_doc_cfg_hide(meta, hir_id) =>
{
is_valid = false;
}

sym::inline | sym::no_inline
if !self.check_doc_inline(
attr,
Expand Down
4 changes: 4 additions & 0 deletions compiler/rustc_passes/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,10 @@ pub struct DocTestUnknown {
#[diag(passes::doc_test_takes_list)]
pub struct DocTestTakesList;

#[derive(LintDiagnostic)]
#[diag(passes::doc_cfg_hide_takes_list)]
pub struct DocCfgHideTakesList;

#[derive(LintDiagnostic)]
#[diag(passes::doc_primitive)]
pub struct DocPrimitive;
Expand Down
11 changes: 11 additions & 0 deletions src/test/rustdoc-ui/doc_cfg_hide.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#![feature(doc_cfg_hide)]
#![deny(warnings)]

#![doc(cfg_hide = "test")] //~ ERROR
//~^ WARN
#![doc(cfg_hide)] //~ ERROR
//~^ WARN

#[doc(cfg_hide(doc))] //~ ERROR
//~^ WARN
pub fn foo() {}
40 changes: 40 additions & 0 deletions src/test/rustdoc-ui/doc_cfg_hide.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
error: this attribute can only be applied at the crate level
--> $DIR/doc_cfg_hide.rs:9:7
|
LL | #[doc(cfg_hide(doc))]
| ^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #82730 <https://github.com/rust-lang/rust/issues/82730>
= note: read <https://doc.rust-lang.org/nightly/rustdoc/the-doc-attribute.html#at-the-crate-level> for more information
note: the lint level is defined here
--> $DIR/doc_cfg_hide.rs:2:9
|
LL | #![deny(warnings)]
| ^^^^^^^^
= note: `#[deny(invalid_doc_attributes)]` implied by `#[deny(warnings)]`
help: to apply to the crate, use an inner attribute
|
LL | #![doc(cfg_hide(doc))]
| ~~~~~~~~~~~~~~~~~~~~~~

error: `#[doc(cfg_hide(...)]` takes a list of attributes
--> $DIR/doc_cfg_hide.rs:4:8
|
LL | #![doc(cfg_hide = "test")]
| ^^^^^^^^^^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #82730 <https://github.com/rust-lang/rust/issues/82730>

error: `#[doc(cfg_hide(...)]` takes a list of attributes
--> $DIR/doc_cfg_hide.rs:6:8
|
LL | #![doc(cfg_hide)]
| ^^^^^^^^
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #82730 <https://github.com/rust-lang/rust/issues/82730>

error: aborting due to 3 previous errors