From 1bd6b98220a7d161288f04a03111ca77b0a4845d Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 15 Feb 2020 15:29:45 +0300 Subject: [PATCH] Emit some additional `unused_doc_comments` lints outside of the main pass --- src/librustc_expand/expand.rs | 5 +++++ src/librustc_lint/builtin.rs | 17 ++++++++++------- src/librustc_session/lint/builtin.rs | 8 ++++++++ src/test/ui/useless-comment.rs | 4 ++-- src/test/ui/useless-comment.stderr | 26 +++++++++++++++++++------- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/librustc_expand/expand.rs b/src/librustc_expand/expand.rs index 371d1f744dd2..3c720271e4bc 100644 --- a/src/librustc_expand/expand.rs +++ b/src/librustc_expand/expand.rs @@ -14,6 +14,7 @@ use rustc_parse::configure; use rustc_parse::parser::Parser; use rustc_parse::validate_attr; use rustc_parse::DirectoryOwnership; +use rustc_session::lint::builtin::UNUSED_DOC_COMMENTS; use rustc_session::parse::{feature_err, ParseSess}; use rustc_span::source_map::respan; use rustc_span::symbol::{sym, Symbol}; @@ -1090,6 +1091,10 @@ impl<'a, 'b> InvocationCollector<'a, 'b> { .note("this may become a hard error in a future release") .emit(); } + + if attr.doc_str().is_some() { + self.cx.parse_sess.buffer_lint(&UNUSED_DOC_COMMENTS, attr.span, ast::CRATE_NODE_ID, "yep, it's unused"); + } } } } diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index 93fca43d67c1..c0eee7e05c80 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -738,15 +738,18 @@ impl EarlyLintPass for DeprecatedAttr { } } -declare_lint! { - pub UNUSED_DOC_COMMENTS, - Warn, - "detects doc comments that aren't used by rustdoc" +trait UnusedDocCommentExt { + fn warn_if_doc( + &self, + cx: &EarlyContext<'_>, + node_span: Span, + node_kind: &str, + is_macro_expansion: bool, + attrs: &[ast::Attribute], + ); } -declare_lint_pass!(UnusedDocComment => [UNUSED_DOC_COMMENTS]); - -impl UnusedDocComment { +impl UnusedDocCommentExt for UnusedDocComment { fn warn_if_doc( &self, cx: &EarlyContext<'_>, diff --git a/src/librustc_session/lint/builtin.rs b/src/librustc_session/lint/builtin.rs index 5a360b40d61b..5e3367f86965 100644 --- a/src/librustc_session/lint/builtin.rs +++ b/src/librustc_session/lint/builtin.rs @@ -557,3 +557,11 @@ declare_lint_pass! { INLINE_NO_SANITIZE, ] } + +declare_lint! { + pub UNUSED_DOC_COMMENTS, + Warn, + "detects doc comments that aren't used by rustdoc" +} + +declare_lint_pass!(UnusedDocComment => [UNUSED_DOC_COMMENTS]); diff --git a/src/test/ui/useless-comment.rs b/src/test/ui/useless-comment.rs index f19c97e0102b..d13db2f8f78b 100644 --- a/src/test/ui/useless-comment.rs +++ b/src/test/ui/useless-comment.rs @@ -6,7 +6,7 @@ macro_rules! mac { () => {} } -/// foo //FIXME ERROR unused doc comment +/// foo //~ ERROR yep, it's unused mac!(); fn foo() { @@ -29,7 +29,7 @@ fn foo() { #[doc = "bar"] //~ ERROR unused doc comment 3; - /// bar //FIXME ERROR unused doc comment + /// bar //~ ERROR yep, it's unused mac!(); let x = /** comment */ 47; //~ ERROR unused doc comment diff --git a/src/test/ui/useless-comment.stderr b/src/test/ui/useless-comment.stderr index beb2a09f10e8..76b37cfec71a 100644 --- a/src/test/ui/useless-comment.stderr +++ b/src/test/ui/useless-comment.stderr @@ -1,3 +1,21 @@ +error: yep, it's unused + --> $DIR/useless-comment.rs:9:1 + | +LL | /// foo + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/useless-comment.rs:3:9 + | +LL | #![deny(unused_doc_comments)] + | ^^^^^^^^^^^^^^^^^^^ + +error: yep, it's unused + --> $DIR/useless-comment.rs:32:5 + | +LL | /// bar + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + error: unused doc comment --> $DIR/useless-comment.rs:13:5 | @@ -5,12 +23,6 @@ LL | /// a | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ LL | let x = 12; | ----------- rustdoc does not generate documentation for statements - | -note: the lint level is defined here - --> $DIR/useless-comment.rs:3:9 - | -LL | #![deny(unused_doc_comments)] - | ^^^^^^^^^^^^^^^^^^^ error: unused doc comment --> $DIR/useless-comment.rs:16:5 @@ -75,5 +87,5 @@ LL | | LL | | } | |_____- rustdoc does not generate documentation for expressions -error: aborting due to 8 previous errors +error: aborting due to 10 previous errors