**Do you want to request a *feature* or report a *bug*?**
bug
**What is the current behavior?**
React hooks linter fails with this piece of code

```js
function useHook() {
  const ref = React.useRef([1, 2, 3]);
  const res = []
  // valid because there are not unexpected returns
  if (ref.current) {
    for (let i = 0; i !== ref.current.length && !ref.current[i]; ++i ) {
      res.push(ref.current[i]);
    }
  }
  React.useLayoutEffect(() => {});
}
```

however a bit more usual for loop is handled as expected
```js
function useHook() {
  const ref = React.useRef([1, 2, 3]);
  const res = []
  if (ref.current) {
    for (let i = 0; i !== ref.current.length; ++i ) {
      res.push(ref.current[i]);
    }
  }
  React.useLayoutEffect(() => {});
}
```

**What is the expected behavior?**

Skip for looks without returns

**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**

eslint-plugin-react-hooks 0.0.0
`
      // Regression test for some internal code.
      // This shows how the "callback rule" is more relaxed,
      // and doesn't kick in unless we're confident we're in
      // a component or a hook.
      function makeListener(instance) {
        each(pixelsWithInferredEvents, pixel => {
          if (useExtendedSelector(pixel.id) && extendedButton) {
            foo();
          }
        });
      }
    `,
    `
      // Regression test for incorrectly flagged valid code.
      function RegressionTest() {
        const foo = cond ? a : b;
        useState();
      }
    `,
    `
      // Valid because exceptions abort rendering
      function RegressionTest() {
        if (page == null) {
          throw new Error('oh no!');
        }
        useState();
      }
    `,
  ],