-
Notifications
You must be signed in to change notification settings - Fork 47k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[compiler] Provide support for custom fbt-like macro functions
ghstack-source-id: e3c6455ac2240914c3f25f3266a0cbb4a63971b5 Pull Request resolved: #29893
- Loading branch information
1 parent
2ba462b
commit a07f5a3
Showing
7 changed files
with
198 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
.../__tests__/fixtures/compiler/meta-isms/repro-cx-assigned-to-temporary.expect.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
|
||
## Input | ||
|
||
```javascript | ||
// @compilationMode(infer) @enableAssumeHooksFollowRulesOfReact:false @customMacros(cx) | ||
import { identity } from "shared-runtime"; | ||
|
||
const DARK = "dark"; | ||
|
||
function Component() { | ||
const theme = useTheme(); | ||
return ( | ||
<div | ||
className={cx({ | ||
"styles/light": true, | ||
"styles/dark": theme.getTheme() === DARK, | ||
})} | ||
/> | ||
); | ||
} | ||
|
||
function cx(obj) { | ||
const classes = []; | ||
for (const [key, value] of Object.entries(obj)) { | ||
if (value) { | ||
classes.push(key); | ||
} | ||
} | ||
return classes.join(" "); | ||
} | ||
|
||
function useTheme() { | ||
return { | ||
getTheme() { | ||
return DARK; | ||
}, | ||
}; | ||
} | ||
|
||
export const FIXTURE_ENTRYPOINT = { | ||
fn: Component, | ||
params: [{}], | ||
}; | ||
|
||
``` | ||
|
||
## Code | ||
|
||
```javascript | ||
import { c as _c } from "react/compiler-runtime"; // @compilationMode(infer) @enableAssumeHooksFollowRulesOfReact:false @customMacros(cx) | ||
import { identity } from "shared-runtime"; | ||
|
||
const DARK = "dark"; | ||
|
||
function Component() { | ||
const $ = _c(2); | ||
const theme = useTheme(); | ||
|
||
const t0 = cx({ | ||
"styles/light": true, | ||
"styles/dark": theme.getTheme() === DARK, | ||
}); | ||
let t1; | ||
if ($[0] !== t0) { | ||
t1 = <div className={t0} />; | ||
$[0] = t0; | ||
$[1] = t1; | ||
} else { | ||
t1 = $[1]; | ||
} | ||
return t1; | ||
} | ||
|
||
function cx(obj) { | ||
const classes = []; | ||
for (const [key, value] of Object.entries(obj)) { | ||
if (value) { | ||
classes.push(key); | ||
} | ||
} | ||
return classes.join(" "); | ||
} | ||
|
||
function useTheme() { | ||
return { | ||
getTheme() { | ||
return DARK; | ||
}, | ||
}; | ||
} | ||
|
||
export const FIXTURE_ENTRYPOINT = { | ||
fn: Component, | ||
params: [{}], | ||
}; | ||
|
||
``` | ||
### Eval output | ||
(kind: ok) <div class="styles/light styles/dark"></div> |
39 changes: 39 additions & 0 deletions
39
...eact-compiler/src/__tests__/fixtures/compiler/meta-isms/repro-cx-assigned-to-temporary.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
// @compilationMode(infer) @enableAssumeHooksFollowRulesOfReact:false @customMacros(cx) | ||
import { identity } from "shared-runtime"; | ||
|
||
const DARK = "dark"; | ||
|
||
function Component() { | ||
const theme = useTheme(); | ||
return ( | ||
<div | ||
className={cx({ | ||
"styles/light": true, | ||
"styles/dark": theme.getTheme() === DARK, | ||
})} | ||
/> | ||
); | ||
} | ||
|
||
function cx(obj) { | ||
const classes = []; | ||
for (const [key, value] of Object.entries(obj)) { | ||
if (value) { | ||
classes.push(key); | ||
} | ||
} | ||
return classes.join(" "); | ||
} | ||
|
||
function useTheme() { | ||
return { | ||
getTheme() { | ||
return DARK; | ||
}, | ||
}; | ||
} | ||
|
||
export const FIXTURE_ENTRYPOINT = { | ||
fn: Component, | ||
params: [{}], | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typo