Rollup merge of #102954 - GuillaumeGomez:cfg-hide-attr-checks, r=Manishearth
Add missing checks for `doc(cfg_hide(...))` Part of #43781. The `doc(cfg_hide(...))` attribute can only be used at the crate level and takes a list of attributes as argument. r? ```@Manishearth```
This commit is contained in:
commit
59e0af68ab
5 changed files with 81 additions and 0 deletions
|
@ -145,6 +145,9 @@ passes_doc_test_takes_list =
|
||||||
passes_doc_primitive =
|
passes_doc_primitive =
|
||||||
`doc(primitive)` should never have been stable
|
`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 =
|
passes_doc_test_unknown_any =
|
||||||
unknown `doc` attribute `{$path}`
|
unknown `doc` attribute `{$path}`
|
||||||
|
|
||||||
|
|
|
@ -934,6 +934,22 @@ impl CheckAttrVisitor<'_> {
|
||||||
is_valid
|
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.
|
/// Runs various checks on `#[doc]` attributes. Returns `true` if valid.
|
||||||
///
|
///
|
||||||
/// `specified_inline` should be initialized to `None` and kept for the scope
|
/// `specified_inline` should be initialized to `None` and kept for the scope
|
||||||
|
@ -987,6 +1003,13 @@ impl CheckAttrVisitor<'_> {
|
||||||
is_valid = false;
|
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
|
sym::inline | sym::no_inline
|
||||||
if !self.check_doc_inline(
|
if !self.check_doc_inline(
|
||||||
attr,
|
attr,
|
||||||
|
|
|
@ -271,6 +271,10 @@ pub struct DocTestUnknown {
|
||||||
#[diag(passes::doc_test_takes_list)]
|
#[diag(passes::doc_test_takes_list)]
|
||||||
pub struct DocTestTakesList;
|
pub struct DocTestTakesList;
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[diag(passes::doc_cfg_hide_takes_list)]
|
||||||
|
pub struct DocCfgHideTakesList;
|
||||||
|
|
||||||
#[derive(LintDiagnostic)]
|
#[derive(LintDiagnostic)]
|
||||||
#[diag(passes::doc_primitive)]
|
#[diag(passes::doc_primitive)]
|
||||||
pub struct DocPrimitive;
|
pub struct DocPrimitive;
|
||||||
|
|
11
src/test/rustdoc-ui/doc_cfg_hide.rs
Normal file
11
src/test/rustdoc-ui/doc_cfg_hide.rs
Normal file
|
@ -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
src/test/rustdoc-ui/doc_cfg_hide.stderr
Normal file
40
src/test/rustdoc-ui/doc_cfg_hide.stderr
Normal file
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue