I love the simplicity here, but I believe it's a little too simple. `if(a && b && c) 0;` will fail since the parent of one `LogicalExpression` will be the other `LogicalExpression`. You can probably change it to

```js
if(!(parent && (node === parent.test || parent.type === 'LogicalExpression')))
```

Also, I know we're not supposed to criticise the rules themselves, but come on. `if(a && b);` is okay, but `if(function(){ return a && b; }());` is not. That's just ridiculous. A more helpful rule (and what I believe better follows the spirit of this rule according to the error messages) would be to check all `Program`s and `BlockStatement`s for `ExpressionStatement`s containing `LogicalExpression`s. They just shouldn't be anywhere where their result is not used (i.e. they are used for control flow purposes). Then we could go one step further and just look for any `ExpressionStatement` that doesn't contain either an `AssignmentExpression` or `CallExpression` (and `NewExpression`?), then call it `no-unused-expressions`.