Skip to content

eslint performance drops ~7x when upgrading from 2.26.0 to 2.27.5 #2705

@LucasLemanowicz

Description

@LucasLemanowicz

I was looking at upgrading our eslint-plugin-import package from 2.26.0 to 2.27.5 but when I run eslint after the upgrade, our lint time goes up from ~90 seconds to ~600 seconds.

Relevant sections from our package.json:

{
  "scripts": {
    "lint": "eslint .",
  },
  "dependencies": {
    "next": "^12.3.4",
  },
  "devDependencies": {
    "@graphql-codegen/add": "^4.0.0",
    "@graphql-codegen/cli": "^3.0.0",
    "@graphql-codegen/introspection": "^3.0.0",
    "@graphql-codegen/near-operation-file-preset": "^2.5.0",
    "@graphql-codegen/typescript": "^3.0.0",
    "@graphql-codegen/typescript-operations": "^3.0.0",
    "@graphql-codegen/typescript-urql": "^3.7.3",
    "@graphql-eslint/eslint-plugin": "^3.15.0",
    "@typescript-eslint/eslint-plugin": "^5.50.0",
    "@typescript-eslint/parser": "^5.50.0",
    "eslint": "^8.33.0",
    "eslint-config-next": "^12.3.4",
    "eslint-config-prettier": "^8.6.0",
    "eslint-plugin-implicit-dependencies": "^1.1.1",
    "eslint-plugin-import": "^2.27.5",
    "eslint-plugin-prettier": "^4.2.1",
    "eslint-plugin-simple-import-sort": "^10.0.0",
    "eslint-plugin-testing-library": "^5.10.0",
    "prettier": "^2.8.3",
    "typescript": "^4.9.5",
  }
}

Here's an excerpt of a run of eslint --debug .

2.26.0:

  eslintrc:ignore-pattern Check {
  filePath: '/Users/(...)/src/pages/contact-us.tsx',
  dot: false,
  relativePath: 'src/pages/contact-us.tsx',
  result: false
} +8ms
  eslint:file-enumerator Yield: contact-us.tsx +0ms
  eslintrc:cascading-config-array-factory Load config files for /Users/(...)/src/pages. +8ms
  eslintrc:cascading-config-array-factory Cache hit: /Users/(...)/src/pages. +0ms
  eslint:cli-engine Lint /Users/(...)/src/pages/contact-us.tsx +8ms
  eslint:linter Linting code for /Users/(...)/src/pages/contact-us.tsx (pass 1) +0ms
  eslint:linter Verify +5ms
  eslint:linter With ConfigArray: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Parsing: /Users/(...)/src/pages/contact-us.tsx +1ms
  eslint:linter Parsing successful: /Users/(...)/src/pages/contact-us.tsx +1ms
  eslint:linter Scope analysis: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Scope analysis successful: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Generating fixed text for /Users/(...)/src/pages/contact-us.tsx (pass 1) +58ms
  eslint:source-code-fixer Applying fixes +65ms
  eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms
  eslintrc:ignore-pattern Check {
  filePath: '/Users/(...)/src/pages/historical-rates.tsx',
  dot: false,
  relativePath: 'src/pages/historical-rates.tsx',
  result: false
} +65ms
  eslint:file-enumerator Yield: historical-rates.tsx +65ms
  eslintrc:cascading-config-array-factory Load config files for /Users/(...)/src/pages. +65ms
  eslintrc:cascading-config-array-factory Cache hit: /Users/(...)/src/pages. +0ms
  eslint:cli-engine Lint /Users/(...)/src/pages/historical-rates.tsx +65ms
  eslint:linter Linting code for /Users/(...)/src/pages/historical-rates.tsx (pass 1) +0ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Parsing: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Parsing successful: /Users/(...)/src/pages/historical-rates.tsx +2ms
  eslint:linter Scope analysis: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Scope analysis successful: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Generating fixed text for /Users/(...)/src/pages/historical-rates.tsx (pass 1) +68ms
  eslint:source-code-fixer Applying fixes +71ms
  eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms

2.27.5:

  eslintrc:ignore-pattern Check {
  filePath: '/Users/(...)/src/pages/contact-us.tsx',
  dot: false,
  relativePath: 'src/pages/contact-us.tsx',
  result: false
} +32ms
  eslint:file-enumerator Yield: contact-us.tsx +1ms
  eslintrc:cascading-config-array-factory Load config files for /Users/(...)/src/pages. +32ms
  eslintrc:cascading-config-array-factory Cache hit: /Users/(...)/src/pages. +0ms
  eslint:cli-engine Lint /Users/(...)/src/pages/contact-us.tsx +32ms
  eslint:linter Linting code for /Users/(...)/src/pages/contact-us.tsx (pass 1) +1ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Parsing: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Parsing successful: /Users/(...)/src/pages/contact-us.tsx +6ms
  eslint:linter Scope analysis: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Scope analysis successful: /Users/(...)/src/pages/contact-us.tsx +0ms
  eslint:linter Generating fixed text for /Users/(...)/src/pages/contact-us.tsx (pass 1) +20s
  eslint:source-code-fixer Applying fixes +20s
  eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms
  eslintrc:ignore-pattern Check {
  filePath: '/Users/(...)/src/pages/historical-rates.tsx',
  dot: false,
  relativePath: 'src/pages/historical-rates.tsx',
  result: false
} +20s
  eslint:file-enumerator Yield: historical-rates.tsx +20s
  eslintrc:cascading-config-array-factory Load config files for /Users/(...)/src/pages. +20s
  eslintrc:cascading-config-array-factory Cache hit: /Users/(...)/src/pages. +0ms
  eslint:cli-engine Lint /Users/(...)/src/pages/historical-rates.tsx +20s
  eslint:linter Linting code for /Users/(...)/src/pages/historical-rates.tsx (pass 1) +15ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Parsing: /Users/(...)/src/pages/historical-rates.tsx +4ms
  eslint:linter Parsing successful: /Users/(...)/src/pages/historical-rates.tsx +61ms
  eslint:linter Scope analysis: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Scope analysis successful: /Users/(...)/src/pages/historical-rates.tsx +0ms
  eslint:linter Generating fixed text for /Users/(...)/src/pages/historical-rates.tsx (pass 1) +3s
  eslint:source-code-fixer Applying fixes +3s
  eslint:source-code-fixer shouldFix parameter was false, not attempting fixes +0ms

Happy to provide additional logs or configs in case it would be helpful in reproing and debugging.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions