| The `self` keyword was used inside of an associated function without a "`self` |
| receiver" parameter. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0424 |
| struct Foo; |
| |
| impl Foo { |
| // `bar` is a method, because it has a receiver parameter. |
| fn bar(&self) {} |
| |
| // `foo` is not a method, because it has no receiver parameter. |
| fn foo() { |
| self.bar(); // error: `self` value is a keyword only available in |
| // methods with a `self` parameter |
| } |
| } |
| ``` |
| |
| The `self` keyword can only be used inside methods, which are associated |
| functions (functions defined inside of a `trait` or `impl` block) that have a |
| `self` receiver as its first parameter, like `self`, `&self`, `&mut self` or |
| `self: &mut Pin<Self>` (this last one is an example of an ["arbitrary `self` |
| type"](https://github.com/rust-lang/rust/issues/44874)). |
| |
| Check if the associated function's parameter list should have contained a `self` |
| receiver for it to be a method, and add it if so. Example: |
| |
| ``` |
| struct Foo; |
| |
| impl Foo { |
| fn bar(&self) {} |
| |
| fn foo(self) { // `foo` is now a method. |
| self.bar(); // ok! |
| } |
| } |
| ``` |