summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/new_ret_no_self.txt
blob: 291bad24a643b13f1f4e09b58d35f999a7bcce7d (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
### What it does
Checks for `new` not returning a type that contains `Self`.

### Why is this bad?
As a convention, `new` methods are used to make a new
instance of a type.

### Example
In an impl block:
```
impl Foo {
    fn new() -> NotAFoo {
    }
}
```

```
struct Bar(Foo);
impl Foo {
    // Bad. The type name must contain `Self`
    fn new() -> Bar {
    }
}
```

```
impl Foo {
    // Good. Return type contains `Self`
    fn new() -> Result<Foo, FooError> {
    }
}
```

Or in a trait definition:
```
pub trait Trait {
    // Bad. The type name must contain `Self`
    fn new();
}
```

```
pub trait Trait {
    // Good. Return type contains `Self`
    fn new() -> Self;
}
```