Rollup merge of #74148 - GuillaumeGomez:doc-alias-check, r=Manishearth
Move #[doc(alias)] check in rustc Part of #73721. r? @ollie27
This commit is contained in:
commit
61a3f6701b
4 changed files with 34 additions and 31 deletions
|
@ -70,6 +70,8 @@ impl CheckAttrVisitor<'tcx> {
|
|||
self.check_target_feature(attr, span, target)
|
||||
} else if attr.check_name(sym::track_caller) {
|
||||
self.check_track_caller(&attr.span, attrs, span, target)
|
||||
} else if attr.check_name(sym::doc) {
|
||||
self.check_doc_alias(attr)
|
||||
} else {
|
||||
true
|
||||
};
|
||||
|
@ -216,6 +218,34 @@ impl CheckAttrVisitor<'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
fn check_doc_alias(&self, attr: &Attribute) -> bool {
|
||||
if let Some(mi) = attr.meta() {
|
||||
if let Some(list) = mi.meta_item_list() {
|
||||
for meta in list {
|
||||
if meta.check_name(sym::alias) {
|
||||
if !meta.is_value_str()
|
||||
|| meta
|
||||
.value_str()
|
||||
.map(|s| s.to_string())
|
||||
.unwrap_or_else(String::new)
|
||||
.is_empty()
|
||||
{
|
||||
self.tcx
|
||||
.sess
|
||||
.struct_span_err(
|
||||
meta.span(),
|
||||
"doc alias attribute expects a string: #[doc(alias = \"0\")]",
|
||||
)
|
||||
.emit();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
/// Checks if the `#[repr]` attributes on `item` are valid.
|
||||
fn check_repr(
|
||||
&self,
|
||||
|
|
|
@ -486,33 +486,6 @@ impl Attributes {
|
|||
})
|
||||
}
|
||||
|
||||
/// Enforce the format of attributes inside `#[doc(...)]`.
|
||||
pub fn check_doc_attributes(
|
||||
diagnostic: &::rustc_errors::Handler,
|
||||
mi: &ast::MetaItem,
|
||||
) -> Option<(String, String)> {
|
||||
mi.meta_item_list().and_then(|list| {
|
||||
for meta in list {
|
||||
if meta.check_name(sym::alias) {
|
||||
if !meta.is_value_str()
|
||||
|| meta
|
||||
.value_str()
|
||||
.map(|s| s.to_string())
|
||||
.unwrap_or_else(String::new)
|
||||
.is_empty()
|
||||
{
|
||||
diagnostic.span_err(
|
||||
meta.span(),
|
||||
"doc alias attribute expects a string: #[doc(alias = \"0\")]",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
})
|
||||
}
|
||||
|
||||
pub fn has_doc_flag(&self, flag: Symbol) -> bool {
|
||||
for attr in &self.other_attrs {
|
||||
if !attr.check_name(sym::doc) {
|
||||
|
@ -556,7 +529,6 @@ impl Attributes {
|
|||
} else {
|
||||
if attr.check_name(sym::doc) {
|
||||
if let Some(mi) = attr.meta() {
|
||||
Attributes::check_doc_attributes(&diagnostic, &mi);
|
||||
if let Some(cfg_mi) = Attributes::extract_cfg(&mi) {
|
||||
// Extracted #[doc(cfg(...))]
|
||||
match Cfg::parse(cfg_mi) {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#![crate_type = "lib"]
|
||||
#![feature(doc_alias)]
|
||||
|
||||
#[doc(alias = "foo")] // ok!
|
|
@ -1,17 +1,17 @@
|
|||
error: doc alias attribute expects a string: #[doc(alias = "0")]
|
||||
--> $DIR/check-doc-alias-attr.rs:6:7
|
||||
--> $DIR/check-doc-alias-attr.rs:7:7
|
||||
|
|
||||
LL | #[doc(alias)]
|
||||
| ^^^^^
|
||||
|
||||
error: doc alias attribute expects a string: #[doc(alias = "0")]
|
||||
--> $DIR/check-doc-alias-attr.rs:7:7
|
||||
--> $DIR/check-doc-alias-attr.rs:8:7
|
||||
|
|
||||
LL | #[doc(alias = 0)]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: doc alias attribute expects a string: #[doc(alias = "0")]
|
||||
--> $DIR/check-doc-alias-attr.rs:8:7
|
||||
--> $DIR/check-doc-alias-attr.rs:9:7
|
||||
|
|
||||
LL | #[doc(alias("bar"))]
|
||||
| ^^^^^^^^^^^^
|
Loading…
Reference in a new issue