@@ -27,6 +27,7 @@ namespace ts {
2727 reScanSlashToken ( ) : SyntaxKind ;
2828 reScanTemplateToken ( ) : SyntaxKind ;
2929 scanJsxIdentifier ( ) : SyntaxKind ;
30+ scanJsxAttributeValue ( ) : SyntaxKind ;
3031 reScanJsxToken ( ) : SyntaxKind ;
3132 scanJsxToken ( ) : SyntaxKind ;
3233 scanJSDocToken ( ) : SyntaxKind ;
@@ -817,6 +818,7 @@ namespace ts {
817818 reScanSlashToken,
818819 reScanTemplateToken,
819820 scanJsxIdentifier,
821+ scanJsxAttributeValue,
820822 reScanJsxToken,
821823 scanJsxToken,
822824 scanJSDocToken,
@@ -911,7 +913,7 @@ namespace ts {
911913 return value ;
912914 }
913915
914- function scanString ( ) : string {
916+ function scanString ( allowEscapes = true ) : string {
915917 const quote = text . charCodeAt ( pos ) ;
916918 pos ++ ;
917919 let result = "" ;
@@ -929,7 +931,7 @@ namespace ts {
929931 pos ++ ;
930932 break ;
931933 }
932- if ( ch === CharacterCodes . backslash ) {
934+ if ( ch === CharacterCodes . backslash && allowEscapes ) {
933935 result += text . substring ( start , pos ) ;
934936 result += scanEscapeSequence ( ) ;
935937 start = pos ;
@@ -1737,6 +1739,20 @@ namespace ts {
17371739 return token ;
17381740 }
17391741
1742+ function scanJsxAttributeValue ( ) : SyntaxKind {
1743+ startPos = pos ;
1744+
1745+ switch ( text . charCodeAt ( pos ) ) {
1746+ case CharacterCodes . doubleQuote :
1747+ case CharacterCodes . singleQuote :
1748+ tokenValue = scanString ( /*allowEscapes*/ false ) ;
1749+ return token = SyntaxKind . StringLiteral ;
1750+ default :
1751+ // If this scans anything other than `{`, it's a parse error.
1752+ return scan ( ) ;
1753+ }
1754+ }
1755+
17401756 function scanJSDocToken ( ) : SyntaxKind {
17411757 if ( pos >= end ) {
17421758 return token = SyntaxKind . EndOfFileToken ;
0 commit comments