summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/tests/ui/unnecessary_box_returns.rs
blob: bcdaca33b64495e57fccba94050f88c68c7ae0bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#![warn(clippy::unnecessary_box_returns)]
//@no-rustfix
trait Bar {
    // lint
    fn baz(&self) -> Box<usize>;
    //~^ ERROR: boxed return of the sized type `usize`
}

pub struct Foo {}

impl Bar for Foo {
    // don't lint: this is a problem with the trait, not the implementation
    fn baz(&self) -> Box<usize> {
        Box::new(42)
    }
}

impl Foo {
    fn baz(&self) -> Box<usize> {
        //~^ ERROR: boxed return of the sized type `usize`
        // lint
        Box::new(13)
    }
}

// lint
fn bxed_usize() -> Box<usize> {
    //~^ ERROR: boxed return of the sized type `usize`
    Box::new(5)
}

// lint
fn _bxed_foo() -> Box<Foo> {
    //~^ ERROR: boxed return of the sized type `Foo`
    Box::new(Foo {})
}

// don't lint: this is exported
pub fn bxed_foo() -> Box<Foo> {
    Box::new(Foo {})
}

// don't lint: str is unsized
fn bxed_str() -> Box<str> {
    "Hello, world!".to_string().into_boxed_str()
}

// don't lint: function contains the word, "box"
fn boxed_usize() -> Box<usize> {
    Box::new(7)
}

// don't lint: this has an unspecified return type
fn default() {}

// don't lint: this doesn't return a Box
fn string() -> String {
    String::from("Hello, world")
}

struct Huge([u8; 500]);
struct HasHuge(Box<Huge>);

impl HasHuge {
    // don't lint: The size of `Huge` is very large
    fn into_huge(self) -> Box<Huge> {
        self.0
    }
}

fn main() {
    // don't lint: this is a closure
    let a = || -> Box<usize> { Box::new(5) };
}