Skip to content

[Bug]: TypeError: sourceCode.getAllComments is not a function #3913

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

Open
2 tasks done
developermau opened this issue Mar 25, 2025 · 7 comments
Open
2 tasks done

[Bug]: TypeError: sourceCode.getAllComments is not a function #3913

developermau opened this issue Mar 25, 2025 · 7 comments

Comments

@developermau
Copy link

developermau commented Mar 25, 2025

Is there an existing issue for this?

  • I have searched the existing issues and my issue is unique
  • My issue appears in the command-line and not only in the text editor

Description Overview

I have built an app using Vite (^6.2.2), React (^19.0.0), Typescript(~5.7.2), ESLint (^9.23.0), and @eslint/css (^0.5.0).

I have this ESLint configuration file (eslint.config.js):

import { defineConfig } from 'eslint/config';
import globals from 'globals';
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginReact from 'eslint-plugin-react';
import css from '@eslint/css';

export default defineConfig([
  {
    settings: {
      react: {
        version: 'detect',
      },
    },
  },
  { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    languageOptions: { globals: globals.browser },
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    plugins: { js },
    extends: ['js/recommended'],
  },
  tseslint.configs.recommended,
  pluginReact.configs.flat.recommended,
  // lint css files
  {
    files: ['**/*.css'],
    plugins: {
      css,
    },
    language: 'css/css',
    rules: {
      'css/no-duplicate-imports': 'error',
    },
  },
]);

Also, I have some scripts on my package.json:

    "lint": "eslint .",
    "lint:debug": "eslint . --debug",

Unfortunately, I have an error:

> eslint .


Oops! Something went wrong! :(

ESLint: 9.23.0

TypeError: sourceCode.getAllComments is not a function
    at Object.getFromContext (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint-plugin-react/lib/util/pragma.js#cjs:54:33)
    at Components.componentRule (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint-plugin-react/lib/util/Components.js#cjs:288:29)
    at createRuleListeners (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:1134:15)
    at eval (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:1289:7)
    at Array.forEach (<anonymous>)
    at runRules (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:1203:31)
    at #flatVerifyWithoutProcessors (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:2290:22)
    at Linter._verifyWithFlatConfigArrayAndWithoutProcessors (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:2381:43)
    at Linter._verifyWithFlatConfigArray (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:2484:15)
    at Linter.verify (file:///home/projects/vitejs-vite-uzwt6juz/node_modules/eslint/lib/linter/linter.js#cjs:1840:10)

The error happens when I run this command:

npm run lint

I tried to uninstall eslint-plugin-react, remove node_modules folder, and install all dependencies again but the error persists.

I have created a Stackblitz project. Please, I will appreciate your help.

Expected Behavior

If I remove the @eslint/css code on my eslint.config.js file, I do not have this error:

import { defineConfig } from 'eslint/config';
import globals from 'globals';
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginReact from 'eslint-plugin-react';

export default defineConfig([
  {
    settings: {
      react: {
        version: 'detect',
      },
    },
  },
  { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    languageOptions: { globals: globals.browser },
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    plugins: { js },
    extends: ['js/recommended'],
  },
  tseslint.configs.recommended,
  pluginReact.configs.flat.recommended,
  pluginReact.configs.flat['jsx-runtime'],
]);

Results:

Image

eslint-plugin-react version

^7.37.4

eslint version

^9.23.0

node version

18.20.3

@ljharb
Copy link
Member

ljharb commented Mar 26, 2025

you might need to put the tseslint config after the react ones, since the ts-eslint one sets the proper TS parser settings, but since it works when you remove the CSS rules, it's probably that the pragma util is erroring on .css files. I'll see if I can repro it (but if you have a repo, that'd be better)

@developermau
Copy link
Author

Thanks @ljharb for your answering!

  • Cleaned the initial CSS styles on my app (App.css, and index.css)
  • Added some styles on App.css:
.special-title {
  color: #47c2fc;
}
  • Updated my App.tsx
import './App.css';

export default function App() {
  return (
    <main>
      <h1 className="special-title">Hello!!!</h1>
    </main>
  );
}
  • Update ESLint config
import { defineConfig } from 'eslint/config';
import globals from 'globals';
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginReact from 'eslint-plugin-react';
import css from '@eslint/css';

export default defineConfig([
  {
    settings: {
      react: {
        version: 'detect',
      },
    },
  },
  { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    languageOptions: { globals: globals.browser },
  },
  {
    files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'],
    plugins: { js },
    extends: ['js/recommended'],
  },
  pluginReact.configs.flat.recommended,
  pluginReact.configs.flat['jsx-runtime'],
  tseslint.configs.recommended,
  // lint css files
  {
    files: ['**/*.css'],
    plugins: {
      css,
    },
    language: 'css/css',
    rules: {
      'css/no-duplicate-imports': 'error',
    },
  },
]);
  • App run
Image
  • Try again, ESLint check
npm run lint
Image

Unfortunately, the error persisted.

  • Created some things
  1. Stackblitz: project
  2. GitHub: Repository

Please, I will appreciate your help.

@ljharb
Copy link
Member

ljharb commented Apr 3, 2025

@developermau your repro repo uses eslint-plugin-react-x, which is an entirely different plugin. This is for eslint-plugin-react. I'll leave this open tho since this issue references the correct plugin.

@developermau
Copy link
Author

@developermau your repro repo uses eslint-plugin-react-x, which is an entirely different plugin. This is for eslint-plugin-react. I'll leave this open tho since this issue references the correct plugin.

@ljharb I am so sorry, but I cannot understand what you are talking about. Because I have installed eslint-plugin-react package in my project and part of the my error mentioned a file inside this package: TypeError: sourceCode.getAllComments is not a function at Object.getFromContext (file:///home/developermau/bug-eslint-001/node_modules/eslint-plugin-react/lib/util/pragma.js#cjs:54:33)

Then...

  1. Do you ask me to uninstall eslint-plugin-react-hooks and eslint-plugin-react-refresh and try again? or
  2. Should I create an issue to notify about this error in eslint-plugin-react-hooks by Facebook and eslint-plugin-react-refresh repositories?

Can you please give me more information about that I should do or next steps? I would appreciate it. I want to help, and fix this error, but not make more errors 😅 or generate confusion.

@bever1337
Copy link

I'm currently reproducing this. Unsure what @ljharb is saying about eslint-plugin-react-x.

Dependencies look like this:

"@eslint/js": "^9.24.0",
"eslint": "^9.24.0",
"eslint-plugin-react": "^7.37.5",
"typescript-eslint": "^8.29.1"

I started hacking on the eslint-plugin-react code at the error site and noticed it was failing to process markdown assets. I corrected the error by specifying files for the plugin:

// eslint.config.mjs

export default defineConfig([
  // ...more of my config
  { plugins: { react } },
  {
    ...react.configs.flat.recommended,
    files: ["**/*.{jsx?,mjsx?,cjsx?,tsx?}"],
  },
  {
    ...react.configs.flat["jsx-runtime"],
    files: ["**/*.{jsx?,mjsx?,cjsx?,tsx?}"],
  },
]);

@ljharb
Copy link
Member

ljharb commented Apr 21, 2025

I'm not sure where I saw that other plugin mentioned; i don't see it now. Thanks, I'll take a look at the repro.

@bever1337
Copy link

Thanks for taking a second look 👀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

No branches or pull requests

3 participants