Skip to content

Commit a3a4993

Browse files
authored
Don't parse out a name for JSX fragments (#52818)
1 parent ddfec78 commit a3a4993

File tree

5 files changed

+17
-14
lines changed

5 files changed

+17
-14
lines changed

src/compiler/parser.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6151,10 +6151,7 @@ namespace Parser {
61516151
function parseJsxClosingFragment(inExpressionContext: boolean): JsxClosingFragment {
61526152
const pos = getNodePos();
61536153
parseExpected(SyntaxKind.LessThanSlashToken);
6154-
if (tokenIsIdentifierOrKeyword(token())) {
6155-
parseErrorAtRange(parseJsxElementName(), Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
6156-
}
6157-
if (parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
6154+
if (parseExpected(SyntaxKind.GreaterThanToken, Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment, /*shouldAdvance*/ false)) {
61586155
// manually advance the scanner in order to look for jsx text inside jsx
61596156
if (inExpressionContext) {
61606157
nextToken();

tests/baselines/reference/tsxFragmentErrors.errors.txt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
tests/cases/conformance/jsx/file.tsx(9,1): error TS2657: JSX expressions must have one parent element.
1+
tests/cases/conformance/jsx/file.tsx(9,7): error TS2304: Cannot find name 'div'.
22
tests/cases/conformance/jsx/file.tsx(9,7): error TS17015: Expected corresponding closing tag for JSX fragment.
33
tests/cases/conformance/jsx/file.tsx(9,11): error TS17014: JSX fragment has no corresponding closing tag.
44
tests/cases/conformance/jsx/file.tsx(11,17): error TS1005: '</' expected.
@@ -14,16 +14,14 @@ tests/cases/conformance/jsx/file.tsx(11,17): error TS1005: '</' expected.
1414
declare var React: any;
1515

1616
<>hi</div> // Error
17-
~~~~~~~~~~~~~~~~~~~
17+
~~~
18+
!!! error TS2304: Cannot find name 'div'.
1819
~~~
1920
!!! error TS17015: Expected corresponding closing tag for JSX fragment.
2021
~~~~~~~~~
2122

2223

23-
2424
<>eof // Error
25-
~~~~~~~~~~~~~~~~
26-
!!! error TS2657: JSX expressions must have one parent element.
2725
~~
2826
!!! error TS17014: JSX fragment has no corresponding closing tag.
2927

tests/baselines/reference/tsxFragmentErrors.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ declare var React: any;
1212
<>eof // Error
1313

1414
//// [file.js]
15-
React.createElement(React.Fragment, null, "hi") // Error
16-
, // Error
17-
React.createElement(React.Fragment, null, "eof // Error");
15+
React.createElement(React.Fragment, null, "hi");
16+
div > // Error
17+
React.createElement(React.Fragment, null, "eof // Error");

tests/baselines/reference/tsxFragmentErrors.types

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ declare var React: any;
1010
>React : any
1111

1212
<>hi</div> // Error
13-
><>hi</div> // Error<>eof // Error : JSX.Element
14-
><>hi</div> : JSX.Element
13+
><>hi</ : JSX.Element
14+
>div> // Error<>eof // Error : boolean
15+
>div : any
1516

1617
<>eof // Error
1718
><>eof // Error : JSX.Element
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
//@Filename: file.tsx
4+
//// declare function Foo(): any;
5+
//// let x = <></Fo/*$*/o>;
6+
7+
verify.quickInfoAt("$", "let Foo: any");

0 commit comments

Comments
 (0)