Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"RangeError: Maximum call stack size exceeded" in indent rule #10183

Closed
j0k3r opened this issue Apr 4, 2018 · 9 comments
Closed

"RangeError: Maximum call stack size exceeded" in indent rule #10183

j0k3r opened this issue Apr 4, 2018 · 9 comments
Labels
archived due to age This issue has been archived; please open a new issue for any further discussion bug ESLint is working incorrectly evaluating The team will evaluate this issue to decide whether it meets the criteria for inclusion indent Relates to the `indent` rule rule Relates to ESLint's core rules

Comments

@j0k3r
Copy link

j0k3r commented Apr 4, 2018

Tell us about your environment

  • ESLint Version: 4.19.1
  • Node Version: v8.10.0
  • npm Version: 5.6.0

What parser (default, Babel-ESLint, etc.) are you using? babel-eslint

Please show your full configuration:

Configuration
module.exports = {
  "env": {
    "es6": true,
    "node": true,
    "jest": true,
    "browser": true,
  },
  "parser": "babel-eslint",
  "extends": "airbnb",
  "plugins": [
    "babel",
  ],
  "rules": {
    "semi": [2, "never"],
    "no-console": [1, {
      "allow": ["warn", "error"],
    }],
    "curly": [1, "all"],
    "no-param-reassign": [1, {
      "props": false,
    }],
    "import/prefer-default-export": 0,
    "no-multiple-empty-lines": [1, { "max": 2, "maxEOF": 1, "maxBOF": 0 }],
    "padding-line-between-statements": [
        "error",
        { "blankLine": "always", "prev": "*", "next": "return" },
        { "blankLine": "always", "prev": "import", "next": "*" },
        { "blankLine": "never", "prev": "import", "next": "import" },
    ],
    "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
  }
}
package.json ```json { "dependencies": { "babel-eslint": "^8.2.2", "eslint": "^4.19.1", "eslint-config-airbnb": "^16.1.0", "eslint-plugin-babel": "^5.0.0", "eslint-plugin-import": "^2.10.0", "eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-react": "^7.7.0" } } ```

What did you do? Please include the actual source code causing the issue, as well as the command that you used to run ESLint.

const expectFragmentFieldToEqual = (frag, field, value, t) => {
  if (value === undefined) {
    t.log = t.log.concat(`
${t.indent}${field}: ${chalk.yellow(stringifyObject(
  'no assertion',
  { indent: ` ${t.indent} ` },
))}`)

    return
  }

  try {
    chai.assert.deepEqual(frag[field], value)
    t.log = t.log.concat(`
${t.indent}${field}: ${chalk.green(stringifyObject(
        value,
        { indent: ` ${t.indent} ` },
      ))}`)
  } catch (e) {
    t.log = t.log.concat(`
${t.indent}${field}: ${chalk.red(JSON.stringify(frag[field]))}
--> expected "${JSON.stringify(e.expected)}"`)
    t.fail(e.message)
  }
}
node_modules/.bin/eslint fix test.js --debug

What did you expect to happen?

ESLint should generate an error.

What actually happened? Please include the actual, raw output from ESLint.

