]> git.lizzy.rs Git - rust.git/blob - tests/ui/only_used_in_recursion.rs
add only_used_in_recursion lint
[rust.git] / tests / ui / only_used_in_recursion.rs
1 #![warn(clippy::only_used_in_recursion)]
2
3 fn simple(a: usize, b: usize) -> usize {
4     if a == 0 { 1 } else { simple(a - 1, b) }
5 }
6
7 fn with_calc(a: usize, b: isize) -> usize {
8     if a == 0 { 1 } else { with_calc(a - 1, -b + 1) }
9 }
10
11 fn tuple((a, b): (usize, usize)) -> usize {
12     if a == 0 { 1 } else { tuple((a - 1, b + 1)) }
13 }
14
15 fn let_tuple(a: usize, b: usize) -> usize {
16     let (c, d) = (a, b);
17     if c == 0 { 1 } else { let_tuple(c - 1, d + 1) }
18 }
19
20 fn array([a, b]: [usize; 2]) -> usize {
21     if a == 0 { 1 } else { array([a - 1, b + 1]) }
22 }
23
24 fn index(a: usize, mut b: &[usize], c: usize) -> usize {
25     if a == 0 { 1 } else { index(a - 1, b, c + b[0]) }
26 }
27
28 fn break_(a: usize, mut b: usize, mut c: usize) -> usize {
29     let c = loop {
30         b += 1;
31         c += 1;
32         if c == 10 {
33             break b;
34         }
35     };
36
37     if a == 0 { 1 } else { break_(a - 1, c, c) }
38 }
39
40 // this has a side effect
41 fn mut_ref(a: usize, b: &mut usize) -> usize {
42     *b = 1;
43     if a == 0 { 1 } else { mut_ref(a - 1, b) }
44 }
45
46 fn mut_ref2(a: usize, b: &mut usize) -> usize {
47     let mut c = *b;
48     if a == 0 { 1 } else { mut_ref2(a - 1, &mut c) }
49 }
50
51 fn not_primitive(a: usize, b: String) -> usize {
52     if a == 0 { 1 } else { not_primitive(a - 1, b) }
53 }
54
55 // this doesn't have a side effect,
56 // but `String` is not primitive.
57 fn not_primitive_op(a: usize, b: String, c: &str) -> usize {
58     if a == 1 { 1 } else { not_primitive_op(a, b + c, c) }
59 }
60
61 struct A;
62
63 impl A {
64     fn method(&self, a: usize, b: usize) -> usize {
65         if a == 0 { 1 } else { self.method(a - 1, b + 1) }
66     }
67 }
68
69 fn ignore(a: usize, _: usize) -> usize {
70     if a == 1 { 1 } else { ignore(a - 1, 0) }
71 }
72
73 fn main() {}