Rollup merge of #83816 - JohnTitor:unused-doc-comments-on-macros, r=varkor
Trigger `unused_doc_comments` on macros at once Fixes #83768
This commit is contained in:
commit
4d5bb1ca22
@ -1067,13 +1067,23 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
|
|||||||
// since they will not be detected after macro expansion.
|
// since they will not be detected after macro expansion.
|
||||||
fn check_attributes(&mut self, attrs: &[ast::Attribute]) {
|
fn check_attributes(&mut self, attrs: &[ast::Attribute]) {
|
||||||
let features = self.cx.ecfg.features.unwrap();
|
let features = self.cx.ecfg.features.unwrap();
|
||||||
for attr in attrs.iter() {
|
let mut attrs = attrs.iter().peekable();
|
||||||
|
let mut span: Option<Span> = None;
|
||||||
|
while let Some(attr) = attrs.next() {
|
||||||
rustc_ast_passes::feature_gate::check_attribute(attr, self.cx.sess, features);
|
rustc_ast_passes::feature_gate::check_attribute(attr, self.cx.sess, features);
|
||||||
validate_attr::check_meta(&self.cx.sess.parse_sess, attr);
|
validate_attr::check_meta(&self.cx.sess.parse_sess, attr);
|
||||||
|
|
||||||
|
let current_span = if let Some(sp) = span { sp.to(attr.span) } else { attr.span };
|
||||||
|
span = Some(current_span);
|
||||||
|
|
||||||
|
if attrs.peek().map_or(false, |next_attr| next_attr.doc_str().is_some()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if attr.doc_str().is_some() {
|
if attr.doc_str().is_some() {
|
||||||
self.cx.sess.parse_sess.buffer_lint_with_diagnostic(
|
self.cx.sess.parse_sess.buffer_lint_with_diagnostic(
|
||||||
&UNUSED_DOC_COMMENTS,
|
&UNUSED_DOC_COMMENTS,
|
||||||
attr.span,
|
current_span,
|
||||||
ast::CRATE_NODE_ID,
|
ast::CRATE_NODE_ID,
|
||||||
"unused doc comment",
|
"unused doc comment",
|
||||||
BuiltinLintDiagnostics::UnusedDocComment(attr.span),
|
BuiltinLintDiagnostics::UnusedDocComment(attr.span),
|
||||||
|
@ -989,7 +989,7 @@ fn warn_if_doc(cx: &EarlyContext<'_>, node_span: Span, node_kind: &str, attrs: &
|
|||||||
Some(sugared_span.map_or(attr.span, |span| span.with_hi(attr.span.hi())));
|
Some(sugared_span.map_or(attr.span, |span| span.with_hi(attr.span.hi())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if attrs.peek().map(|next_attr| next_attr.is_doc_comment()).unwrap_or_default() {
|
if attrs.peek().map_or(false, |next_attr| next_attr.is_doc_comment()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
17
src/test/ui/unused/unused-doc-comments-for-macros.rs
Normal file
17
src/test/ui/unused/unused-doc-comments-for-macros.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#![deny(unused_doc_comments)]
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
|
|
||||||
|
macro_rules! foo { () => {}; }
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
/// line1 //~ ERROR: unused doc comment
|
||||||
|
/// line2
|
||||||
|
/// line3
|
||||||
|
foo!();
|
||||||
|
|
||||||
|
// Ensure we still detect another doc-comment block.
|
||||||
|
/// line1 //~ ERROR: unused doc comment
|
||||||
|
/// line2
|
||||||
|
/// line3
|
||||||
|
foo!();
|
||||||
|
}
|
31
src/test/ui/unused/unused-doc-comments-for-macros.stderr
Normal file
31
src/test/ui/unused/unused-doc-comments-for-macros.stderr
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
error: unused doc comment
|
||||||
|
--> $DIR/unused-doc-comments-for-macros.rs:7:5
|
||||||
|
|
|
||||||
|
LL | / /// line1
|
||||||
|
LL | | /// line2
|
||||||
|
LL | | /// line3
|
||||||
|
| |_____--------^
|
||||||
|
| |
|
||||||
|
| rustdoc does not generate documentation for macro invocations
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/unused-doc-comments-for-macros.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(unused_doc_comments)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
|
= help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
|
||||||
|
|
||||||
|
error: unused doc comment
|
||||||
|
--> $DIR/unused-doc-comments-for-macros.rs:13:5
|
||||||
|
|
|
||||||
|
LL | / /// line1
|
||||||
|
LL | | /// line2
|
||||||
|
LL | | /// line3
|
||||||
|
| |_____--------^
|
||||||
|
| |
|
||||||
|
| rustdoc does not generate documentation for macro invocations
|
||||||
|
|
|
||||||
|
= help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user