Skip to content

Commit

Permalink
Rollup merge of rust-lang#74148 - GuillaumeGomez:doc-alias-check, r=M…
Browse files Browse the repository at this point in the history
…anishearth

Move #[doc(alias)] check in rustc

Part of rust-lang#73721.

r? @ollie27
  • Loading branch information
Manishearth committed Jul 16, 2020
2 parents e253f79 + b0884c0 commit 8a6ba1d
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 31 deletions.
30 changes: 30 additions & 0 deletions src/librustc_passes/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
Expand Down Expand Up @@ -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,
Expand Down
28 changes: 0 additions & 28 deletions src/librustdoc/clean/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![crate_type = "lib"]
#![feature(doc_alias)]

#[doc(alias = "foo")] // ok!
Expand Down
Original file line number Diff line number Diff line change
@@ -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"))]
| ^^^^^^^^^^^^
Expand Down

0 comments on commit 8a6ba1d

Please sign in to comment.