about summary refs log tree commit diff
path: root/compiler/rustc_passes
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_passes')
-rw-r--r--compiler/rustc_passes/messages.ftl2
-rw-r--r--compiler/rustc_passes/src/check_attr.rs23
2 files changed, 23 insertions, 2 deletions
diff --git a/compiler/rustc_passes/messages.ftl b/compiler/rustc_passes/messages.ftl
index a9a0f6d8b51..a5ff169e638 100644
--- a/compiler/rustc_passes/messages.ftl
+++ b/compiler/rustc_passes/messages.ftl
@@ -150,7 +150,7 @@ passes_doc_auto_cfg_hide_show_expects_list =
     `#![doc(auto_cfg({$attr_name}(...)))]` expects a list of items
 
 passes_doc_auto_cfg_hide_show_unexpected_item =
-    `#![doc(auto_cfg({$attr_name}(...)))]` only accepts identifiers or key/values items
+    `#![doc(auto_cfg({$attr_name}(...)))]` only accepts identifiers or key/value items
 
 passes_doc_auto_cfg_wrong_literal =
     `expected boolean for #[doc(auto_cfg = ...)]`
diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs
index c521467b556..88b49c781e7 100644
--- a/compiler/rustc_passes/src/check_attr.rs
+++ b/compiler/rustc_passes/src/check_attr.rs
@@ -1176,7 +1176,15 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
             }
             MetaItemKind::List(list) => {
                 for item in list {
-                    let Some(attr_name) = item.name() else { continue };
+                    let Some(attr_name) = item.name() else {
+                        self.tcx.emit_node_span_lint(
+                            INVALID_DOC_ATTRIBUTES,
+                            hir_id,
+                            meta.span,
+                            errors::DocAutoCfgExpectsHideOrShow,
+                        );
+                        continue;
+                    };
                     if attr_name != sym::hide && attr_name != sym::show {
                         self.tcx.emit_node_span_lint(
                             INVALID_DOC_ATTRIBUTES,
@@ -1195,6 +1203,19 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
                                         attr_name: attr_name.as_str(),
                                     },
                                 );
+                            } else if match item {
+                                MetaItemInner::Lit(_) => true,
+                                // We already checked above that it's not a list.
+                                MetaItemInner::MetaItem(meta) => meta.path.segments.len() != 1,
+                            } {
+                                self.tcx.emit_node_span_lint(
+                                    INVALID_DOC_ATTRIBUTES,
+                                    hir_id,
+                                    item.span(),
+                                    errors::DocAutoCfgHideShowUnexpectedItem {
+                                        attr_name: attr_name.as_str(),
+                                    },
+                                );
                             }
                         }
                     } else {