Skip to content

Commit 992bd7a

Browse files
committed
Merge pull request #5993 from RyanCavanaugh/fix5991
Parse JSX attributes as AssignmentExpressions
2 parents 9d5af80 + 51c5474 commit 992bd7a

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

src/compiler/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3639,7 +3639,7 @@ namespace ts {
36393639

36403640
parseExpected(SyntaxKind.OpenBraceToken);
36413641
if (token !== SyntaxKind.CloseBraceToken) {
3642-
node.expression = parseExpression();
3642+
node.expression = parseAssignmentExpressionOrHigher();
36433643
}
36443644
if (inExpressionContext) {
36453645
parseExpected(SyntaxKind.CloseBraceToken);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
tests/cases/conformance/jsx/file.tsx(12,36): error TS1005: '}' expected.
2+
tests/cases/conformance/jsx/file.tsx(12,44): error TS1003: Identifier expected.
3+
tests/cases/conformance/jsx/file.tsx(12,46): error TS1161: Unterminated regular expression literal.
4+
5+
6+
==== tests/cases/conformance/jsx/file.tsx (3 errors) ====
7+
8+
declare module JSX {
9+
interface Element { }
10+
interface IntrinsicElements {
11+
[s: string]: any;
12+
}
13+
}
14+
15+
// This should be a parse error
16+
const class1 = "foo";
17+
const class2 = "bar";
18+
const elem = <div className={class1, class2}/>;
19+
~
20+
!!! error TS1005: '}' expected.
21+
~
22+
!!! error TS1003: Identifier expected.
23+
24+
!!! error TS1161: Unterminated regular expression literal.
25+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//// [file.tsx]
2+
3+
declare module JSX {
4+
interface Element { }
5+
interface IntrinsicElements {
6+
[s: string]: any;
7+
}
8+
}
9+
10+
// This should be a parse error
11+
const class1 = "foo";
12+
const class2 = "bar";
13+
const elem = <div className={class1, class2}/>;
14+
15+
16+
//// [file.jsx]
17+
// This should be a parse error
18+
var class1 = "foo";
19+
var class2 = "bar";
20+
var elem = <div className={class1} class2/>;
21+
/>;;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//@jsx: preserve
2+
3+
//@filename: file.tsx
4+
declare module JSX {
5+
interface Element { }
6+
interface IntrinsicElements {
7+
[s: string]: any;
8+
}
9+
}
10+
11+
// This should be a parse error
12+
const class1 = "foo";
13+
const class2 = "bar";
14+
const elem = <div className={class1, class2}/>;

0 commit comments

Comments
 (0)