othree / eslint-plugin-pep8-blank-lines

An ESLint blank line rule supports rule for different level. Inspired by PEP8.
https://www.npmjs.com/package/eslint-plugin-pep8-blank-lines
MIT License
2 stars 0 forks source link

Crash on multi-variable `let` or `var` statement #7

Open deb0ch opened 5 years ago

deb0ch commented 5 years ago

Hi again,

I just found a crash on multi-variable let or var statements:


import React from 'react';

function yolo(): void {
    let a, b, c;
    b = a + c;
    return b;
}

const App: React.FC = () => (
  <div>
    <p>
      Yolo: {yolo()}
    </p>
  </div>
);

export default App;

Command: ./node_modules/.bin/eslint src/App.tsx

Output:


TypeError: Cannot read property 'type' of null
Occurred while linting /Users/deb0ch/src/repro-pep8-blank-lines/src/App.tsx:2
    at Object.test (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/pep8-matcher.js:67:52)
    at Object.test (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/pep8-matcher.js:74:28)
    at /Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/pep8-matcher.js:119:56
    at Array.some (<anonymous>)
    at module.exports (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/pep8-matcher.js:119:16)
    at /Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/check.js:13:66
    at Array.some (<anonymous>)
    at match (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/check.js:13:50)
    at linesBetween (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/check.js:28:44)
    at recursiveLinesBetween (/Users/deb0ch/src/repro-pep8-blank-lines/node_modules/eslint-plugin-pep8-blank-lines/lib/check.js:40:5)

This only happens when I use var or let statements defining multiple variables. Not that I allow them in my project, just found the bug while playing around and reporting it upstream 😸

deb0ch commented 5 years ago

I reproduced it on a freshly created create-react-app:

.eslintrc.json:

{
  "env": {
    "browser": true,
    "es6": true
  },
  "extends": ["airbnb"],
  "globals": {
    "Atomics": "readonly",
    "SharedArrayBuffer": "readonly"
  },
  "parser": "babel-eslint",
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true
    },
    "ecmaVersion": 2018,
    "sourceType": "module"
  },
  "plugins": [
    "pep8-blank-lines",
    "react"
  ],
  "rules": {
    "react/jsx-filename-extension": [
      1, {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    ],
    "pep8-blank-lines/pep8-blank-lines": 2
  },
  "settings": {
    "import/resolver": {
      "node": {
        "extensions": [".js", ".jsx", ".ts", ".tsx"]
      }
    }
  }
}

package.json:

{
  "browserslist": {
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ],
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
  },
  "dependencies": {
    "@types/node": "12.6.9",
    "@types/react": "16.8.24",
    "@types/react-dom": "16.8.5",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-scripts": "3.0.1",
    "typescript": "3.5.3"
  },
  "devDependencies": {
    "@types/jest": "24.0.16",
    "babel-eslint": "^10.0.2",
    "eslint": "^6.1.0",
    "eslint-config-airbnb": "^17.1.1",
    "eslint-plugin-import": "^2.18.2",
    "eslint-plugin-jsx-a11y": "^6.2.3",
    "eslint-plugin-pep8-blank-lines": "^0.0.8",
    "eslint-plugin-react": "^7.14.3"
  },
  "private": true,
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "version": "0.1.0"
}

I can upload the repo reproducing the issue to my github if needed, I'd just rather avoid creating clutter in my Github if you don't need it 😸