@samitouri / QOS-React-2 / commits / a714685c15

fix[compiler] remove duplicate parsePluginOptions from the compilePro… (#29831)

<!-- Thanks for submitting a pull request! We appreciate you spending the time to work on these changes. Please provide enough information so that others can review your pull request. The three fields below are mandatory. Before submitting a pull request, please make sure the following is done: 1. Fork [the repository](https://github.com/facebook/react) and create your branch from `main`. 2. Run `yarn` in the repository root. 3. If you've fixed a bug or added code that should be tested, add tests! 4. Ensure the test suite passes (`yarn test`). Tip: `yarn test --watch TestName` is helpful in development. 5. Run `yarn test --prod` to test in the production environment. It supports the same options as `yarn test`. 6. If you need a debugger, run `yarn test --debug --watch TestName`, open `chrome://inspect`, and press "Inspect". 7. Format your code with [prettier](https://github.com/prettier/prettier) (`yarn prettier`). 8. Make sure your code lints (`yarn lint`). Tip: `yarn linc` to only check changed files. 9. Run the [Flow](https://flowtype.org/) type checks (`yarn flow`). 10. If you haven't already, complete the CLA. Learn more about contributing: https://reactjs.org/docs/how-to-contribute.html --> ## Summary <!-- Explain the **motivation** for making this change. What existing problem does the pull request solve? --> The parsePluginOptions seemed to be duplicated within [BabelPlugin.ts](https://github.com/facebook/react/blob/f5af92d2c47d1e1f455faf912b1d3221d1038c37/compiler/packages/babel-plugin-react-compiler/src/Babel/BabelPlugin.ts#L32) and [Program.ts](https://github.com/facebook/react/blob/f5af92d2c47d1e1f455faf912b1d3221d1038c37/compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Program.ts#L220). Since the options already parsed in BabelPlugin.ts should have been passed to compileProgram, in this PR we deleted parsePluginOptions in compileProgram and used the options passed as arguments as they are. I've done that. ## How did you test this change? <!-- Demonstrate the code is solid. Example: The exact commands you ran and their output, screenshots / videos if the pull request changes the user interface. How exactly did you verify that your PR solves the issue you wanted to solve? If you leave this empty, your PR will very likely be closed. --> <img width="516" alt="image" src="https://github.com/facebook/react/assets/87469023/2a70c6ea-0330-42a2-adff-48ae3e905790">

Yuto Yoshino committed Jun 11, 2024 at 08:18 UTC a714685c156dd241b1d5e5ae3a98c439c88e64e4
1 file changed +21 -22
compiler/packages/babel-plugin-react-compiler/src/Entrypoint/Program.ts
+21 -22
@@ -24,7 +24,7 @@ import { isHookDeclaration } from "../Utils/HookDeclaration";
24 import { assertExhaustive } from "../Utils/utils";
25 import { insertGatedFunctionDeclaration } from "./Gating";
26 import { addImportsToProgram, updateMemoCacheFunctionImport } from "./Imports";
27 -import { PluginOptions, parsePluginOptions } from "./Options";
27 +import { PluginOptions } from "./Options";
28 import { compileFn } from "./Pipeline";
29 import {
30 filterSuppressionsThatAffectFunction,
@@ -217,9 +217,7 @@ export function compileProgram(
217 program: NodePath<t.Program>,
218 pass: CompilerPass
219 ): void {
220 - const options = parsePluginOptions(pass.opts);
221 -
222 - if (options.sources) {
220 + if (pass.opts.sources) {
221 if (pass.filename === null) {
222 const error = new CompilerError();
223 error.pushErrorDetail(
@@ -235,21 +233,22 @@ export function compileProgram(
233 return;
234 }
235
238 - if (!isFilePartOfSources(options.sources, pass.filename)) {
236 + if (!isFilePartOfSources(pass.opts.sources, pass.filename)) {
237 return;
238 }
239 }
240
241 // Top level "use no forget", skip this file entirely
242 if (
245 - findDirectiveDisablingMemoization(program.node.directives, options) != null
243 + findDirectiveDisablingMemoization(program.node.directives, pass.opts) !=
244 + null
245 ) {
246 return;
247 }
248
249 const environment = parseEnvironmentConfig(pass.opts.environment ?? {});
250 const useMemoCacheIdentifier = program.scope.generateUidIdentifier("c");
252 - const moduleName = options.runtimeModule ?? "react/compiler-runtime";
251 + const moduleName = pass.opts.runtimeModule ?? "react/compiler-runtime";
252 if (hasMemoCacheFunctionImport(program, moduleName)) {
253 return;
254 }
@@ -261,8 +260,8 @@ export function compileProgram(
260 */
261 const suppressions = findProgramSuppressions(
262 pass.comments,
264 - options.eslintSuppressionRules ?? DEFAULT_ESLINT_SUPPRESSIONS,
265 - options.flowSuppressions
263 + pass.opts.eslintSuppressionRules ?? DEFAULT_ESLINT_SUPPRESSIONS,
264 + pass.opts.flowSuppressions
265 );
266 const lintError = suppressionsToCompilerError(suppressions);
267 let hasCriticalError = lintError != null;
@@ -319,11 +318,11 @@ export function compileProgram(
318 config,
319 fnType,
320 useMemoCacheIdentifier.name,
322 - options.logger,
321 + pass.opts.logger,
322 pass.filename,
323 pass.code
324 );
326 - options.logger?.logEvent(pass.filename, {
325 + pass.opts.logger?.logEvent(pass.filename, {
326 kind: "CompileSuccess",
327 fnLoc: fn.node.loc ?? null,
328 fnName: compiledFn.id?.name ?? null,
@@ -373,12 +372,12 @@ export function compileProgram(
372 },
373 {
374 ...pass,
376 - opts: { ...pass.opts, ...options },
375 + opts: { ...pass.opts, ...pass.opts },
376 filename: pass.filename ?? null,
377 }
378 );
379
381 - if (options.gating != null) {
380 + if (pass.opts.gating != null) {
381 const error = checkFunctionReferencedBeforeDeclarationAtTopLevel(
382 program,
383 compiledFns.map(({ originalFn }) => originalFn)
@@ -393,13 +392,13 @@ export function compileProgram(
392 let gating: null | ExternalFunction = null;
393 try {
394 // TODO: check for duplicate import specifiers
396 - if (options.gating != null) {
397 - gating = tryParseExternalFunction(options.gating);
395 + if (pass.opts.gating != null) {
396 + gating = tryParseExternalFunction(pass.opts.gating);
397 externalFunctions.push(gating);
398 }
399
400 const enableEmitInstrumentForget =
402 - options.environment?.enableEmitInstrumentForget;
401 + pass.opts.environment?.enableEmitInstrumentForget;
402 if (enableEmitInstrumentForget != null) {
403 externalFunctions.push(
404 tryParseExternalFunction(enableEmitInstrumentForget.fn)
@@ -411,23 +410,23 @@ export function compileProgram(
410 }
411 }
412
414 - if (options.environment?.enableEmitFreeze != null) {
413 + if (pass.opts.environment?.enableEmitFreeze != null) {
414 const enableEmitFreeze = tryParseExternalFunction(
416 - options.environment.enableEmitFreeze
415 + pass.opts.environment.enableEmitFreeze
416 );
417 externalFunctions.push(enableEmitFreeze);
418 }
419
421 - if (options.environment?.enableEmitHookGuards != null) {
420 + if (pass.opts.environment?.enableEmitHookGuards != null) {
421 const enableEmitHookGuards = tryParseExternalFunction(
423 - options.environment.enableEmitHookGuards
422 + pass.opts.environment.enableEmitHookGuards
423 );
424 externalFunctions.push(enableEmitHookGuards);
425 }
426
428 - if (options.environment?.enableChangeDetectionForDebugging != null) {
427 + if (pass.opts.environment?.enableChangeDetectionForDebugging != null) {
428 const enableChangeDetectionForDebugging = tryParseExternalFunction(
430 - options.environment.enableChangeDetectionForDebugging
429 + pass.opts.environment.enableChangeDetectionForDebugging
430 );
431 externalFunctions.push(enableChangeDetectionForDebugging);
432 }