facebook / jsx

The JSX specification is a XML-like syntax extension to ECMAScript.
http://facebook.github.io/jsx/
1.95k stars 133 forks source link

Normative: disallows UnicodeEscapeSequence #139

Open Jack-Works opened 2 years ago

Jack-Works commented 2 years ago

For the following code:

import React from 'react'
const x = <video></\u0076ideo>

TypeScript: accept this syntax

TypeScript: reject this syntax after https://github.com/microsoft/TypeScript/pull/48609

Babel: syntax error

swc: syntax error

esbuild: npx esbuild --loader=jsx <<< 'const x = <video></\u0076ideo>'

> <stdin>:1:19: error: Expected identifier but found "\\"
    1 │ const x = <video></\u0076ideo>
      ╵                    ^

Suggested change

Disallows UnicodeEscapeSequence in the JSXIdentifier

Another path

Allow UnicodeEscapeSequence but require them to match in the opening and the closing tag, which means <video></\u0076ideo> is a syntax error (tag mismatch) but <\u0076ideo /> is OK.

wooorm commented 2 years ago
npx esbuild --loader=jsx <<< 'const x = <video></\u0076ideo>'
 > <stdin>:1:19: error: Expected identifier but found "\\"
    1 │ const x = <video></\u0076ideo>
      ╵                    ^

1 error
Huxpro commented 2 years ago

Thanks for catching this! Since implementation already diverged on this, I think we need some discussion and reach a consensus before making this change.

Jack-Works commented 2 years ago

Actually only typescript accepts Unicode escape sequences. Maybe a LGTM from the Typescript team is enough.

RyanCavanaugh commented 2 years ago

Happy to disallow this from the TypeScript side

Jack-Works commented 11 months ago

hi! Since TypeScript merges https://github.com/microsoft/TypeScript/pull/48609, now this is consistent behavior across the most common transpilers in the ecosystem, that is disallows UnicodeEscapeSequence in JSXIdentifier. I think this PR can be merged now. I don't know who I can ping because Huxpro has left Meta. Maybe @sebmarkbage? Please take a look, thanks!

Huxpro commented 8 months ago

hi! Since TypeScript merges microsoft/TypeScript#48609, now this is consistent behavior across the most common transpilers in the ecosystem, that is disallows UnicodeEscapeSequence in JSXIdentifier. I think this PR can be merged now. I don't know who I can ping because Huxpro has left Meta. Maybe @sebmarkbage? Please take a look, thanks!

Thanks @Jack-Works! @sebmarkbage actually left before me 😂.

I'm supportive of this change. Maybe @poteto can take a look?