Skip to content

Commit 243661b

Browse files
committed
Make it clear that or_fun_call can be a false-positive
Also move it to nursery so that the false-positives can be dealt with. CC #8574
1 parent 4f1698d commit 243661b

File tree

2 files changed

+11
-13
lines changed

2 files changed

+11
-13
lines changed

clippy_lints/src/methods/mod.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -832,32 +832,30 @@ declare_clippy_lint! {
832832
/// etc. instead.
833833
///
834834
/// ### Why is this bad?
835-
/// The function will always be called and potentially
836-
/// allocate an object acting as the default.
835+
/// The function will always be called. This is only bad if it allocates or
836+
/// does some non-trivial amount of work.
837837
///
838838
/// ### Known problems
839-
/// If the function has side-effects, not calling it will
840-
/// change the semantic of the program, but you shouldn't rely on that anyway.
839+
/// If the function has side-effects, not calling it will change the
840+
/// semantic of the program, but you shouldn't rely on that.
841+
///
842+
/// The lint also cannot figure out whether the function you call is
843+
/// actually expensive to call or not.
841844
///
842845
/// ### Example
843846
/// ```rust
844847
/// # let foo = Some(String::new());
845-
/// foo.unwrap_or(String::new());
848+
/// foo.unwrap_or(String::from("empty"));
846849
/// ```
847850
///
848851
/// Use instead:
849852
/// ```rust
850853
/// # let foo = Some(String::new());
851-
/// foo.unwrap_or_else(String::new);
852-
///
853-
/// // or
854-
///
855-
/// # let foo = Some(String::new());
856-
/// foo.unwrap_or_default();
854+
/// foo.unwrap_or_else(|| String::from("empty"));
857855
/// ```
858856
#[clippy::version = "pre 1.29.0"]
859857
pub OR_FUN_CALL,
860-
perf,
858+
nursery,
861859
"using any `*or` method with a function call, which suggests `*or_else`"
862860
}
863861

tests/ui/unwrap_or.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![warn(clippy::all)]
1+
#![warn(clippy::all, clippy::or_fun_call)]
22

33
fn main() {
44
let s = Some(String::from("test string")).unwrap_or("Fail".to_string()).len();

0 commit comments

Comments
 (0)