Skip to content

Commit 4f2cd08

Browse files
committed
FIX: Add React preset to Babel config for JSX support
Critical Bug Found: When disable_lwc_base_config: true, the smart parser selection used Babel from LWC config but WITHOUT the @babel/preset-react preset. This caused React .jsx files to fail parsing with error: 'Parsing error: This experimental syntax requires enabling one of the following parser plugin(s): "jsx", "flow", "typescript"' Root Cause: - createJavascriptConfigArray() extracts Babel parser from LWC config - LWC Babel config only has presets for LWC/decorators, not React JSX - .jsx files require @babel/preset-react to parse JSX syntax - Without it, Babel fails to recognize JSX tags like <div> Solution: Add @babel/preset-react to the Babel options when using smart selection: - Maintains LWC decorator support - Adds React JSX support - Consistent with createJavascriptPlusLwcConfigArray() behavior Testing: ✅ LWC .js files with decorators: Parse correctly ✅ React .jsx files with JSX: Parse correctly (was failing before) ✅ React .tsx files: Parse correctly ✅ No parsing errors in dreamhouse project Impact: - Fixes regression where React files broke with disable_lwc_base_config: true - Maintains all decorator support for LWC - Ensures both LWC and React work together
1 parent 4474516 commit 4f2cd08

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

packages/code-analyzer-eslint-engine/src/base-config.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,14 +157,26 @@ export class BaseConfigFactory {
157157
// .js files might have LWC decorators - use Babel parser with decorator support
158158
const lwcConfig = validateAndGetRawLwcConfigArray()[0];
159159
const babelParser = lwcConfig.languageOptions?.parser;
160-
const babelParserOptions = lwcConfig.languageOptions?.parserOptions;
160+
const originalParserOptions = lwcConfig.languageOptions?.parserOptions as Linter.ParserOptions;
161+
const originalBabelOptions = originalParserOptions.babelOptions || {};
162+
163+
// Add @babel/preset-react to support JSX in React files alongside LWC files
164+
const enhancedParserOptions = {
165+
...originalParserOptions,
166+
babelOptions: {
167+
...originalBabelOptions,
168+
configFile: false,
169+
// Add React preset for JSX support (.jsx files and React in .js files)
170+
presets: [...(originalBabelOptions.presets || []), require.resolve('@babel/preset-react')]
171+
}
172+
};
161173

162174
return [{
163175
... eslintJs.configs.all,
164176
files: this.engineConfig.file_extensions.javascript.map(ext => `**/*${ext}`),
165177
languageOptions: {
166178
parser: babelParser,
167-
parserOptions: babelParserOptions
179+
parserOptions: enhancedParserOptions
168180
}
169181
}];
170182
} else {

0 commit comments

Comments
 (0)