Skip to content

Commit

Permalink
add test for closures
Browse files Browse the repository at this point in the history
  • Loading branch information
Centri3 committed Jun 16, 2023
1 parent e7cfa0c commit 77d1cc5
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 20 deletions.
8 changes: 4 additions & 4 deletions clippy_lints/src/single_call_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,14 +88,14 @@ impl<'tcx> LateLintPass<'tcx> for SingleCallFn {
cx.tcx.hir().visit_all_item_likes_in_crate(&mut v);

for usage in self.def_id_to_usage.values() {
let fn_span = usage.0;
if let [usage] = *usage.1 {
let single_call_fn_span = usage.0;
if let [caller_span] = *usage.1 {
span_lint_and_help(
cx,
SINGLE_CALL_FN,
fn_span,
single_call_fn_span,
"this function is only used once",
Some(usage),
Some(caller_span),
"used here",
);
}
Expand Down
2 changes: 1 addition & 1 deletion clippy_lints/src/utils/conf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ define_Conf! {
/// arithmetic-side-effects-allowed-unary = ["SomeType", "AnotherType"]
/// ```
(arithmetic_side_effects_allowed_unary: rustc_data_structures::fx::FxHashSet<String> = <_>::default()),
/// Lint: ENUM_VARIANT_NAMES, LARGE_TYPES_PASSED_BY_VALUE, TRIVIALLY_COPY_PASS_BY_REF, UNNECESSARY_WRAPS, UNUSED_SELF, UPPER_CASE_ACRONYMS, WRONG_SELF_CONVENTION, BOX_COLLECTION, REDUNDANT_ALLOCATION, RC_BUFFER, VEC_BOX, OPTION_OPTION, LINKEDLIST, RC_MUTEX, UNNECESSARY_BOX_RETURNS.
/// Lint: ENUM_VARIANT_NAMES, LARGE_TYPES_PASSED_BY_VALUE, TRIVIALLY_COPY_PASS_BY_REF, UNNECESSARY_WRAPS, UNUSED_SELF, UPPER_CASE_ACRONYMS, WRONG_SELF_CONVENTION, BOX_COLLECTION, REDUNDANT_ALLOCATION, RC_BUFFER, VEC_BOX, OPTION_OPTION, LINKEDLIST, RC_MUTEX, UNNECESSARY_BOX_RETURNS, SINGLE_CALL_FN.
///
/// Suppress lints whenever the suggested change would cause breakage for other crates.
(avoid_breaking_exported_api: bool = true),
Expand Down
19 changes: 18 additions & 1 deletion tests/ui/single_call_fn.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
//@aux-build:proc_macros.rs
#![allow(unused)]
#![allow(clippy::redundant_closure_call, unused)]
#![warn(clippy::single_call_fn)]
#![no_main]

Expand All @@ -9,6 +9,23 @@ extern crate proc_macros;
// Do not lint since it's public
pub fn f() {}

fn i() {}
fn j() {}

fn h() {
// Linted
let a = i;
// Do not lint closures
let a = (|| {
// Not linted
a();
// Imo, it's reasonable to lint this as the function is still only being used once. Just in
// a closure.
j();
});
a();
}

fn g() {
f();
}
Expand Down
52 changes: 38 additions & 14 deletions tests/ui/single_call_fn.stderr
Original file line number Diff line number Diff line change
@@ -1,31 +1,55 @@
error: this function is only used once
--> $DIR/single_call_fn.rs:26:1
--> $DIR/single_call_fn.rs:33:1
|
LL | / fn c() {
LL | | println!("really");
LL | | println!("long");
LL | | println!("function...");
LL | | }
| |_^
|
help: used here
--> $DIR/single_call_fn.rs:40:5
|
LL | c();
| ^
= note: `-D clippy::single-call-fn` implied by `-D warnings`

error: this function is only used once
--> $DIR/single_call_fn.rs:12:1
|
LL | fn i() {}
| ^^^^^^^^^
|
help: used here
--> $DIR/single_call_fn.rs:17:13
|
LL | let a = i;
| ^

error: this function is only used once
--> $DIR/single_call_fn.rs:43:1
|
LL | fn a() {}
| ^^^^^^^^^
|
help: used here
--> $DIR/single_call_fn.rs:29:5
--> $DIR/single_call_fn.rs:46:5
|
LL | a();
| ^
= note: `-D clippy::single-call-fn` implied by `-D warnings`

error: this function is only used once
--> $DIR/single_call_fn.rs:16:1
--> $DIR/single_call_fn.rs:13:1
|
LL | / fn c() {
LL | | println!("really");
LL | | println!("long");
LL | | println!("function...");
LL | | }
| |_^
LL | fn j() {}
| ^^^^^^^^^
|
help: used here
--> $DIR/single_call_fn.rs:23:5
--> $DIR/single_call_fn.rs:24:9
|
LL | c();
| ^
LL | j();
| ^

error: aborting due to 2 previous errors
error: aborting due to 4 previous errors

0 comments on commit 77d1cc5

Please sign in to comment.