[15:15:45]jeremy@schiaparelli:/tmp/test-eslint$ /tmp/test-eslint/node_modules/.bin/eslint fix test.js --debug
  eslint:cli Running on files +0ms
  eslint:glob-util Creating list of files to process. +0ms
  eslint:ignored-paths Looking for ignore file in /tmp/test-eslint +0ms
  eslint:ignored-paths Could not find ignore file in cwd +0ms
  eslint:ignored-paths Looking for ignore file in /tmp/test-eslint +2ms
  eslint:ignored-paths Could not find ignore file in cwd +0ms
  eslint:cli-engine Processing /tmp/test-eslint/test.js +0ms
  eslint:cli-engine Linting /tmp/test-eslint/test.js +1ms
  eslint:config Constructing config file hierarchy for /tmp/test-eslint +0ms
  eslint:config Using .eslintrc and package.json files +0ms
  eslint:config Loading /tmp/test-eslint/.eslintrc +0ms
  eslint:config-file Loading config file: /tmp/test-eslint/.eslintrc +0ms
  eslint:config-file Loading 20minutes +105ms
  eslint:config-file Attempting to resolve eslint-config-20minutes +0ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-20minutes/index.js +0ms
  eslint:config-file Loading airbnb +13ms
  eslint:config-file Attempting to resolve eslint-config-airbnb +0ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb/index.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb/rules/react-a11y.js +2ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb/rules/react-a11y.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb/rules/react.js +133ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb/rules/react.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/strict.js +23ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/strict.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/index.js +1ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/index.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/imports.js +2ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/imports.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/es6.js +67ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/es6.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/variables.js +10ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/variables.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/style.js +5ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/style.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/node.js +60ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/node.js +1ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/errors.js +1ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/errors.js +0ms
  eslint:config-file Loading /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/best-practices.js +3ms
  eslint:config-file Loading JS config file: /tmp/test-eslint/node_modules/eslint-config-airbnb-base/rules/best-practices.js +0ms
  eslint:config Using /tmp/test-eslint/.eslintrc +438ms
  eslint:config-ops Using config from partial cache +0ms
  eslint:config-ops Apply environment settings to config +1ms
  eslint:config-ops Creating config for environment node +0ms
  eslint:config-ops Creating config for environment es6 +0ms
  eslint:config-ops Creating config for environment jest +0ms
  eslint:config-ops Creating config for environment browser +0ms
  eslint:linter Linting code for /tmp/test-eslint/test.js (pass 1) +0ms
Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
    at RegExp.test (<anonymous>)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:445:32)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)
    at OffsetStorage.getDesiredIndent (/tmp/test-eslint/node_modules/eslint/lib/rules/indent.js:451:45)

It works fine on version 4.18.1 but fail starting at 4.19.0.
My guess is the bug is related to #10055

@eslint-deprecated eslint-deprecated bot added the triage An ESLint team member will look at this issue soon label Apr 4, 2018
@platinumazure platinumazure added bug ESLint is working incorrectly rule Relates to ESLint's core rules evaluating The team will evaluate this issue to decide whether it meets the criteria for inclusion indent Relates to the `indent` rule and removed triage An ESLint team member will look at this issue soon labels Apr 4, 2018
@platinumazure
Copy link
Member

Any thoughts, @not-an-aardvark?

@not-an-aardvark
Copy link
Member

I can't reproduce this in the demo. @j0k3r Does this issue also occur when not using babel-eslint?

Based on what the source text looks like, I wonder if this is the same issue as #9107.

@j0k3r
Copy link
Author

j0k3r commented Apr 10, 2018

It works fine when not using babel-eslint:

