From bae18b4dfe122bb9ccc3e3553ecdc1af654cd217 Mon Sep 17 00:00:00 2001 From: Sathya Gunsasekaran Date: Wed, 31 Jul 2024 14:35:35 +0100 Subject: [PATCH] [compiler] Add flag for lowering context access *This is only for internal profiling, not intended to ship.* ghstack-source-id: e48998b7be4272199c8a6ff9cc2ec0975add5030 Pull Request resolved: https://github.com/facebook/react/pull/30547 --- .../src/HIR/Environment.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts index 3dd824effb..05c90b355c 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/Environment.ts @@ -434,6 +434,25 @@ const EnvironmentConfigSchema = z.object({ * Here the variables `ref` and `myRef` will be typed as Refs. */ enableTreatRefLikeIdentifiersAsRefs: z.boolean().nullable().default(false), + + /* + * If enabled, this lowers any calls to `useContext` hook to use a selector + * function. + * + * The compiler automatically figures out the keys by looking for the immediate + * destructuring of the return value from the useContext call. In the future, + * this can be extended to different kinds of context access like property + * loads and accesses over multiple statements as well. + * + * ``` + * // input + * const {foo, bar} = useContext(MyContext); + * + * // output + * const {foo, bar} = useContext(MyContext, (c) => [c.foo, c.bar]); + * ``` + */ + enableLowerContextAccess: z.boolean().nullable().default(false), }); export type EnvironmentConfig = z.infer;