about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-03-29 15:04:27 +0000
committerbors <bors@rust-lang.org>2021-03-29 15:04:27 +0000
commit0e06b3c5f3e8ea001302558f350bbec114bc0ecb (patch)
tree2ad89b73d1183bc80070ae8e40f415e876c5e03c
parentc07103b4a2b8c88a2c405ede6386f821edad41fd (diff)
parent31afdfc12bbe1bd2681ac17bfb07134ffd3cf061 (diff)
downloadrust-0e06b3c5f3e8ea001302558f350bbec114bc0ecb.tar.gz
rust-0e06b3c5f3e8ea001302558f350bbec114bc0ecb.zip
Auto merge of #6996 - Y-Nak:missing_panics_doc, r=Manishearth
Allow missing panics doc if the panics occur only when debug-assertions is specified

fixes #6970

changelog: `missing_panics_doc`: Allow missing panics doc if the panics occur only when `debug-assertions` is specified.
-rw-r--r--clippy_lints/src/doc.rs6
-rw-r--r--tests/ui/missing_panics_doc.rs (renamed from tests/ui/doc_panics.rs)8
-rw-r--r--tests/ui/missing_panics_doc.stderr (renamed from tests/ui/doc_panics.stderr)20
3 files changed, 24 insertions, 10 deletions
diff --git a/clippy_lints/src/doc.rs b/clippy_lints/src/doc.rs
index 14338ac8faf..69800f9d331 100644
--- a/clippy_lints/src/doc.rs
+++ b/clippy_lints/src/doc.rs
@@ -715,6 +715,7 @@ impl<'a, 'tcx> Visitor<'tcx> for FindPanicUnwrap<'a, 'tcx> {
             if let Some(path_def_id) = path.res.opt_def_id();
             if match_panic_def_id(self.cx, path_def_id);
             if is_expn_of(expr.span, "unreachable").is_none();
+            if !is_expn_of_debug_assertions(expr.span);
             then {
                 self.panic_span = Some(expr.span);
             }
@@ -738,3 +739,8 @@ impl<'a, 'tcx> Visitor<'tcx> for FindPanicUnwrap<'a, 'tcx> {
         NestedVisitorMap::OnlyBodies(self.cx.tcx.hir())
     }
 }
+
+fn is_expn_of_debug_assertions(span: Span) -> bool {
+    const MACRO_NAMES: &[&str] = &["debug_assert", "debug_assert_eq", "debug_assert_ne"];
+    MACRO_NAMES.iter().any(|name| is_expn_of(span, name).is_some())
+}
diff --git a/tests/ui/doc_panics.rs b/tests/ui/missing_panics_doc.rs
index 17e72353f80..3fe35c75799 100644
--- a/tests/ui/doc_panics.rs
+++ b/tests/ui/missing_panics_doc.rs
@@ -112,3 +112,11 @@ fn inner_body_private(opt: Option<u32>) {
 pub fn unreachable() {
     unreachable!("This function panics")
 }
+
+/// #6970.
+/// This is okay because it is expansion of `debug_assert` family.
+pub fn debug_assertions() {
+    debug_assert!(false);
+    debug_assert_eq!(1, 2);
+    debug_assert_ne!(1, 2);
+}
diff --git a/tests/ui/doc_panics.stderr b/tests/ui/missing_panics_doc.stderr
index 2fa88a2f6ec..37da6bfd92d 100644
--- a/tests/ui/doc_panics.stderr
+++ b/tests/ui/missing_panics_doc.stderr
@@ -1,5 +1,5 @@
 error: docs for function which may panic missing `# Panics` section
-  --> $DIR/doc_panics.rs:7:1
+  --> $DIR/missing_panics_doc.rs:7:1
    |
 LL | / pub fn unwrap() {
 LL | |     let result = Err("Hi");
@@ -9,13 +9,13 @@ LL | | }
    |
    = note: `-D clippy::missing-panics-doc` implied by `-D warnings`
 note: first possible panic found here
-  --> $DIR/doc_panics.rs:9:5
+  --> $DIR/missing_panics_doc.rs:9:5
    |
 LL |     result.unwrap()
    |     ^^^^^^^^^^^^^^^
 
 error: docs for function which may panic missing `# Panics` section
-  --> $DIR/doc_panics.rs:13:1
+  --> $DIR/missing_panics_doc.rs:13:1
    |
 LL | / pub fn panic() {
 LL | |     panic!("This function panics")
@@ -23,14 +23,14 @@ LL | | }
    | |_^
    |
 note: first possible panic found here
-  --> $DIR/doc_panics.rs:14:5
+  --> $DIR/missing_panics_doc.rs:14:5
    |
 LL |     panic!("This function panics")
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error: docs for function which may panic missing `# Panics` section
-  --> $DIR/doc_panics.rs:18:1
+  --> $DIR/missing_panics_doc.rs:18:1
    |
 LL | / pub fn todo() {
 LL | |     todo!()
@@ -38,14 +38,14 @@ LL | | }
    | |_^
    |
 note: first possible panic found here
-  --> $DIR/doc_panics.rs:19:5
+  --> $DIR/missing_panics_doc.rs:19:5
    |
 LL |     todo!()
    |     ^^^^^^^
    = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error: docs for function which may panic missing `# Panics` section
-  --> $DIR/doc_panics.rs:23:1
+  --> $DIR/missing_panics_doc.rs:23:1
    |
 LL | / pub fn inner_body(opt: Option<u32>) {
 LL | |     opt.map(|x| {
@@ -57,14 +57,14 @@ LL | | }
    | |_^
    |
 note: first possible panic found here
-  --> $DIR/doc_panics.rs:26:13
+  --> $DIR/missing_panics_doc.rs:26:13
    |
 LL |             panic!()
    |             ^^^^^^^^
    = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
 
 error: docs for function which may panic missing `# Panics` section
-  --> $DIR/doc_panics.rs:32:1
+  --> $DIR/missing_panics_doc.rs:32:1
    |
 LL | / pub fn unreachable_and_panic() {
 LL | |     if true { unreachable!() } else { panic!() }
@@ -72,7 +72,7 @@ LL | | }
    | |_^
    |
 note: first possible panic found here
-  --> $DIR/doc_panics.rs:33:39
+  --> $DIR/missing_panics_doc.rs:33:39
    |
 LL |     if true { unreachable!() } else { panic!() }
    |                                       ^^^^^^^^