j0k@MBP:/tmp/eslint$ node_modules/.bin/eslint fix test.js --debug
  eslint:cli Running on files +0ms
  eslint:glob-util Creating list of files to process. +0ms
  eslint:ignored-paths Looking for ignore file in /private/tmp/eslint +0ms
  eslint:ignored-paths Could not find ignore file in cwd +0ms
  eslint:ignored-paths Looking for ignore file in /private/tmp/eslint +3ms
  eslint:ignored-paths Could not find ignore file in cwd +0ms
  eslint:cli-engine Processing /private/tmp/eslint/utils.js +0ms
  eslint:cli-engine Linting /private/tmp/eslint/utils.js +0ms
  eslint:config Constructing config file hierarchy for /private/tmp/eslint +0ms
  eslint:config Using .eslintrc and package.json files +0ms
  eslint:config Loading /private/tmp/eslint/.eslintrc.js +1ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/.eslintrc.js +0ms
  eslint:plugins Loaded plugin babel (eslint-plugin-babel@5.0.0) (from /private/tmp/eslint/node_modules/eslint-plugin-babel/index.js) +0ms
  eslint:config-file Loading airbnb +192ms
  eslint:config-file Attempting to resolve eslint-config-airbnb +1ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb/index.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb/rules/react-a11y.js +3ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb/rules/react-a11y.js +0ms
  eslint:plugins Loaded plugin jsx-a11y (eslint-plugin-jsx-a11y@6.0.3) (from /private/tmp/eslint/node_modules/eslint-plugin-jsx-a11y/lib/index.js) +335ms
  eslint:plugins Loaded plugin react (eslint-plugin-react@7.7.0) (from /private/tmp/eslint/node_modules/eslint-plugin-react/index.js) +89ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb/rules/react.js +417ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb/rules/react.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/strict.js +56ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/strict.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/index.js +14ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/index.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/imports.js +8ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/imports.js +1ms
  eslint:plugins Loaded plugin import (eslint-plugin-import@2.10.0) (from /private/tmp/eslint/node_modules/eslint-plugin-import/lib/index.js) +302ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/es6.js +205ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/es6.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/variables.js +17ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/variables.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/style.js +13ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/style.js +0ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/node.js +203ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/node.js +1ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/errors.js +1ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/errors.js +1ms
  eslint:config-file Loading /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/best-practices.js +9ms
  eslint:config-file Loading JS config file: /private/tmp/eslint/node_modules/eslint-config-airbnb-base/rules/best-practices.js +0ms
  eslint:config Using /private/tmp/eslint/.eslintrc.js +1s
  eslint:config-ops Using config from partial cache +0ms
  eslint:config-ops Apply environment settings to config +7ms
  eslint:config-ops Creating config for environment node +1ms
  eslint:config-ops Creating config for environment es6 +1ms
  eslint:config-ops Creating config for environment jest +0ms
  eslint:config-ops Creating config for environment browser +1ms
  eslint:linter Linting code for /private/tmp/eslint/utils.js (pass 1) +0ms
  eslint:linter Generating fixed text for /private/tmp/eslint/utils.js (pass 1) +11ms
  eslint:text-fixer Applying fixes +0ms
  eslint:text-fixer shouldFix parameter was false, not attempting fixes +1ms
  eslint:cli-engine Linting complete in: 1227ms +1s

/private/tmp/eslint/test.js
  0:0  error  Parsing error: parser.parse is not a function

✖ 1 problem (1 error, 0 warnings)

Should I open an issue on babel-eslint?
I've added the package.json I used to reproduce, just in case you would like to reproduce.

@SanderNouwynck
Copy link

@j0k3r
I'm experiencing the same issue, also with babel-eslint.
Did you already open an issue on babel-eslint?

@j0k3r
Copy link
Author

j0k3r commented Apr 11, 2018

I did not.
I was waiting for a reply from @not-an-aardvark or @platinumazure.

@platinumazure
Copy link
Member

@j0k3r Apologies, I missed this. Yes, please open an issue on babel-eslint. Thanks!

@j0k3r
Copy link
Author

j0k3r commented Apr 11, 2018

Are you ok if I move the whole issue (using https://github-issue-mover.appspot.com/) instead of creating a new one?

@platinumazure
Copy link
Member

platinumazure commented Apr 11, 2018 via email

@j0k3r
Copy link
Author

j0k3r commented Apr 11, 2018

This issue was moved to babel/babel-eslint#609

@j0k3r j0k3r closed this as completed Apr 11, 2018
@eslint-deprecated eslint-deprecated bot locked and limited conversation to collaborators Oct 9, 2018
@eslint-deprecated eslint-deprecated bot added the archived due to age This issue has been archived; please open a new issue for any further discussion label Oct 9, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
archived due to age This issue has been archived; please open a new issue for any further discussion bug ESLint is working incorrectly evaluating The team will evaluate this issue to decide whether it meets the criteria for inclusion indent Relates to the `indent` rule rule Relates to ESLint's core rules
Projects
None yet
Development

No branches or pull requests

4 participants