mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Revert [eprh] Remove hermes-parser (#34747)
Adds back HermesParser to eslint-plugin-react-hooks. There are still [external users of Flow](https://github.com/facebook/react/pull/34719#issuecomment-3368137743) using the plugin, so we shouldn't break the plugin for them. However, we still have the problem of double parsing: once from eslint (which we discard) and then another via babel/hermes parser. In the long run we should investigate a translation layer from estree to babel (or alternatively, update the compiler to take estree as input). But for now, I am reverting the PR. This does mean that [Sandpack in react.dev](https://github.com/reactjs/react.dev/blob/11cb6b591571caf5fa2a192117b6a6445c3f2027/src/components/MDX/Sandpack/runESLint.tsx#L31) cannot update to the latest eprh as HermesParser does not appear to be able to be run in a browser. I discovered this while trying to update eprh on react.dev last week, but didn't investigate deeply. I'll need to double check that again to find out more.
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.24.4",
|
||||
"@babel/parser": "^7.24.4",
|
||||
"hermes-parser": "^0.25.1",
|
||||
"zod": "^3.22.4 || ^4.0.0",
|
||||
"zod-validation-error": "^3.0.3 || ^4.0.0"
|
||||
},
|
||||
|
||||
@@ -17,6 +17,7 @@ import BabelPluginReactCompiler, {
|
||||
LoggerEvent,
|
||||
} from 'babel-plugin-react-compiler';
|
||||
import type {SourceCode} from 'eslint';
|
||||
import * as HermesParser from 'hermes-parser';
|
||||
import {isDeepStrictEqual} from 'util';
|
||||
import type {ParseResult} from '@babel/parser';
|
||||
|
||||
@@ -113,14 +114,28 @@ function runReactCompilerImpl({
|
||||
}
|
||||
|
||||
let babelAST: ParseResult<File> | null = null;
|
||||
try {
|
||||
babelAST = babelParse(sourceCode.text, {
|
||||
sourceFilename: filename,
|
||||
sourceType: 'unambiguous',
|
||||
plugins: ['typescript', 'jsx'],
|
||||
});
|
||||
} catch (err: unknown) {
|
||||
/* empty */
|
||||
|
||||
if (filename.endsWith('.tsx') || filename.endsWith('.ts')) {
|
||||
try {
|
||||
babelAST = babelParse(sourceCode.text, {
|
||||
sourceFilename: filename,
|
||||
sourceType: 'unambiguous',
|
||||
plugins: ['typescript', 'jsx'],
|
||||
});
|
||||
} catch {
|
||||
/* empty */
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
babelAST = HermesParser.parse(sourceCode.text, {
|
||||
babel: true,
|
||||
enableExperimentalComponentSyntax: true,
|
||||
sourceFilename: filename,
|
||||
sourceType: 'module',
|
||||
});
|
||||
} catch {
|
||||
/* empty */
|
||||
}
|
||||
}
|
||||
|
||||
if (babelAST != null) {
|
||||
|
||||
Reference in New Issue
Block a user