@@ -367,7 +367,7 @@ namespace ts {
367367 return computeLineAndCharacterOfPosition ( getLineStarts ( sourceFile ) , position ) ;
368368 }
369369
370- export function isWhiteSpace ( ch : number ) : boolean {
370+ export function isWhiteSpaceLike ( ch : number ) : boolean {
371371 return isWhiteSpaceSingleLine ( ch ) || isLineBreak ( ch ) ;
372372 }
373373
@@ -512,7 +512,7 @@ namespace ts {
512512 break ;
513513
514514 default :
515- if ( ch > CharacterCodes . maxAsciiCharacter && ( isWhiteSpace ( ch ) ) ) {
515+ if ( ch > CharacterCodes . maxAsciiCharacter && ( isWhiteSpaceLike ( ch ) ) ) {
516516 pos ++ ;
517517 continue ;
518518 }
@@ -694,7 +694,7 @@ namespace ts {
694694 }
695695 break scan;
696696 default :
697- if ( ch > CharacterCodes . maxAsciiCharacter && ( isWhiteSpace ( ch ) ) ) {
697+ if ( ch > CharacterCodes . maxAsciiCharacter && ( isWhiteSpaceLike ( ch ) ) ) {
698698 if ( hasPendingCommentRange && isLineBreak ( ch ) ) {
699699 pendingHasTrailingNewLine = true ;
700700 }
@@ -1727,8 +1727,12 @@ namespace ts {
17271727 return token = SyntaxKind . OpenBraceToken ;
17281728 }
17291729
1730+ // First non-whitespace character on this line.
1731+ let firstNonWhitespace = 0 ;
1732+ // These initial values are special because the first line is:
1733+ // firstNonWhitespace = 0 to indicate that we want leading whitspace,
1734+
17301735 while ( pos < end ) {
1731- pos ++ ;
17321736 char = text . charCodeAt ( pos ) ;
17331737 if ( char === CharacterCodes . openBrace ) {
17341738 break ;
@@ -1740,8 +1744,23 @@ namespace ts {
17401744 }
17411745 break ;
17421746 }
1747+
1748+ // FirstNonWhitespace is 0, then we only see whitespaces so far. If we see a linebreak, we want to ignore that whitespaces.
1749+ // i.e (- : whitespace)
1750+ // <div>----
1751+ // </div> becomes <div></div>
1752+ //
1753+ // <div>----</div> becomes <div>----</div>
1754+ if ( isLineBreak ( char ) && firstNonWhitespace === 0 ) {
1755+ firstNonWhitespace = - 1 ;
1756+ }
1757+ else if ( ! isWhiteSpaceLike ( char ) ) {
1758+ firstNonWhitespace = pos ;
1759+ }
1760+ pos ++ ;
17431761 }
1744- return token = SyntaxKind . JsxText ;
1762+
1763+ return firstNonWhitespace === - 1 ? SyntaxKind . JsxTextAllWhiteSpaces : SyntaxKind . JsxText ;
17451764 }
17461765
17471766 // Scans a JSX identifier; these differ from normal identifiers in that
0 commit comments