| //@revisions: edition2015 edition2021 | |
| //@[edition2015] edition:2015 | |
| //@[edition2021] edition:2021 | |
| #![warn(clippy::missing_assert_message)] | |
| macro_rules! bar { | |
| ($( $x:expr ),*) => { | |
| foo() | |
| }; | |
| } | |
| // Should trigger warning | |
| fn asserts_without_message() { | |
| assert!(foo()); | |
| //~^ ERROR: assert without any message | |
| assert_eq!(foo(), foo()); | |
| //~^ ERROR: assert without any message | |
| assert_ne!(foo(), foo()); | |
| //~^ ERROR: assert without any message | |
| debug_assert!(foo()); | |
| //~^ ERROR: assert without any message | |
| debug_assert_eq!(foo(), foo()); | |
| //~^ ERROR: assert without any message | |
| debug_assert_ne!(foo(), foo()); | |
| //~^ ERROR: assert without any message | |
| } | |
| // Should trigger warning | |
| fn asserts_without_message_but_with_macro_calls() { | |
| assert!(bar!(true)); | |
| //~^ ERROR: assert without any message | |
| assert!(bar!(true, false)); | |
| //~^ ERROR: assert without any message | |
| assert_eq!(bar!(true), foo()); | |
| //~^ ERROR: assert without any message | |
| assert_ne!(bar!(true, true), bar!(true)); | |
| //~^ ERROR: assert without any message | |
| } | |
| // Should trigger warning | |
| fn asserts_with_trailing_commas() { | |
| assert!(foo(),); | |
| //~^ ERROR: assert without any message | |
| assert_eq!(foo(), foo(),); | |
| //~^ ERROR: assert without any message | |
| assert_ne!(foo(), foo(),); | |
| //~^ ERROR: assert without any message | |
| debug_assert!(foo(),); | |
| //~^ ERROR: assert without any message | |
| debug_assert_eq!(foo(), foo(),); | |
| //~^ ERROR: assert without any message | |
| debug_assert_ne!(foo(), foo(),); | |
| //~^ ERROR: assert without any message | |
| } | |
| // Should not trigger warning | |
| fn asserts_with_message_and_with_macro_calls() { | |
| assert!(bar!(true), "msg"); | |
| assert!(bar!(true, false), "msg"); | |
| assert_eq!(bar!(true), foo(), "msg"); | |
| assert_ne!(bar!(true, true), bar!(true), "msg"); | |
| } | |
| // Should not trigger warning | |
| fn asserts_with_message() { | |
| assert!(foo(), "msg"); | |
| assert_eq!(foo(), foo(), "msg"); | |
| assert_ne!(foo(), foo(), "msg"); | |
| debug_assert!(foo(), "msg"); | |
| debug_assert_eq!(foo(), foo(), "msg"); | |
| debug_assert_ne!(foo(), foo(), "msg"); | |
| } | |
| // Should not trigger warning | |
| #[test] | |
| fn asserts_without_message_but_inside_a_test_function() { | |
| assert!(foo()); | |
| assert_eq!(foo(), foo()); | |
| assert_ne!(foo(), foo()); | |
| debug_assert!(foo()); | |
| debug_assert_eq!(foo(), foo()); | |
| debug_assert_ne!(foo(), foo()); | |
| } | |
| fn foo() -> bool { | |
| true | |
| } | |
| // Should not trigger warning | |
| #[cfg(test)] | |
| mod tests { | |
| use super::foo; | |
| fn asserts_without_message_but_inside_a_test_module() { | |
| assert!(foo()); | |
| assert_eq!(foo(), foo()); | |
| assert_ne!(foo(), foo()); | |
| debug_assert!(foo()); | |
| debug_assert_eq!(foo(), foo()); | |
| debug_assert_ne!(foo(), foo()); | |
| } | |
| } |