From 10fe6b5901c61604a1eeb0b1e1c9d8fbd7f554c9 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 20 Jun 2024 18:17:13 -0400 Subject: [PATCH 1/5] Update [ghstack-poisoned] --- .../ReactiveScopes/CodegenReactiveFunction.ts | 14 ++++++++++--- ...g-attribute-expression-container.expect.md | Bin 0 -> 1171 bytes ...x-string-attribute-expression-container.js | 19 ++++++++++++++++++ 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md create mode 100644 compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js diff --git a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts index 3886628c809..a2a64cedbcf 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts @@ -2157,10 +2157,18 @@ function codegenInstructionValue( } /** - * Due to a bug in earlier Babel versions, JSX string attributes with double quotes or with unicode characters - * may be escaped unnecessarily. To avoid trigger this Babel bug, we use a JsxExpressionContainer for such strings. + * Due to a bug in earlier Babel versions, JSX string attributes with double quotes, unicode characters, or special + * control characters such as \n may be escaped unnecessarily. To avoid trigger this Babel bug, we use a + * JsxExpressionContainer for such strings. + * + * u0000 to u001F: C0 control codes + * u007F: Delete character + * u0080 to u009F: C1 control codes + * u00A0 to uFFFF: All non-basic Latin characters + * https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes */ -const STRING_REQUIRES_EXPR_CONTAINER_PATTERN = /[\u{0080}-\u{FFFF}]|"/u; +const STRING_REQUIRES_EXPR_CONTAINER_PATTERN = + /[\u{0000}-\u{001F}|\u{007F}|\u{0080}-\u{FFFF}]|"/u; function codegenJsxAttribute( cx: Context, attribute: JsxAttribute diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md new file mode 100644 index 0000000000000000000000000000000000000000..188933c21b35c623eb9981f413a5052411cd5e52 GIT binary patch literal 1171 zcmb`H(Q4Z;6oz*@J;j;R3kSN!8G~&}Tom!bVdZO_8ZrTQag7T8v@rDR#3b z+#aGwlH1H~yQ>)tl8$|J{_j5$84O?{ib@l*Ua!B=EiIW!3r&(rFr7*PbD0-XaH0Jn z)C53rT`2)R4gqGHbbDw=I9~E=4O^O3JgmJ{72xAFFnTG&zt zmp615pN-l=hEvjzUGb(Qzjj4I(-AN$3n~t4TW>QP*_r*BUl&qoU{aJCJ}f>j&rYH^ zI$oZ9`SfvdyoAtVNW^4^W*-q0RMEVgzxAGFbv`J zCjTn4gG4Id?Q@XxT*i#DOCFbKaVmJ`4IL)H44BjT+;#ea*Bzhx(Z19D_^NszynDN< z=5JpABahcw{#QTUc@AJj1300r@&&#JVi?_d+L}q1-zJa!RyK+n_6Yk5wPf^Z)?O;<0 v0QT_!A}kJMrOkEWU!`I*0eLlamw*%YtUX9>cJw^z%-yN(EIC*2maL< + + + + + + ); +} + +function Text({ value }) { + return {value}; +} + +export const FIXTURE_ENTRYPOINT = { + fn: Component, + params: [{}], +}; From 76ccf567938d939c866d49c29123c6ef3dd65c33 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 20 Jun 2024 18:19:52 -0400 Subject: [PATCH 2/5] Update [ghstack-poisoned] --- compiler/.eslintrc.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compiler/.eslintrc.js b/compiler/.eslintrc.js index 996046a1300..2f68f5c3103 100644 --- a/compiler/.eslintrc.js +++ b/compiler/.eslintrc.js @@ -43,6 +43,12 @@ module.exports = { "multiline-comment-style": ["error", "starred-block"], + /** + * We sometimes need to check for control characters in regexes for things like preserving input + * strings + */ + "no-control-regex": "off", + "@typescript-eslint/no-empty-function": "off", /* @@ -82,7 +88,7 @@ module.exports = { ], "@typescript-eslint/array-type": ["error", { default: "generic" }], "@typescript-eslint/triple-slash-reference": "off", - "@typescript-eslint/no-var-requires": "off" + "@typescript-eslint/no-var-requires": "off", }, parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], From 3206bec4d7a87344656a25419dd435023d545803 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 20 Jun 2024 18:20:33 -0400 Subject: [PATCH 3/5] Update [ghstack-poisoned] --- .../src/ReactiveScopes/CodegenReactiveFunction.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts index a2a64cedbcf..d6818187bb2 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts +++ b/compiler/packages/babel-plugin-react-compiler/src/ReactiveScopes/CodegenReactiveFunction.ts @@ -2162,7 +2162,7 @@ function codegenInstructionValue( * JsxExpressionContainer for such strings. * * u0000 to u001F: C0 control codes - * u007F: Delete character + * u007F : Delete character * u0080 to u009F: C1 control codes * u00A0 to uFFFF: All non-basic Latin characters * https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes From 369eca534727461edf79f86e2db528df38ce8e91 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 20 Jun 2024 18:21:49 -0400 Subject: [PATCH 4/5] Update [ghstack-poisoned] --- ...g-attribute-expression-container.expect.md | Bin 1171 -> 1095 bytes ...x-string-attribute-expression-container.js | 1 - 2 files changed, 1 deletion(-) diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md index 188933c21b35c623eb9981f413a5052411cd5e52..522d08207afa60a426f1c51c2feb239d0eb98152 100644 GIT binary patch delta 26 icmbQtd7NWHj&X7u}plMote%tvNPD|7Z)VvP3B^; F1ptxB4(k8_ diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js index 77dd7e51449..25b78076bbe 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js @@ -1,7 +1,6 @@ function Component() { return (
- From 8f9a565f74f8430da350a7e17154872a4b867fa6 Mon Sep 17 00:00:00 2001 From: Lauren Tan Date: Thu, 20 Jun 2024 18:26:51 -0400 Subject: [PATCH 5/5] Update [ghstack-poisoned] --- .../jsx-string-attribute-expression-container.expect.md | 9 ++++++++- .../jsx-string-attribute-expression-container.js | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md index 522d08207af..ad25964ed83 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.expect.md @@ -5,8 +5,11 @@ function Component() { return (
+ + +
); @@ -33,8 +36,11 @@ function Component() { if ($[0] === Symbol.for("react.memo_cache_sentinel")) { t0 = (
+ + +
); @@ -67,4 +73,5 @@ export const FIXTURE_ENTRYPOINT = { ``` ### Eval output -(kind: ok)
A E나은Sathya
\ No newline at end of file +(kind: ok)
+A E나은Laurenசத்யாSathya
\ No newline at end of file diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js index 25b78076bbe..042b95f3481 100644 --- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js +++ b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/jsx-string-attribute-expression-container.js @@ -1,8 +1,11 @@ function Component() { return (
+ + +
);