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
};
}
}
+ 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,
})
}
- /// 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) {
} 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) {
+++ /dev/null
-#![feature(doc_alias)]
-
-#[doc(alias = "foo")] // ok!
-pub struct Bar;
-
-#[doc(alias)] //~ ERROR
-#[doc(alias = 0)] //~ ERROR
-#[doc(alias("bar"))] //~ ERROR
-pub struct Foo;
+++ /dev/null
-error: doc alias attribute expects a string: #[doc(alias = "0")]
- --> $DIR/check-doc-alias-attr.rs:6:7
- |
-LL | #[doc(alias)]
- | ^^^^^
-
-error: doc alias attribute expects a string: #[doc(alias = "0")]
- --> $DIR/check-doc-alias-attr.rs:7:7
- |
-LL | #[doc(alias = 0)]
- | ^^^^^^^^^
-
-error: doc alias attribute expects a string: #[doc(alias = "0")]
- --> $DIR/check-doc-alias-attr.rs:8:7
- |
-LL | #[doc(alias("bar"))]
- | ^^^^^^^^^^^^
-
-error: aborting due to 3 previous errors
-
--- /dev/null
+#![crate_type = "lib"]
+#![feature(doc_alias)]
+
+#[doc(alias = "foo")] // ok!
+pub struct Bar;
+
+#[doc(alias)] //~ ERROR
+#[doc(alias = 0)] //~ ERROR
+#[doc(alias("bar"))] //~ ERROR
+pub struct Foo;
--- /dev/null
+error: doc alias attribute expects a string: #[doc(alias = "0")]
+ --> $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:8:7
+ |
+LL | #[doc(alias = 0)]
+ | ^^^^^^^^^
+
+error: doc alias attribute expects a string: #[doc(alias = "0")]
+ --> $DIR/check-doc-alias-attr.rs:9:7
+ |
+LL | #[doc(alias("bar"))]
+ | ^^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+