Parse JSX attributes as AssignmentExpressions

We should issue an error when parsing `<div x={1, 2} />` as the comma operator is not a legal production in a JSX Expression

Fixes (mitigates?) bug #5991
This commit is contained in:
Ryan Cavanaugh
2015-12-08 09:53:47 -08:00
parent 7c1ef22cff
commit 51c547428b
4 changed files with 61 additions and 1 deletions

View File

@@ -3639,7 +3639,7 @@ namespace ts {
parseExpected(SyntaxKind.OpenBraceToken);
if (token !== SyntaxKind.CloseBraceToken) {
node.expression = parseExpression();
node.expression = parseAssignmentExpressionOrHigher();
}
if (inExpressionContext) {
parseExpected(SyntaxKind.CloseBraceToken);

View File

@@ -0,0 +1,25 @@
tests/cases/conformance/jsx/file.tsx(12,36): error TS1005: '}' expected.
tests/cases/conformance/jsx/file.tsx(12,44): error TS1003: Identifier expected.
tests/cases/conformance/jsx/file.tsx(12,46): error TS1161: Unterminated regular expression literal.
==== tests/cases/conformance/jsx/file.tsx (3 errors) ====
declare module JSX {
interface Element { }
interface IntrinsicElements {
[s: string]: any;
}
}
// This should be a parse error
const class1 = "foo";
const class2 = "bar";
const elem = <div className={class1, class2}/>;
~
!!! error TS1005: '}' expected.
~
!!! error TS1003: Identifier expected.
!!! error TS1161: Unterminated regular expression literal.

View File

@@ -0,0 +1,21 @@
//// [file.tsx]
declare module JSX {
interface Element { }
interface IntrinsicElements {
[s: string]: any;
}
}
// This should be a parse error
const class1 = "foo";
const class2 = "bar";
const elem = <div className={class1, class2}/>;
//// [file.jsx]
// This should be a parse error
var class1 = "foo";
var class2 = "bar";
var elem = <div className={class1} class2/>;
/>;;

View File

@@ -0,0 +1,14 @@
//@jsx: preserve
//@filename: file.tsx
declare module JSX {
interface Element { }
interface IntrinsicElements {
[s: string]: any;
}
}
// This should be a parse error
const class1 = "foo";
const class2 = "bar";
const elem = <div className={class1, class2}/>;