### What it does
Checks for `a = a op b` or `a = b commutative_op a`
patterns.

### Why is this bad?
These can be written as the shorter `a op= b`.

### Known problems
While forbidden by the spec, `OpAssign` traits may have
implementations that differ from the regular `Op` impl.

### Example
```
let mut a = 5;
let b = 0;
// ...

a = a + b;
```

Use instead:
```
let mut a = 5;
let b = 0;
// ...

a += b;
```