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.
This commit is contained in:
bors 2021-03-29 15:04:27 +00:00
commit 0e06b3c5f3
3 changed files with 24 additions and 10 deletions

View file

@ -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())
}

View file

@ -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);
}

View file

@ -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!() }
| ^^^^^^^^