Skip to content

[prefer-regexp-exec] Cannot read property 'type' of undefined #3941

@AriPerkkio

Description

@AriPerkkio

Hello, prefer-regexp-exec rule seems to crash in certain cases. This issue was spotted by automated CI run - it is not blocking my development or anything.

AriPerkkio/eslint-remote-tester#271 (comment)

  • I have tried restarting my IDE and the issue persists.
  • I have updated to the latest version of the packages.
  • I have read the FAQ and my problem is not listed.

Repro

{
  "root": true,
  "env": {
    "es6": true
  },
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "tsconfigRootDir": "./",
    "project": ["./tsconfig.json"],
    "ecmaVersion": 2020,
    "sourceType": "module"
  },
  "plugins": ["@typescript-eslint/eslint-plugin"],
  "rules": {
    "@typescript-eslint/prefer-regexp-exec": "error"
  }
}
export function temp(text: string): void {
  // OK
  text.match(new RegExp(`${"hello"}`));

  // Crash
  text.match(new RegExp(`${"hello".toString()}`));
}
{
  "include": ["./index.ts"],
  "compilerOptions": {
    "lib": ["es2020", "DOM"],
    "target": "es6",
    "module": "esnext",
    "moduleResolution": "node"
  }
}

Expected Result

Should not crash

Actual Result

Oops! Something went wrong! :(

ESLint: 7.32.0

TypeError: Cannot read property 'type' of undefined
Occurred while linting /workspaces/eslint-demo-repro/index.tsx:6
    at isLikelyToContainGlobalFlag (/workspaces/eslint-demo-repro/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:84:31)
    at CallExpression[arguments.length=1] > MemberExpression.callee[property.name='match'][computed=false] (/workspaces/eslint-demo-repro/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:100:40)
    at /workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/safe-emitter.js:45:58
    at Array.forEach (<anonymous>)
    at Object.emit (/workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/node-event-generator.js:293:26)
    at NodeEventGenerator.applySelectors (/workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/node-event-generator.js:322:22)
    at NodeEventGenerator.enterNode (/workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/node-event-generator.js:336:14)
    at CodePathAnalyzer.enterNode (/workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js:711:23)
    at /workspaces/eslint-demo-repro/node_modules/eslint/lib/linter/linter.js:960:32

Additional Info

Crash reports from real projects

Rule: prefer-regexp-exec

  • Message: Cannot read property 'type' of undefined Occurred while linting /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/.cache-eslint-remote-tester/Amsterdam/matomo-tracker/packages/react/src/utils/useOutboundClickListener.tsx:29
  • Path: Amsterdam/matomo-tracker/packages/react/src/utils/useOutboundClickListener.tsx
  • Link
  27 |     if (
  28 |       // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec
> 29 |       !href.match(
  30 |         new RegExp(
  31 |           `^(http://www.|https://www.|http://|https://)+(${window.location.hostname})`,
  32 |         ),
TypeError: Cannot read property 'type' of undefined
Occurred while linting /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/.cache-eslint-remote-tester/Amsterdam/matomo-tracker/packages/react/src/utils/useOutboundClickListener.tsx:29
    at isLikelyToContainGlobalFlag (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:84:31)
    at CallExpression[arguments.length=1] > MemberExpression.callee[property.name='match'][computed=false] (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:100:40)
    at /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/safe-emitter.js:45:58
    at Array.forEach (<anonymous>)
    at Object.emit (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/node-event-generator.js:293:26)
    at NodeEventGenerator.applySelectors (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/node-event-generator.js:322:22)
    at NodeEventGenerator.enterNode (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/node-event-generator.js:336:14)
    at CodePathAnalyzer.enterNode (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js:711:23)
    at /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint/lib/linter/linter.js:960:32

Rule: prefer-regexp-exec

  • Message: Cannot read property 'type' of undefined Occurred while linting /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/.cache-eslint-remote-tester/Coffeekraken/coffeekraken/packages/core/s-interface/src/shared/SInterface.ts:366
  • Path: Coffeekraken/coffeekraken/packages/core/s-interface/src/shared/SInterface.ts
  • Link
  364 |                     const obj = this._definition[defArgName];
  365 |                     if (obj.explicit) {
> 366 |                         if (obj.alias && ` ${objectOrString} `.match(new RegExp(`\\s-${obj.alias}\\s`))) return;
  367 |                         else if (` ${objectOrString} `.match(new RegExp(`\\s--${argName}\\s`))) return;
  368 |                         delete objectOnWhichToApplyInterface[argName];
  369 |                     }
TypeError: Cannot read property 'type' of undefined
Occurred while linting /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/.cache-eslint-remote-tester/Coffeekraken/coffeekraken/packages/core/s-interface/src/shared/SInterface.ts:366
    at isLikelyToContainGlobalFlag (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:84:31)
    at CallExpression[arguments.length=1] > MemberExpression.callee[property.name='match'][computed=false] (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/@typescript-eslint/eslint-plugin/dist/rules/prefer-regexp-exec.js:100:40)
    at /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/safe-emitter.js:45:58
    at Array.forEach (<anonymous>)
    at Object.emit (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/node-event-generator.js:293:26)
    at NodeEventGenerator.applySelectors (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/node-event-generator.js:322:22)
    at NodeEventGenerator.enterNode (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/node-event-generator.js:336:14)
    at CodePathAnalyzer.enterNode (/home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js:711:23)
    at /home/runner/work/eslint-remote-tester/eslint-remote-tester/ci/node_modules/eslint-remote-tester/node_modules/eslint/lib/linter/linter.js:960:32

Versions

package version
@typescript-eslint/eslint-plugin 4.32.0
@typescript-eslint/parser 4.32.0
TypeScript 4.4.3
ESLint 7.32.Z
node 14.17.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpackage: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions