diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2020-06-23 13:09:59 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-23 13:09:59 -0700 |
| commit | 7d2fba1bd20dba01e0db55e4ee04a45ddf633547 (patch) | |
| tree | 39a88dcffac6715c6e3ed802a0e491dbf8205b54 | |
| parent | 1557fb031b272b4c5bfcc7de5df7eddc7b36a584 (diff) | |
| parent | 2d6267a7a8ae0399f2d363b6ac667fee0b53a1a0 (diff) | |
| download | rust-7d2fba1bd20dba01e0db55e4ee04a45ddf633547.tar.gz rust-7d2fba1bd20dba01e0db55e4ee04a45ddf633547.zip | |
Rollup merge of #72780 - GuillaumeGomez:enforce-doc-alias-check, r=ollie27
Enforce doc alias check Part of #50146. r? @ollie27
| -rw-r--r-- | src/librustdoc/clean/types.rs | 28 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/check-doc-alias-attr.rs | 9 | ||||
| -rw-r--r-- | src/test/rustdoc-ui/check-doc-alias-attr.stderr | 20 |
3 files changed, 57 insertions, 0 deletions
diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 5c76c840b1d..6dec016cc2e 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -486,6 +486,33 @@ 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) { @@ -529,6 +556,7 @@ 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) { diff --git a/src/test/rustdoc-ui/check-doc-alias-attr.rs b/src/test/rustdoc-ui/check-doc-alias-attr.rs new file mode 100644 index 00000000000..2f01099107d --- /dev/null +++ b/src/test/rustdoc-ui/check-doc-alias-attr.rs @@ -0,0 +1,9 @@ +#![feature(doc_alias)] + +#[doc(alias = "foo")] // ok! +pub struct Bar; + +#[doc(alias)] //~ ERROR +#[doc(alias = 0)] //~ ERROR +#[doc(alias("bar"))] //~ ERROR +pub struct Foo; diff --git a/src/test/rustdoc-ui/check-doc-alias-attr.stderr b/src/test/rustdoc-ui/check-doc-alias-attr.stderr new file mode 100644 index 00000000000..480acc821aa --- /dev/null +++ b/src/test/rustdoc-ui/check-doc-alias-attr.stderr @@ -0,0 +1,20 @@ +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 + |
