From 4fa23127fcd9281c39e87120d5f690ec293a7fd8 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Wed, 12 Apr 2017 12:08:12 -0700 Subject: [PATCH] Fixing consuming whitespace in children --- src/compiler/checker.ts | 4 +++- src/compiler/emitter.ts | 2 +- src/compiler/scanner.ts | 8 ++++---- src/compiler/types.ts | 4 ++-- src/services/formatting/smartIndenter.ts | 2 +- src/services/textChanges.ts | 2 +- src/services/utilities.ts | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 18ad0c0437c..745d38bd043 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13327,7 +13327,9 @@ namespace ts { childrenTypes.push(checkExpression(child, checkMode)); } } - childrenPropSymbol.type = getUnionType(childrenTypes, /*subtypeReduction*/ false); + childrenPropSymbol.type = childrenTypes.length === 1 ? + childrenTypes[0] : + createArrayType(getUnionType(childrenTypes, /*subtypeReduction*/ false)); attributesTable.set(jsxChildrenPropertyName, childrenPropSymbol); containsSynthesizedJsxChildren = true; } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 69b5188878f..669c9f5dd36 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -2457,7 +2457,7 @@ namespace ts { let indentation: number; for (const line of lines) { for (let i = 0; i < line.length && (indentation === undefined || i < indentation); i++) { - if (!isWhiteSpace(line.charCodeAt(i))) { + if (!isWhiteSpaceLike(line.charCodeAt(i))) { if (indentation === undefined || i < indentation) { indentation = i; break; diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 2d7ca500893..8f2cacd3e38 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -366,7 +366,7 @@ namespace ts { return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); } - export function isWhiteSpace(ch: number): boolean { + export function isWhiteSpaceLike(ch: number): boolean { return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); } @@ -510,7 +510,7 @@ namespace ts { break; default: - if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpace(ch))) { + if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { pos++; continue; } @@ -691,7 +691,7 @@ namespace ts { } break scan; default: - if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpace(ch))) { + if (ch > CharacterCodes.maxAsciiCharacter && (isWhiteSpaceLike(ch))) { if (hasPendingCommentRange && isLineBreak(ch)) { pendingHasTrailingNewLine = true; } @@ -1750,7 +1750,7 @@ namespace ts { if (isLineBreak(char) && firstNonWhitespace === 0) { firstNonWhitespace = -1; } - else if (!isWhiteSpaceSingleLine(char)) { + else if (!isWhiteSpaceLike(char)) { firstNonWhitespace = pos; } pos++; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d52f277c9ef..fe415431c77 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1572,8 +1572,8 @@ } export interface JsxText extends Node { - kind: SyntaxKind.JsxText, - containsOnlyWhiteSpaces: boolean, + kind: SyntaxKind.JsxText; + containsOnlyWhiteSpaces: boolean; parent?: JsxElement; } diff --git a/src/services/formatting/smartIndenter.ts b/src/services/formatting/smartIndenter.ts index b5c901482a7..01feaf39081 100644 --- a/src/services/formatting/smartIndenter.ts +++ b/src/services/formatting/smartIndenter.ts @@ -54,7 +54,7 @@ namespace ts.formatting { let current = position; while (current > 0) { const char = sourceFile.text.charCodeAt(current); - if (!isWhiteSpace(char)) { + if (!isWhiteSpaceLike(char)) { break; } current--; diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index d7056cfdca2..e63c46ea8ce 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -608,7 +608,7 @@ namespace ts.textChanges { if (force || !isTrivia(s)) { this.lastNonTriviaPosition = this.writer.getTextPos(); let i = 0; - while (isWhiteSpace(s.charCodeAt(s.length - i - 1))) { + while (isWhiteSpaceLike(s.charCodeAt(s.length - i - 1))) { i++; } // trim trailing whitespaces diff --git a/src/services/utilities.ts b/src/services/utilities.ts index fe9a310ad4b..5a1acdf1cec 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1381,7 +1381,7 @@ namespace ts { } export function getFirstNonSpaceCharacterPosition(text: string, position: number) { - while (isWhiteSpace(text.charCodeAt(position))) { + while (isWhiteSpaceLike(text.charCodeAt(position))) { position += 1; } return position;