Skip to content

Regression for react-hooks - Cannot read property 'parent' of null #2513

Closed
@SimenB

Description

@SimenB
  • 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

{
  "plugins": ["react-hooks"],
  "parser": "@typescript-eslint/parser",
  "rules": {
    "react-hooks/exhaustive-deps": "error"
  }
}
import * as React from 'react';

export const List: React.FC = () => {
  const Thing = React.useMemo(() => () => null, []);

  return React.useMemo(() => {
    if (Thing) {
      return <Thing />;
    }

    return null;
  }, []);
};

Expected Result

It should not throw an error

Actual Result

TypeError: Cannot read property 'parent' of null
Occurred while linting /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx:6
    at getDependency (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:2228:13)
    at gatherDependenciesRecursively (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1194:34)
    at gatherDependenciesRecursively (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1262:13)
    at visitFunctionWithDependencies (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1170:7)
    at visitCallExpression (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:824:11)
    at /Users/simen/repos/monorepo/node_modules/eslint/lib/linter/safe-emitter.js:45:58
    at Array.forEach (<anonymous>)
    at Object.emit (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/node-event-generator.js:254:26)
    at NodeEventGenerator.applySelectors (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/node-event-generator.js:283:22)

Additional Info

@typescript-eslint/parser@3.10.1 does not throw an error

  eslint:cli CLI args: [ '--debug', 'packages/folio-native-app/src/components/Transactions/List.tsx' ] +0ms
  eslint:cli Running on files +3ms
  eslint:config-array-factory Loading .eslintignore file: /Users/simen/repos/monorepo/.eslintignore +0ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath: '/Users/simen/repos/monorepo', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath: '/Users/simen/repos/monorepo', patterns: [ '/**/node_modules/*' ] } +2ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath: '/Users/simen/repos/monorepo', loose: false } ] +0ms
  eslint:ignore-pattern   processed: { basePath: '/Users/simen/repos/monorepo', patterns: [ '/**/node_modules/*' ] } +0ms
  eslint:file-enumerator Start to iterate files: [ 'packages/folio-native-app/src/components/Transactions/List.tsx' ] +0ms
  eslint:file-enumerator File: /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx +0ms
  eslint:cascading-config-array-factory Load config files for /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions. +0ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions. +0ms
  eslint:config-array-factory Config file not found on /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions +4ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo/packages/folio-native-app/src/components. +1ms
  eslint:config-array-factory Config file not found on /Users/simen/repos/monorepo/packages/folio-native-app/src/components +0ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo/packages/folio-native-app/src. +0ms
  eslint:config-array-factory Config file not found on /Users/simen/repos/monorepo/packages/folio-native-app/src +0ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo/packages/folio-native-app. +0ms
  eslint:config-array-factory Loading package.json config file: /Users/simen/repos/monorepo/packages/folio-native-app/package.json +0ms
  eslint:config-array-factory Loading JSON config file: /Users/simen/repos/monorepo/packages/folio-native-app/package.json +0ms
  eslint:config-array-factory Error reading package.json file: /Users/simen/repos/monorepo/packages/folio-native-app/package.json +1ms
  eslint:config-array-factory Config file not found on /Users/simen/repos/monorepo/packages/folio-native-app +0ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo/packages. +1ms
  eslint:config-array-factory Config file not found on /Users/simen/repos/monorepo/packages +0ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos/monorepo. +0ms
  eslint:config-array-factory Loading legacy config file: /Users/simen/repos/monorepo/.eslintrc +0ms
  eslint:config-array-factory Config file found: /Users/simen/repos/monorepo/.eslintrc +16ms
  eslint:config-array-factory Loading parser "@typescript-eslint/parser" from /Users/simen/repos/monorepo/.eslintrc +0ms
  eslint:config-array-factory Loaded: @typescript-eslint/parser@4.1.0 (/Users/simen/repos/monorepo/node_modules/@typescript-eslint/parser/dist/index.js) +1ms
  eslint:config-array-factory Loading plugin "react-hooks" from /Users/simen/repos/monorepo/.eslintrc +260ms
  eslint:config-array-factory Loaded: eslint-plugin-react-hooks@4.1.0 (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/index.js) +1ms
  eslint:config-array-factory Plugin /Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/index.js loaded in: 1ms +1ms
  eslint:cascading-config-array-factory No cache found: /Users/simen/repos. +279ms
  eslint:config-array-factory Config file not found on /Users/simen/repos +1ms
  eslint:cascading-config-array-factory No cache found: /Users/simen. +1ms
  eslint:cascading-config-array-factory Stop traversing because of considered root. +0ms
  eslint:cascading-config-array-factory Configuration was determined: ConfigArray(3) [ { type: 'config', name: 'DefaultIgnorePattern', filePath: '', criteria: null, env: undefined, globals: undefined, ignorePattern: IgnorePattern { patterns: [Array], basePath: '/Users/simen/repos/monorepo', loose: false }, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: undefined, settings: undefined }, { type: 'config', name: '.eslintrc', filePath: '/Users/simen/repos/monorepo/.eslintrc', criteria: null, env: undefined, globals: undefined, ignorePattern: undefined, noInlineConfig: undefined, parser: { error: null, filePath: '/Users/simen/repos/monorepo/node_modules/@typescript-eslint/parser/dist/index.js', id: '@typescript-eslint/parser', importerName: '.eslintrc', importerPath: '/Users/simen/repos/monorepo/.eslintrc' }, parserOptions: undefined, plugins: { 'react-hooks': [Object] }, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: { 'react-hooks/exhaustive-deps': 'error' }, settings: undefined }, { type: 'ignore', name: '.eslintignore', filePath: '/Users/simen/repos/monorepo/.eslintignore', criteria: null, env: undefined, globals: undefined, ignorePattern: IgnorePattern { patterns: [Array], basePath: '/Users/simen/repos/monorepo', loose: true }, noInlineConfig: undefined, parser: undefined, parserOptions: undefined, plugins: undefined, processor: undefined, reportUnusedDisableDirectives: undefined, root: undefined, rules: undefined, settings: undefined } ] on /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions +1ms
  eslint:ignore-pattern Create with: [ IgnorePattern { patterns: [ '/**/node_modules/*' ], basePath: '/Users/simen/repos/monorepo', loose: false }, IgnorePattern { patterns: [ 'node_modules/', 'dist/', 'build/', 'packages/folio-common-components/lib/', 'packages/folio-common-utils/lib/', 'packages/protobank-common/lib/', 'packages/**/*.d.ts', 'packages/**/*.min.js', '.next/', '**/polyfill.js', '**/vendor/*', 'packages/**/gqltypes.ts', 'packages/**/resolver-types.ts', 'packages/stiftemaskinen-frontend/src/services/generated-types/', 'packages/folio-native-app/bin/rn-renderer/', 'packages/*/src/**/*.js', '!packages/*/src/**/__mocks__/**/*.js', '!packages/*/src/**/sw.js', 'packages/om-folio/static/**/*' ], basePath: '/Users/simen/repos/monorepo', loose: true } ] +344ms
  eslint:ignore-pattern   processed: { basePath: '/Users/simen/repos/monorepo', patterns: [ '/**/node_modules/*', 'node_modules/', 'dist/', 'build/', 'packages/folio-common-components/lib/', 'packages/folio-common-utils/lib/', 'packages/protobank-common/lib/', 'packages/**/*.d.ts', 'packages/**/*.min.js', '.next/', '**/polyfill.js', '**/vendor/*', 'packages/**/gqltypes.ts', 'packages/**/resolver-types.ts', 'packages/stiftemaskinen-frontend/src/services/generated-types/', 'packages/folio-native-app/bin/rn-renderer/', 'packages/*/src/**/*.js', '!packages/*/src/**/__mocks__/**/*.js', '!packages/*/src/**/sw.js', 'packages/om-folio/static/**/*' ] } +4ms
  eslint:ignore-pattern Check {
  filePath: '/Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx',
  dot: false,
  relativePath: 'packages/folio-native-app/src/components/Transactions/List.tsx',
  result: false
} +1ms
  eslint:cli-engine Lint /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx +0ms
  eslint:linter Linting code for /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx (pass 1) +0ms
  eslint:linter Verify +0ms
  eslint:linter With ConfigArray: /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx +0ms
  eslint:linter An error occurred while traversing +33ms
  eslint:linter Filename: /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx +0ms
  eslint:linter Line: 6 +0ms
  eslint:linter Parser Options: { ecmaVersion: undefined } +0ms
  eslint:linter Parser Path: /Users/simen/repos/monorepo/node_modules/@typescript-eslint/parser/dist/index.js +0ms
  eslint:linter Settings: {} +0ms

