diff --git a/.changeset/fix-babel-compiler-detection-1448.md b/.changeset/fix-babel-compiler-detection-1448.md new file mode 100644 index 000000000..48604503a --- /dev/null +++ b/.changeset/fix-babel-compiler-detection-1448.md @@ -0,0 +1,6 @@ +--- +"@react-doctor/core": patch +"react-doctor": patch +--- + +Detect React Compiler in babel config files and package.json babel field. Previously, projects using babel-plugin-react-compiler in package.json babel config or babel config files would fail detection, causing React Compiler-gated rules like context-provider-value-from-unmemoized-local-literal to incorrectly fire. Fixes #1448. diff --git a/packages/core/src/project-info/detectors.ts b/packages/core/src/project-info/detectors.ts index c5e7f4b03..e68cf2bbc 100644 --- a/packages/core/src/project-info/detectors.ts +++ b/packages/core/src/project-info/detectors.ts @@ -2003,7 +2003,7 @@ const analyzeConfigNode = ( }; const hasCompilerInConfigFile = (filePath: string): boolean => - analyzeConfigModuleExport(filePath, "default", false, 0, new Set()); + analyzeConfigModuleExport(filePath, "default", true, 0, new Set()); const hasCompilerInConfigFiles = (directory: string, filenames: string[]): boolean => filenames.some((filename) => hasCompilerInConfigFile(path.join(directory, filename))); @@ -2014,7 +2014,7 @@ const hasCompilerInPackageJsonConfig = (packageJson: PackageJson): boolean => ts.parseJsonText("package.json", JSON.stringify(packageJson.babel)), "package.json#babel", "default", - false, + true, 0, new Set(), ); diff --git a/packages/core/tests/discover-project.test.ts b/packages/core/tests/discover-project.test.ts index 6dd6037da..a6eda7802 100644 --- a/packages/core/tests/discover-project.test.ts +++ b/packages/core/tests/discover-project.test.ts @@ -1238,6 +1238,23 @@ describe("discoverProject", () => { expect(discoverProject(projectDirectory).hasReactCompiler).toBe(true); }); + it("detects React Compiler from package.json babel config", () => { + const projectDirectory = path.join(tempDirectory, "package-json-babel-react-compiler"); + fs.mkdirSync(projectDirectory, { recursive: true }); + fs.writeFileSync( + path.join(projectDirectory, "package.json"), + JSON.stringify({ + name: "package-json-babel-react-compiler", + dependencies: { react: "^18.0.0" }, + babel: { + plugins: ["babel-plugin-react-compiler"], + }, + }), + ); + + expect(discoverProject(projectDirectory).hasReactCompiler).toBe(true); + }); + it("detects React Compiler from its compatibility runtime", () => { const projectDirectory = path.join(tempDirectory, "runtime-react-compiler"); fs.mkdirSync(projectDirectory, { recursive: true });