Oops! Something went wrong! :(

ESLint: 7.8.1

TypeError: Cannot read property 'parent' of null
Occurred while linting /Users/simen/repos/monorepo/packages/folio-native-app/src/components/Transactions/List.tsx:6
    at getDependency (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:2228:13)
    at gatherDependenciesRecursively (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1194:34)
    at gatherDependenciesRecursively (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1262:13)
    at visitFunctionWithDependencies (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:1170:7)
    at visitCallExpression (/Users/simen/repos/monorepo/node_modules/eslint-plugin-react-hooks/cjs/eslint-plugin-react-hooks.development.js:824:11)
    at /Users/simen/repos/monorepo/node_modules/eslint/lib/linter/safe-emitter.js:45:58
    at Array.forEach (<anonymous>)
    at Object.emit (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/safe-emitter.js:45:38)
    at NodeEventGenerator.applySelector (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/node-event-generator.js:254:26)
    at NodeEventGenerator.applySelectors (/Users/simen/repos/monorepo/node_modules/eslint/lib/linter/node-event-generator.js:283:22)

Versions

package version
@typescript-eslint/parser 4.1.0
TypeScript 4.0.2
ESLint 7.8.1
node 12.18.1
eslint-plugin-react-hooks 4.1.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    externalThis issue is with another package, not typescript-eslint itselfpackage: parserIssues related to @typescript-eslint/parserworking as intendedIssues that are closed as they are working as intended

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions