diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 50e827c17bd24..6a9e66faa424b 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -974,10 +974,14 @@ export function isIdentifierStart(ch: number, languageVersion: ScriptTarget | un ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierStart(ch, languageVersion); } -export function isIdentifierPart(ch: number, languageVersion: ScriptTarget | undefined, identifierVariant?: LanguageVariant): boolean { +export function isIdentifierPart(ch: number, languageVersion: ScriptTarget | undefined, identifierVariant?: LanguageVariant): boolean; +/** @internal separate public and internal signatures so that identifierVariant can be passed directly from scanIdentifierParts */ +// eslint-disable-next-line @typescript-eslint/unified-signatures +export function isIdentifierPart(ch: number, languageVersion: ScriptTarget | undefined, identifierVariant?: LanguageVariant | "RegExpGroupName"): boolean; +export function isIdentifierPart(ch: number, languageVersion: ScriptTarget | undefined, identifierVariant?: LanguageVariant | "RegExpGroupName"): boolean { return isWordCharacter(ch) || ch === CharacterCodes.$ || - // "-" and ":" are valid in JSX Identifiers - (identifierVariant === LanguageVariant.JSX ? (ch === CharacterCodes.minus || ch === CharacterCodes.colon) : false) || + // "-" is valid in JSX Identifiers. ":" is part of JSXNamespacedName but not JSXIdentifier. + identifierVariant === LanguageVariant.JSX && ch === CharacterCodes.minus || ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch, languageVersion); } @@ -1328,9 +1332,9 @@ export function createScanner( } const identifierStart = pos; - const { length } = scanIdentifierParts(); + const { length } = scanIdentifierParts(languageVersion); - if (length === 1 && text[identifierStart] === "n") { + if (length === 1 && codePointUnchecked(identifierStart) === CharacterCodes.n) { if (isScientific) { error(Diagnostics.A_bigint_literal_cannot_use_exponential_notation, numericStart, identifierStart - numericStart + 1); } @@ -1644,8 +1648,9 @@ export function createScanner( const escapedValue = parseInt(text.substring(start + 2, pos), 16); const escapedValueString = String.fromCharCode(escapedValue); if ( - flags & EscapeSequenceScanningFlags.AnyUnicodeMode && escapedValue >= 0xD800 && escapedValue <= 0xDBFF && - pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && charCodeUnchecked(pos + 2) !== CharacterCodes.openBrace + flags & EscapeSequenceScanningFlags.AnyUnicodeMode && isLeadingSurrogate(escapedValue) && + pos + 6 < end && codePointUnchecked(pos) === CharacterCodes.backslash && + codePointUnchecked(pos + 1) === CharacterCodes.u && charCodeUnchecked(pos + 2) !== CharacterCodes.openBrace ) { // For regular expressions in any Unicode mode, \u HexLeadSurrogate \u HexTrailSurrogate is treated as a single character // for the purpose of determining whether a character class range is out of order @@ -1659,7 +1664,7 @@ export function createScanner( } } const nextEscapedValue = parseInt(text.substring(nextStart + 2, nextPos), 16); - if (nextEscapedValue >= 0xDC00 && nextEscapedValue <= 0xDFFF) { + if (isTrailingSurrogate(nextEscapedValue)) { pos = nextPos; return escapedValueString + String.fromCharCode(nextEscapedValue); } @@ -1777,55 +1782,6 @@ export function createScanner( return -1; } - function scanIdentifierParts(): string { - let result = ""; - let start = pos; - while (pos < end) { - let ch = codePointUnchecked(pos); - if (isIdentifierPart(ch, languageVersion)) { - pos += charSize(ch); - } - else if (ch === CharacterCodes.backslash) { - ch = peekExtendedUnicodeEscape(); - if (ch >= 0 && isIdentifierPart(ch, languageVersion)) { - result += scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true); - start = pos; - continue; - } - ch = peekUnicodeEscape(); - if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { - break; - } - tokenFlags |= TokenFlags.UnicodeEscape; - result += text.substring(start, pos); - result += utf16EncodeAsString(ch); - // Valid Unicode escape is always six characters - pos += 6; - start = pos; - } - else { - break; - } - } - result += text.substring(start, pos); - return result; - } - - function getIdentifierToken(): SyntaxKind.Identifier | KeywordSyntaxKind { - // Reserved words are between 2 and 12 characters long and start with a lowercase letter - const len = tokenValue.length; - if (len >= 2 && len <= 12) { - const ch = tokenValue.charCodeAt(0); - if (ch >= CharacterCodes.a && ch <= CharacterCodes.z) { - const keyword = textToKeyword.get(tokenValue); - if (keyword !== undefined) { - return token = keyword; - } - } - } - return token = SyntaxKind.Identifier; - } - function scanBinaryOrOctalDigits(base: 2 | 8): string { let value = ""; // For counting number of digits; Valid binaryIntegerLiteral must have at least one binary digit following B or b. @@ -2302,72 +2258,26 @@ export function createScanner( case CharacterCodes.at: pos++; return token = SyntaxKind.AtToken; - case CharacterCodes.backslash: - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { - tokenValue = scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - error(Diagnostics.Invalid_character); - pos++; - return token = SyntaxKind.Unknown; case CharacterCodes.hash: - if (pos !== 0 && text[pos + 1] === "!") { - error(Diagnostics.can_only_be_used_at_the_start_of_a_file, pos, 2); + pos++; + if (pos !== 1 && codePointUnchecked(pos) === CharacterCodes.exclamation) { pos++; + error(Diagnostics.can_only_be_used_at_the_start_of_a_file, pos - 2, 2); return token = SyntaxKind.Unknown; } - const charAfterHash = codePointUnchecked(pos + 1); - if (charAfterHash === CharacterCodes.backslash) { - pos++; - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { - tokenValue = "#" + scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true) + scanIdentifierParts(); - return token = SyntaxKind.PrivateIdentifier; - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = "#" + String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = SyntaxKind.PrivateIdentifier; - } - pos--; - } - - if (isIdentifierStart(charAfterHash, languageVersion)) { - pos++; - // We're relying on scanIdentifier's behavior and adjusting the token kind after the fact. - // Notably absent from this block is the fact that calling a function named "scanIdentifier", - // but identifiers don't include '#', and that function doesn't deal with it at all. - // This works because 'scanIdentifier' tries to reuse source characters and builds up substrings; - // however, it starts at the 'tokenPos' which includes the '#', and will "accidentally" prepend the '#' for us. - scanIdentifier(charAfterHash, languageVersion); - } - else { - tokenValue = "#"; - error(Diagnostics.Invalid_character, pos++, charSize(ch)); + if (!scanIdentifier(languageVersion)) { + error(Diagnostics.Invalid_character, pos - 1, 1); } + tokenValue = "#" + tokenValue; return token = SyntaxKind.PrivateIdentifier; case CharacterCodes.replacementCharacter: error(Diagnostics.File_appears_to_be_binary, 0, 0); pos = end; return token = SyntaxKind.NonTextFileMarkerTrivia; default: - const identifierKind = scanIdentifier(ch, languageVersion); - if (identifierKind) { - return token = identifierKind; + if (scanIdentifier(languageVersion)) { + return token; } else if (isWhiteSpaceSingleLine(ch)) { pos += charSize(ch); @@ -2411,27 +2321,129 @@ export function createScanner( function reScanInvalidIdentifier(): SyntaxKind { Debug.assert(token === SyntaxKind.Unknown, "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'."); pos = tokenStart = fullStartPos; - tokenFlags = 0; - const ch = codePointUnchecked(pos); - const identifierKind = scanIdentifier(ch, ScriptTarget.ESNext); - if (identifierKind) { - return token = identifierKind; - } - pos += charSize(ch); - return token; // Still `SyntaxKind.Unknown` + tokenFlags = TokenFlags.None; + return scanIdentifier(ScriptTarget.ESNext); } - function scanIdentifier(startCharacter: number, languageVersion: ScriptTarget) { - let ch = startCharacter; - if (isIdentifierStart(ch, languageVersion)) { + function scanIdentifierStart(languageVersion: ScriptTarget, identifierVariant?: LanguageVariant | "RegExpGroupName"): string { + const ch = codePointChecked(pos); + if (ch === CharacterCodes.backslash) { + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { + return scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true); + } + + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0) { + if (isIdentifierStart(cookedChar, languageVersion)) { + pos += 6; // Valid Unicode escape is always six characters + tokenFlags |= TokenFlags.UnicodeEscape; + return String.fromCharCode(cookedChar); + } + else if (identifierVariant === "RegExpGroupName" && isLeadingSurrogate(cookedChar) && codePointChecked(pos + 6) === CharacterCodes.backslash) { + pos += 6; + const nextCookedChar = peekUnicodeEscape(); + if (nextCookedChar >= 0 && isTrailingSurrogate(nextCookedChar)) { + const codePoint = utf16SurrogatePairToCodePoint(cookedChar, nextCookedChar); + if (isIdentifierStart(codePoint, languageVersion)) { + // Unlike normal identifiers, group names in regular expressions, whether in Unicode mode or not, + // accepts \u HexLeadSurrogate \u HexTrailSurrogate as part of RegExpIdentifierName. + // See https://github.com/tc39/ecma262/pull/1869 for the change. + pos += 6; + tokenFlags |= TokenFlags.UnicodeEscape; + return utf16EncodeAsString(codePoint); + } + } + pos -= 6; + } + } + } + else if (isIdentifierStart(ch, languageVersion)) { pos += charSize(ch); - while (pos < end && isIdentifierPart(ch = codePointUnchecked(pos), languageVersion)) pos += charSize(ch); - tokenValue = text.substring(tokenStart, pos); + return utf16EncodeAsString(ch); + } + return ""; + } + + function scanIdentifierParts(languageVersion: ScriptTarget, identifierVariant?: LanguageVariant | "RegExpGroupName"): string { + let result = ""; + let start = pos; + while (pos < end) { + const ch = codePointUnchecked(pos); + if (isIdentifierPart(ch, languageVersion, identifierVariant)) { + pos += charSize(ch); + continue; + } + if (ch === CharacterCodes.backslash) { - tokenValue += scanIdentifierParts(); + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierPart(extendedCookedChar, languageVersion, identifierVariant)) { + result += text.substring(start, pos); + result += scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true); + // scanExtendedUnicodeEscape advances pos for us + start = pos; + continue; + } + + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0) { + if (isIdentifierPart(cookedChar, languageVersion, identifierVariant)) { + tokenFlags |= TokenFlags.UnicodeEscape; + result += text.substring(start, pos); + result += String.fromCharCode(cookedChar); + pos += 6; // Valid Unicode escape is always six characters + start = pos; + continue; + } + else if (identifierVariant === "RegExpGroupName" && isLeadingSurrogate(cookedChar) && codePointChecked(pos + 6) === CharacterCodes.backslash) { + pos += 6; + const nextCookedChar = peekUnicodeEscape(); + if (nextCookedChar >= 0 && isTrailingSurrogate(nextCookedChar)) { + const codePoint = utf16SurrogatePairToCodePoint(cookedChar, nextCookedChar); + if (isIdentifierPart(codePoint, languageVersion, identifierVariant)) { + // Unlike normal identifiers, group names in regular expressions, whether in Unicode mode or not, + // accepts \u HexLeadSurrogate \u HexTrailSurrogate as part of RegExpIdentifierName. + // See https://github.com/tc39/ecma262/pull/1869 for the change. + tokenFlags |= TokenFlags.UnicodeEscape; + result += text.substring(start, pos - 6); + result += utf16EncodeAsString(codePoint); + pos += 6; + start = pos; + continue; + } + } + pos -= 6; + } + } } - return getIdentifierToken(); + break; + } + result += text.substring(start, pos); + return result; + } + + function getIdentifierToken(): SyntaxKind.Identifier | KeywordSyntaxKind { + // Reserved words are between 2 and 12 characters long and start with a lowercase letter + const len = tokenValue.length; + if (len >= 2 && len <= 12) { + const ch = tokenValue.charCodeAt(0); + if (ch >= CharacterCodes.a && ch <= CharacterCodes.z) { + const keyword = textToKeyword.get(tokenValue); + if (keyword !== undefined) { + return token = keyword; + } + } + } + return token = SyntaxKind.Identifier; + } + + function scanIdentifier(languageVersion: ScriptTarget, identifierVariant?: LanguageVariant | "RegExpGroupName") { + tokenValue = scanIdentifierStart(languageVersion, identifierVariant); + if (tokenValue) { + tokenValue += scanIdentifierParts(languageVersion, identifierVariant); + return token = getIdentifierToken(); } + return token = SyntaxKind.Unknown; } function reScanGreaterToken(): SyntaxKind { @@ -2996,8 +3008,7 @@ export function createScanner( function scanGroupName(isReference: boolean) { Debug.assertEqual(charCodeUnchecked(pos - 1), CharacterCodes.lessThan); tokenStart = pos; - scanIdentifier(codePointChecked(pos), languageVersion); - if (pos === tokenStart) { + if (!scanIdentifier(languageVersion, "RegExpGroupName")) { error(Diagnostics.Expected_a_capturing_group_name); } else if (isReference) { @@ -3772,19 +3783,8 @@ export function createScanner( // everything after it to the token // Do note that this means that `scanJsxIdentifier` effectively _mutates_ the visible token without advancing to a new token // Any caller should be expecting this behavior and should only read the pos or token value after calling it. - while (pos < end) { - const ch = charCodeUnchecked(pos); - if (ch === CharacterCodes.minus) { - tokenValue += "-"; - pos++; - continue; - } - const oldPos = pos; - tokenValue += scanIdentifierParts(); // reuse `scanIdentifierParts` so unicode escapes are handled - if (pos === oldPos) { - break; - } - } + // Here `scanIdentifierParts` is reused to ensure unicode escapes are handled. + tokenValue += scanIdentifierParts(languageVersion, LanguageVariant.JSX); return getIdentifierToken(); } return token; @@ -3893,36 +3893,11 @@ export function createScanner( return token = SyntaxKind.BacktickToken; case CharacterCodes.hash: return token = SyntaxKind.HashToken; - case CharacterCodes.backslash: - pos--; - const extendedCookedChar = peekExtendedUnicodeEscape(); - if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { - tokenValue = scanExtendedUnicodeEscape(/*shouldEmitInvalidEscapeError*/ true) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - - const cookedChar = peekUnicodeEscape(); - if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { - pos += 6; - tokenFlags |= TokenFlags.UnicodeEscape; - tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); - return token = getIdentifierToken(); - } - pos++; - return token = SyntaxKind.Unknown; - } - - if (isIdentifierStart(ch, languageVersion)) { - let char = ch; - while (pos < end && isIdentifierPart(char = codePointUnchecked(pos), languageVersion) || char === CharacterCodes.minus) pos += charSize(char); - tokenValue = text.substring(tokenStart, pos); - if (char === CharacterCodes.backslash) { - tokenValue += scanIdentifierParts(); - } - return token = getIdentifierToken(); - } - else { - return token = SyntaxKind.Unknown; + default: + pos = tokenStart; + const identifierKind = scanIdentifier(languageVersion, LanguageVariant.JSX); + if (!identifierKind) pos += charSize(ch); // skip the character + return identifierKind; } } @@ -4045,16 +4020,16 @@ function charSize(ch: number) { return 1; } -// Derived from the 10.1.1 UTF16Encoding of the ES6 Spec. +// Derived from Section 11.1.1 UTF16EncodeCodePoint of the spec. function utf16EncodeAsStringFallback(codePoint: number) { Debug.assert(0x0 <= codePoint && codePoint <= 0x10FFFF); - if (codePoint <= 65535) { + if (codePoint <= 0xFFFF) { return String.fromCharCode(codePoint); } - const codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 0xD800; - const codeUnit2 = ((codePoint - 65536) % 1024) + 0xDC00; + const codeUnit1 = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800; + const codeUnit2 = ((codePoint - 0x10000) % 0x400) + 0xDC00; return String.fromCharCode(codeUnit1, codeUnit2); } @@ -4066,6 +4041,20 @@ export function utf16EncodeAsString(codePoint: number): string { return utf16EncodeAsStringWorker(codePoint); } +// Derived from Section 11.1.3 UTF16SurrogatePairToCodePoint of the spec. +function utf16SurrogatePairToCodePoint(leadingSurrogate: number, trailingSurrogate: number) { + Debug.assert(isLeadingSurrogate(leadingSurrogate) && isTrailingSurrogate(trailingSurrogate)); + return (leadingSurrogate - 0xD800) * 0x400 + (trailingSurrogate - 0xDC00) + 0x10000; +} + +function isLeadingSurrogate(ch: number) { + return 0xD800 <= ch && ch <= 0xDBFF; +} + +function isTrailingSurrogate(ch: number) { + return 0xDC00 <= ch && ch <= 0xDFFF; +} + // Table 66: Non-binary Unicode property aliases and their canonical property names // https://tc39.es/ecma262/#table-nonbinary-unicode-properties // dprint-ignore diff --git a/tests/baselines/reference/TypeArgumentList1.errors.txt b/tests/baselines/reference/TypeArgumentList1.errors.txt index 58d2cab35499e..243e273081a67 100644 --- a/tests/baselines/reference/TypeArgumentList1.errors.txt +++ b/tests/baselines/reference/TypeArgumentList1.errors.txt @@ -21,7 +21,7 @@ TypeArgumentList1.ts(1,14): error TS2695: Left side of comma operator is unused !!! error TS2304: Cannot find name 'A'. ~ !!! error TS2304: Cannot find name 'B'. - + ~ !!! error TS1127: Invalid character. ~ !!! error TS2304: Cannot find name 'C'. diff --git a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt index fcdb9edc337d7..e0d7895751057 100644 --- a/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt +++ b/tests/baselines/reference/constructorWithIncompleteTypeAnnotation.errors.txt @@ -221,7 +221,7 @@ constructorWithIncompleteTypeAnnotation.ts(261,1): error TS1128: Declaration or var undef = undefined; var _\uD4A5\u7204\uC316\uE59F = local; - + ~ !!! error TS1127: Invalid character. var мир = local; diff --git a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.js b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.js index 4072ce2a3ab56..384839dafc36c 100644 --- a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.js +++ b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.js @@ -3,11 +3,13 @@ //// [extendedUnicodeEscapeSequenceIdentifiers.ts] const \u{0061} = 12; const a\u{0061} = 12; +const a\u{62}c\u{64}e = 12; -console.log(a + aa); +console.log(a + aa + abcde); //// [extendedUnicodeEscapeSequenceIdentifiers.js] const \u{0061} = 12; const a\u{0061} = 12; -console.log(a + aa); +const a\u{62}c\u{64}e = 12; +console.log(a + aa + abcde); diff --git a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.symbols b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.symbols index 3cc06929eefa2..23d0ac0b5fdd7 100644 --- a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.symbols +++ b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.symbols @@ -7,10 +7,14 @@ const \u{0061} = 12; const a\u{0061} = 12; >a\u{0061} : Symbol(a\u{0061}, Decl(extendedUnicodeEscapeSequenceIdentifiers.ts, 1, 5)) -console.log(a + aa); +const a\u{62}c\u{64}e = 12; +>a\u{62}c\u{64}e : Symbol(a\u{62}c\u{64}e, Decl(extendedUnicodeEscapeSequenceIdentifiers.ts, 2, 5)) + +console.log(a + aa + abcde); >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) >console : Symbol(console, Decl(lib.dom.d.ts, --, --)) >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) >a : Symbol(\u{0061}, Decl(extendedUnicodeEscapeSequenceIdentifiers.ts, 0, 5)) >aa : Symbol(a\u{0061}, Decl(extendedUnicodeEscapeSequenceIdentifiers.ts, 1, 5)) +>abcde : Symbol(a\u{62}c\u{64}e, Decl(extendedUnicodeEscapeSequenceIdentifiers.ts, 2, 5)) diff --git a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.types b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.types index cbd29c418f4fe..83a5311bc5fd5 100644 --- a/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.types +++ b/tests/baselines/reference/extendedUnicodeEscapeSequenceIdentifiers.types @@ -13,19 +13,29 @@ const a\u{0061} = 12; >12 : 12 > : ^^ -console.log(a + aa); ->console.log(a + aa) : void -> : ^^^^ +const a\u{62}c\u{64}e = 12; +>a\u{62}c\u{64}e : 12 +> : ^^ +>12 : 12 +> : ^^ + +console.log(a + aa + abcde); +>console.log(a + aa + abcde) : void +> : ^^^^ >console.log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ >console : Console > : ^^^^^^^ >log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ +>a + aa + abcde : number +> : ^^^^^^ >a + aa : number > : ^^^^^^ >a : 12 > : ^^ >aa : 12 > : ^^ +>abcde : 12 +> : ^^ diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance.errors.txt b/tests/baselines/reference/invalidUnicodeEscapeSequance.errors.txt index 0155ab8136ad4..8c48ef350c004 100644 --- a/tests/baselines/reference/invalidUnicodeEscapeSequance.errors.txt +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance.errors.txt @@ -3,5 +3,5 @@ invalidUnicodeEscapeSequance.ts(1,8): error TS1127: Invalid character. ==== invalidUnicodeEscapeSequance.ts (1 errors) ==== var arg\u003 - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance2.errors.txt b/tests/baselines/reference/invalidUnicodeEscapeSequance2.errors.txt index be53351d2556d..a80b68cec8229 100644 --- a/tests/baselines/reference/invalidUnicodeEscapeSequance2.errors.txt +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance2.errors.txt @@ -3,5 +3,5 @@ invalidUnicodeEscapeSequance2.ts(1,8): error TS1127: Invalid character. ==== invalidUnicodeEscapeSequance2.ts (1 errors) ==== var arg\uxxxx - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance3.errors.txt b/tests/baselines/reference/invalidUnicodeEscapeSequance3.errors.txt index a10942f2d9abf..a664586e11850 100644 --- a/tests/baselines/reference/invalidUnicodeEscapeSequance3.errors.txt +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance3.errors.txt @@ -7,7 +7,7 @@ invalidUnicodeEscapeSequance3.ts(1,3): error TS2304: Cannot find name 'u'. a\u ~ !!! error TS2304: Cannot find name 'a'. - + ~ !!! error TS1127: Invalid character. ~ !!! error TS2304: Cannot find name 'u'. \ No newline at end of file diff --git a/tests/baselines/reference/invalidUnicodeEscapeSequance4.errors.txt b/tests/baselines/reference/invalidUnicodeEscapeSequance4.errors.txt index df0d9a0f4a8f5..90cdaf6fbda67 100644 --- a/tests/baselines/reference/invalidUnicodeEscapeSequance4.errors.txt +++ b/tests/baselines/reference/invalidUnicodeEscapeSequance4.errors.txt @@ -4,5 +4,5 @@ invalidUnicodeEscapeSequance4.ts(2,5): error TS1127: Invalid character. ==== invalidUnicodeEscapeSequance4.ts (1 errors) ==== var a\u0031; // a1 is a valid identifier var \u0031a; // 1a is an invalid identifier - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.errors.txt b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.errors.txt index 97edb82b46bb6..f8577aced4c70 100644 --- a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.errors.txt +++ b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.errors.txt @@ -2,22 +2,18 @@ 1 const a =!@#!@$    ~~ -a.ts:1:13 - error TS1134: Variable declaration expected. +a.ts:1:14 - error TS1134: Variable declaration expected. 1 const a =!@#!@$ -   ~ -a.ts:1:16 - error TS1109: Expression expected. - -1 const a =!@#!@$ -    +   ~ a.ts:2:13 - error TS18026: '#!' can only be used at the start of a file. 2 const b = !@#!@#!@#!    ~~ -a.ts:2:14 - error TS1134: Variable declaration expected. +a.ts:2:15 - error TS1134: Variable declaration expected. 2 const b = !@#!@#!@#! -   ~ +   ~ a.ts:2:16 - error TS18026: '#!' can only be used at the start of a file. 2 const b = !@#!@#!@#! @@ -76,18 +72,16 @@   ~~~~~ -==== a.ts (16 errors) ==== +==== a.ts (15 errors) ==== const a =!@#!@$ ~~ !!! error TS18026: '#!' can only be used at the start of a file. - ~ + ~ !!! error TS1134: Variable declaration expected. - -!!! error TS1109: Expression expected. const b = !@#!@#!@#! ~~ !!! error TS18026: '#!' can only be used at the start of a file. - ~ + ~ !!! error TS1134: Variable declaration expected. ~~ !!! error TS18026: '#!' can only be used at the start of a file. @@ -125,8 +119,8 @@ limit ~~~~~ !!! error TS2304: Cannot find name 'limit'. -Found 19 errors in 2 files. +Found 18 errors in 2 files. Errors Files - 16 a.ts:1 + 15 a.ts:1 3 b.ts:1 diff --git a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.js b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.js index 4953a653c3da7..91d5a2de7ab3a 100644 --- a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.js +++ b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.js @@ -14,11 +14,8 @@ limit //// [a.js] var a = !; -!; var b = !; -!; -!; -!OK; +OK; HERE; 's A shouty thing; GOTTA; diff --git a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.types b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.types index b52e6ebb02bd1..743c4d116ebf3 100644 --- a/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.types +++ b/tests/baselines/reference/manyCompilerErrorsInTheTwoFiles.types @@ -8,8 +8,6 @@ const a =!@#!@$ > : ^^^^^^^ > : any > : ^^^ ->!@$ : boolean -> : ^^^^^^^ >$ : any > : ^^^ @@ -20,16 +18,10 @@ const b = !@#!@#!@#! > : ^^^^^^^ > : any > : ^^^ ->!@ : boolean -> : ^^^^^^^ > : any > : ^^^ ->!@ : boolean -> : ^^^^^^^ > : any > : ^^^ ->!OK! : boolean -> : ^^^^^^^ OK! >OK! : any diff --git a/tests/baselines/reference/parserSkippedTokens1.errors.txt b/tests/baselines/reference/parserSkippedTokens1.errors.txt index ad127ed6202fc..501ce5e9e3b6d 100644 --- a/tests/baselines/reference/parserSkippedTokens1.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens1.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens1.ts(1,1): error TS1127: Invalid character. ==== parserSkippedTokens1.ts (1 errors) ==== \ - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens10.errors.txt b/tests/baselines/reference/parserSkippedTokens10.errors.txt index 516dd5df7af10..0d8b30a4d8d5d 100644 --- a/tests/baselines/reference/parserSkippedTokens10.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens10.errors.txt @@ -4,10 +4,10 @@ parserSkippedTokens10.ts(2,1): error TS1127: Invalid character. ==== parserSkippedTokens10.ts (2 errors) ==== \ - + ~ !!! error TS1127: Invalid character. \ - + ~ !!! error TS1127: Invalid character. /*existing trivia*/ ; \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens11.errors.txt b/tests/baselines/reference/parserSkippedTokens11.errors.txt index cd6ae69a403a8..e77b428ed4a3f 100644 --- a/tests/baselines/reference/parserSkippedTokens11.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens11.errors.txt @@ -5,9 +5,9 @@ parserSkippedTokens11.ts(1,7): error TS1127: Invalid character. ==== parserSkippedTokens11.ts (3 errors) ==== ; \ \ \ - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens12.errors.txt b/tests/baselines/reference/parserSkippedTokens12.errors.txt index 45c96c0cd46e9..6cc9045ba02ce 100644 --- a/tests/baselines/reference/parserSkippedTokens12.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens12.errors.txt @@ -5,9 +5,9 @@ parserSkippedTokens12.ts(1,5): error TS1127: Invalid character. ==== parserSkippedTokens12.ts (3 errors) ==== \ \ \ - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens13.errors.txt b/tests/baselines/reference/parserSkippedTokens13.errors.txt index 23ee4b929e8df..9ff76d72b0fb0 100644 --- a/tests/baselines/reference/parserSkippedTokens13.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens13.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens13.ts(1,10): error TS1127: Invalid character. ==== parserSkippedTokens13.ts (1 errors) ==== /regexp/ \ ; - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens14.errors.txt b/tests/baselines/reference/parserSkippedTokens14.errors.txt index 8bda59449d8d1..0596e72fecd65 100644 --- a/tests/baselines/reference/parserSkippedTokens14.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens14.errors.txt @@ -4,11 +4,11 @@ parserSkippedTokens14.ts(3,1): error TS1127: Invalid character. ==== parserSkippedTokens14.ts (2 errors) ==== \ - + ~ !!! error TS1127: Invalid character. /*existing trivia*/ \ - + ~ !!! error TS1127: Invalid character. ; \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens15.errors.txt b/tests/baselines/reference/parserSkippedTokens15.errors.txt index 80315a8f4d610..81baca94d19ad 100644 --- a/tests/baselines/reference/parserSkippedTokens15.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens15.errors.txt @@ -5,9 +5,9 @@ parserSkippedTokens15.ts(3,1): error TS1127: Invalid character. ==== parserSkippedTokens15.ts (2 errors) ==== /*existing trivia*/ \ - + ~ !!! error TS1127: Invalid character. \ - + ~ !!! error TS1127: Invalid character. ; \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens17.errors.txt b/tests/baselines/reference/parserSkippedTokens17.errors.txt index caf45ae02d509..550a294f7d863 100644 --- a/tests/baselines/reference/parserSkippedTokens17.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens17.errors.txt @@ -10,7 +10,7 @@ parserSkippedTokens17.ts(1,9): error TS1005: ')' expected. !!! error TS2304: Cannot find name 'foo'. ~ !!! error TS2304: Cannot find name 'a'. - + ~ !!! error TS1127: Invalid character. !!! error TS1005: ')' expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens18.errors.txt b/tests/baselines/reference/parserSkippedTokens18.errors.txt index 7930e0b851933..69a7d4d619f11 100644 --- a/tests/baselines/reference/parserSkippedTokens18.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens18.errors.txt @@ -10,7 +10,7 @@ parserSkippedTokens18.ts(1,8): error TS1005: ')' expected. !!! error TS2304: Cannot find name 'foo'. ~ !!! error TS2304: Cannot find name 'a'. - + ~ !!! error TS1127: Invalid character. !!! error TS1005: ')' expected. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens19.errors.txt b/tests/baselines/reference/parserSkippedTokens19.errors.txt index 67037a5515f0c..cdad093c2569f 100644 --- a/tests/baselines/reference/parserSkippedTokens19.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens19.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens19.ts(1,1): error TS1127: Invalid character. ==== parserSkippedTokens19.ts (1 errors) ==== \ declare var v; - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens2.errors.txt b/tests/baselines/reference/parserSkippedTokens2.errors.txt index 45b873db89bea..f4f90e33d9b92 100644 --- a/tests/baselines/reference/parserSkippedTokens2.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens2.errors.txt @@ -4,7 +4,7 @@ parserSkippedTokens2.ts(1,2): error TS1127: Invalid character. ==== parserSkippedTokens2.ts (2 errors) ==== \\ - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens20.errors.txt b/tests/baselines/reference/parserSkippedTokens20.errors.txt index 7ea41ba3521f8..d6180f358217a 100644 --- a/tests/baselines/reference/parserSkippedTokens20.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens20.errors.txt @@ -9,5 +9,5 @@ parserSkippedTokens20.ts(1,12): error TS1127: Invalid character. !!! error TS2304: Cannot find name 'X'. ~ !!! error TS2304: Cannot find name 'T'. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens3.errors.txt b/tests/baselines/reference/parserSkippedTokens3.errors.txt index a541f519ec0d9..27e8eb1829101 100644 --- a/tests/baselines/reference/parserSkippedTokens3.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens3.errors.txt @@ -4,7 +4,7 @@ parserSkippedTokens3.ts(1,5): error TS1127: Invalid character. ==== parserSkippedTokens3.ts (2 errors) ==== \ ; \ - + ~ !!! error TS1127: Invalid character. - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens4.errors.txt b/tests/baselines/reference/parserSkippedTokens4.errors.txt index 377f3b1f988d2..014346f6bac23 100644 --- a/tests/baselines/reference/parserSkippedTokens4.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens4.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens4.ts(1,1): error TS1127: Invalid character. ==== parserSkippedTokens4.ts (1 errors) ==== \ /regexp/; - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens5.errors.txt b/tests/baselines/reference/parserSkippedTokens5.errors.txt index 89709ef580ab0..f9ffe0a3daf13 100644 --- a/tests/baselines/reference/parserSkippedTokens5.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens5.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens5.ts(1,1): error TS1127: Invalid character. ==== parserSkippedTokens5.ts (1 errors) ==== \ /*foo*/ ; - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens6.errors.txt b/tests/baselines/reference/parserSkippedTokens6.errors.txt index b412af2f1baa6..8541b696670c4 100644 --- a/tests/baselines/reference/parserSkippedTokens6.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens6.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens6.ts(1,9): error TS1127: Invalid character. ==== parserSkippedTokens6.ts (1 errors) ==== /*foo*/ \ - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens7.errors.txt b/tests/baselines/reference/parserSkippedTokens7.errors.txt index a76c8b92cab7b..288b585785410 100644 --- a/tests/baselines/reference/parserSkippedTokens7.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens7.errors.txt @@ -3,5 +3,5 @@ parserSkippedTokens7.ts(1,9): error TS1127: Invalid character. ==== parserSkippedTokens7.ts (1 errors) ==== /*foo*/ \ /*bar*/ - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens8.errors.txt b/tests/baselines/reference/parserSkippedTokens8.errors.txt index 599792d38a6e4..6701f5a0ee42b 100644 --- a/tests/baselines/reference/parserSkippedTokens8.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens8.errors.txt @@ -4,5 +4,5 @@ parserSkippedTokens8.ts(2,9): error TS1127: Invalid character. ==== parserSkippedTokens8.ts (1 errors) ==== ; /*foo*/ \ /*bar*/ - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserSkippedTokens9.errors.txt b/tests/baselines/reference/parserSkippedTokens9.errors.txt index 5187666e50b79..9e0284e5c6bce 100644 --- a/tests/baselines/reference/parserSkippedTokens9.errors.txt +++ b/tests/baselines/reference/parserSkippedTokens9.errors.txt @@ -4,5 +4,5 @@ parserSkippedTokens9.ts(2,9): error TS1127: Invalid character. ==== parserSkippedTokens9.ts (1 errors) ==== ; // existing trivia /*foo*/ \ /*bar*/ - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt b/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt index cb9841a599111..d0d37030ef579 100644 --- a/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt +++ b/tests/baselines/reference/parserX_TypeArgumentList1.errors.txt @@ -21,7 +21,7 @@ parserX_TypeArgumentList1.ts(1,14): error TS2695: Left side of comma operator is !!! error TS2304: Cannot find name 'A'. ~ !!! error TS2304: Cannot find name 'B'. - + ~ !!! error TS1127: Invalid character. ~ !!! error TS2304: Cannot find name 'C'. diff --git a/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.errors.txt b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.errors.txt new file mode 100644 index 0000000000000..07bc7d62d1954 --- /dev/null +++ b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.errors.txt @@ -0,0 +1,299 @@ +regularExpressionGroupNameUnicodeEscapes.ts(11,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(11,11): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(11,16): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(11,26): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(12,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(12,16): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(12,21): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(12,31): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(13,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(13,18): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(13,23): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(13,33): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(29,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(29,12): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(29,18): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(29,31): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(30,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(30,19): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(30,25): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(30,38): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(31,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(31,22): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(31,28): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(31,41): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,11): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,22): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,35): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,40): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(40,50): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(41,6): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(41,12): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(41,13): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(41,24): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(41,25): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(41,39): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(41,45): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(41,56): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(44,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(44,12): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(44,26): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(44,43): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(44,49): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(44,62): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(45,6): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(45,13): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(45,14): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(45,28): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(45,29): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(45,47): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(45,54): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(45,68): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(48,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(48,16): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(48,29): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(48,39): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(49,6): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(49,17): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(49,18): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(49,32): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(49,43): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(52,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(52,16): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(52,29): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(52,39): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(53,6): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(53,17): error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. +regularExpressionGroupNameUnicodeEscapes.ts(53,18): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(53,32): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(53,43): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(56,5): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(56,13): error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. +regularExpressionGroupNameUnicodeEscapes.ts(56,26): error TS1514: Expected a capturing group name. +regularExpressionGroupNameUnicodeEscapes.ts(56,34): error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. +regularExpressionGroupNameUnicodeEscapes.ts(57,6): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(57,14): error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. +regularExpressionGroupNameUnicodeEscapes.ts(57,28): error TS1005: '>' expected. +regularExpressionGroupNameUnicodeEscapes.ts(57,36): error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. + + +==== regularExpressionGroupNameUnicodeEscapes.ts (78 errors) ==== + // U+13A0 CHEROKEE LETTER A: character inside BMP with both the Unicode properties ID_Start and ID_Continue + /(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; + /(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; + /(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; + + /(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; + /(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; + /(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; + + // U+19D4 NEW TAI LUE DIGIT FOUR: character inside BMP with only ID_Continue + /(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + + /(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; + /(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; + /(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; + + // U+102A7 CARIAN LETTER A2: character outside BMP with both ID_Start and ID_Continue + /(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; + /(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; + /(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; + + /(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; + /(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; + /(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; + + // U+1113D CHAKMA DIGIT SEVEN: character outside BMP with only ID_Continue + /(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + + /(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; + /(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; + /(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; + + // The following cases are all invalid: + + // U+2F47 KANGXI RADICAL SUN: character inside BMP without both properties + /(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/; + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/; + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + + // U+1F31A NEW MOON WITH FACE: character outside BMP without both properties + /(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/; + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/; + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + + // Lone leading surrogate + /(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/; + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/; + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + + // Lone trailing surrogate + /(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/; + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + +!!! error TS1514: Expected a capturing group name. + /(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/; + +!!! error TS1005: '>' expected. + ~ +!!! error TS1515: Named capturing groups with the same name must be mutually exclusive to each other. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + +!!! error TS1005: '>' expected. + + // Fake surrogate pair with extended Unicode escapes – invalid even if the intended character has both properties + /(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/; + +!!! error TS1514: Expected a capturing group name. + ~~~~~~~~ +!!! error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. + +!!! error TS1514: Expected a capturing group name. + ~~~~~~~~ +!!! error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. + /(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/; + +!!! error TS1005: '>' expected. + ~~~~~~~~ +!!! error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. + +!!! error TS1005: '>' expected. + ~~~~~~~~ +!!! error TS1538: Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set. + + // Cases with Unicode escapes and extended Unicode escapes mixed + /(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/; + /(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/; + \ No newline at end of file diff --git a/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.js b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.js new file mode 100644 index 0000000000000..7056ce8a1e915 --- /dev/null +++ b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.js @@ -0,0 +1,114 @@ +//// [tests/cases/compiler/regularExpressionGroupNameUnicodeEscapes.ts] //// + +//// [regularExpressionGroupNameUnicodeEscapes.ts] +// U+13A0 CHEROKEE LETTER A: character inside BMP with both the Unicode properties ID_Start and ID_Continue +/(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; + +/(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; + +// U+19D4 NEW TAI LUE DIGIT FOUR: character inside BMP with only ID_Continue +/(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid + +/(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; + +// U+102A7 CARIAN LETTER A2: character outside BMP with both ID_Start and ID_Continue +/(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; + +/(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; + +// U+1113D CHAKMA DIGIT SEVEN: character outside BMP with only ID_Continue +/(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid + +/(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; + +// The following cases are all invalid: + +// U+2F47 KANGXI RADICAL SUN: character inside BMP without both properties +/(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/; +/(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/; + +// U+1F31A NEW MOON WITH FACE: character outside BMP without both properties +/(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/; +/(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/; + +// Lone leading surrogate +/(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/; +/(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/; + +// Lone trailing surrogate +/(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/; +/(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/; + +// Fake surrogate pair with extended Unicode escapes – invalid even if the intended character has both properties +/(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/; +/(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/; + +// Cases with Unicode escapes and extended Unicode escapes mixed +/(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/; +/(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/; + + +//// [regularExpressionGroupNameUnicodeEscapes.js] +// U+13A0 CHEROKEE LETTER A: character inside BMP with both the Unicode properties ID_Start and ID_Continue +/(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +// U+19D4 NEW TAI LUE DIGIT FOUR: character inside BMP with only ID_Continue +/(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +// U+102A7 CARIAN LETTER A2: character outside BMP with both ID_Start and ID_Continue +/(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +// U+1113D CHAKMA DIGIT SEVEN: character outside BMP with only ID_Continue +/(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +// The following cases are all invalid: +// U+2F47 KANGXI RADICAL SUN: character inside BMP without both properties +/(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/; +/(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/; +// U+1F31A NEW MOON WITH FACE: character outside BMP without both properties +/(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/; +/(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/; +// Lone leading surrogate +/(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/; +/(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/; +// Lone trailing surrogate +/(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/; +/(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/; +// Fake surrogate pair with extended Unicode escapes – invalid even if the intended character has both properties +/(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/; +/(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/; +// Cases with Unicode escapes and extended Unicode escapes mixed +/(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/; +/(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/; diff --git a/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.symbols b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.symbols new file mode 100644 index 0000000000000..4830c815768f1 --- /dev/null +++ b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.symbols @@ -0,0 +1,66 @@ +//// [tests/cases/compiler/regularExpressionGroupNameUnicodeEscapes.ts] //// + +=== regularExpressionGroupNameUnicodeEscapes.ts === + +// U+13A0 CHEROKEE LETTER A: character inside BMP with both the Unicode properties ID_Start and ID_Continue +/(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +/(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; + +/(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +/(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; + +// U+19D4 NEW TAI LUE DIGIT FOUR: character inside BMP with only ID_Continue +/(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +/(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid + +/(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +/(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; + +// U+102A7 CARIAN LETTER A2: character outside BMP with both ID_Start and ID_Continue +/(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +/(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; + +/(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +/(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; + +// U+1113D CHAKMA DIGIT SEVEN: character outside BMP with only ID_Continue +/(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +/(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid + +/(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +/(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; + +// The following cases are all invalid: + +// U+2F47 KANGXI RADICAL SUN: character inside BMP without both properties +/(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/; +/(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/; + +// U+1F31A NEW MOON WITH FACE: character outside BMP without both properties +/(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/; +/(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/; + +// Lone leading surrogate +/(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/; +/(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/; + +// Lone trailing surrogate +/(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/; +/(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/; + +// Fake surrogate pair with extended Unicode escapes – invalid even if the intended character has both properties +/(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/; +/(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/; + +// Cases with Unicode escapes and extended Unicode escapes mixed +/(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/; +/(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/; + diff --git a/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.types b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.types new file mode 100644 index 0000000000000..801ddef638c95 --- /dev/null +++ b/tests/baselines/reference/regularExpressionGroupNameUnicodeEscapes.types @@ -0,0 +1,159 @@ +//// [tests/cases/compiler/regularExpressionGroupNameUnicodeEscapes.ts] //// + +=== regularExpressionGroupNameUnicodeEscapes.ts === +// U+13A0 CHEROKEE LETTER A: character inside BMP with both the Unicode properties ID_Start and ID_Continue +/(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +>/(?<Ꭰ>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/ : RegExp +> : ^^^^^^ + +/(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +>/(?<\u13A0>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/ : RegExp +> : ^^^^^^ + +/(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/; +>/(?<\u{13A0}>)\k<Ꭰ>\k<\u13A0>\k<\u{13A0}>/ : RegExp +> : ^^^^^^ + +/(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +>/(?<_Ꭰ>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/ : RegExp +> : ^^^^^^ + +/(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +>/(?<_\u13A0>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/ : RegExp +> : ^^^^^^ + +/(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/; +>/(?<_\u{13A0}>)\k<_Ꭰ>\k<_\u13A0>\k<_\u{13A0}>/ : RegExp +> : ^^^^^^ + +// U+19D4 NEW TAI LUE DIGIT FOUR: character inside BMP with only ID_Continue +/(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +>/(?<᧔>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/ : RegExp +> : ^^^^^^ + +/(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +>/(?<\u19D4>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/ : RegExp +> : ^^^^^^ + +/(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/; // invalid +>/(?<\u{19D4}>)\k<᧔>\k<\u19D4>\k<\u{19D4}>/ : RegExp +> : ^^^^^^ + +/(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +>/(?<_᧔>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/ : RegExp +> : ^^^^^^ + +/(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +>/(?<_\u19D4>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/ : RegExp +> : ^^^^^^ + +/(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/; +>/(?<_\u{19D4}>)\k<_᧔>\k<_\u19D4>\k<_\u{19D4}>/ : RegExp +> : ^^^^^^ + +// U+102A7 CARIAN LETTER A2: character outside BMP with both ID_Start and ID_Continue +/(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +>/(?<𐊧>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +/(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +>/(?<\u{102A7}>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +/(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/; +>/(?<\uD800\uDEA7>)\k<𐊧>\k<\u{102A7}>\k<\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +/(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +>/(?<_𐊧>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +/(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +>/(?<_\u{102A7}>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +/(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/; +>/(?<_\uD800\uDEA7>)\k<_𐊧>\k<_\u{102A7}>\k<_\uD800\uDEA7>/ : RegExp +> : ^^^^^^ + +// U+1113D CHAKMA DIGIT SEVEN: character outside BMP with only ID_Continue +/(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +>/(?<𑄽>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +/(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +>/(?<\u{1113D}>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +/(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/; // invalid +>/(?<\uD804\uDD3D>)\k<𑄽>\k<\u{1113D}>\k<\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +/(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +>/(?<_𑄽>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +/(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +>/(?<_\u{1113D}>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +/(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/; +>/(?<_\uD804\uDD3D>)\k<_𑄽>\k<_\u{1113D}>\k<_\uD804\uDD3D>/ : RegExp +> : ^^^^^^ + +// The following cases are all invalid: + +// U+2F47 KANGXI RADICAL SUN: character inside BMP without both properties +/(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/; +>/(?<⽇>)(?<\u2F47>)(?<\u{2F47}>)\k<⽇>\k<\u2F47>\k<\u{2F47}>/ : RegExp +> : ^^^^^^ + +/(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/; +>/(?<_⽇>)(?<_\u2F47>)(?<_\u{2F47}>)\k<_⽇>\k<_\u2F47>\k<_\u{2F47}>/ : RegExp +> : ^^^^^^ + +// U+1F31A NEW MOON WITH FACE: character outside BMP without both properties +/(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/; +>/(?<🌚>)(?<\u{1F31A}>)(?<\uD83C\uDF1A>)\k<🌚>\k<\u{1F31A}>\k<\uD83C\uDF1A>/ : RegExp +> : ^^^^^^ + +/(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/; +>/(?<_🌚>)(?<_\u{1F31A}>)(?<_\uD83C\uDF1A>)\k<_🌚>\k<_\u{1F31A}>\k<_\uD83C\uDF1A>/ : RegExp +> : ^^^^^^ + +// Lone leading surrogate +/(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/; +>/(?<\uD800>)(?<\u{D800}>)\k<\uD800>\k<\u{D800}>/ : RegExp +> : ^^^^^^ + +/(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/; +>/(?<_\uD800>)(?<_\u{D800}>)\k<_\uD800>\k<_\u{D800}>/ : RegExp +> : ^^^^^^ + +// Lone trailing surrogate +/(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/; +>/(?<\uDFFF>)(?<\u{DFFF}>)\k<\uDFFF>\k<\u{DFFF}>/ : RegExp +> : ^^^^^^ + +/(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/; +>/(?<_\uDFFF>)(?<_\u{DFFF}>)\k<_\uDFFF>\k<_\u{DFFF}>/ : RegExp +> : ^^^^^^ + +// Fake surrogate pair with extended Unicode escapes – invalid even if the intended character has both properties +/(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/; +>/(?<\u{D800}\u{DC00}>)\k<\u{D800}\u{DC00}>/ : RegExp +> : ^^^^^^ + +/(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/; +>/(?<_\u{D800}\u{DC00}>)\k<_\u{D800}\u{DC00}>/ : RegExp +> : ^^^^^^ + +// Cases with Unicode escapes and extended Unicode escapes mixed +/(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/; +>/(?)\k\k<\u{52}\u0065gE\u{78}p>\k<\u0052e\u0067\u{45}x\u{70}>/ : RegExp +> : ^^^^^^ + +/(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/; +>/(?<_RegExp>)\k<_RegExp>\k<_\u{52}\u0065gE\u{78}p>\k<_\u0052e\u0067\u{45}x\u{70}>/ : RegExp +> : ^^^^^^ + diff --git a/tests/baselines/reference/shebangError.errors.txt b/tests/baselines/reference/shebangError.errors.txt index 63d8730735c6a..392d4443fb887 100644 --- a/tests/baselines/reference/shebangError.errors.txt +++ b/tests/baselines/reference/shebangError.errors.txt @@ -1,20 +1,17 @@ shebangError.ts(2,1): error TS18026: '#!' can only be used at the start of a file. -shebangError.ts(2,2): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. -shebangError.ts(2,3): error TS2872: This kind of expression is always truthy. +shebangError.ts(2,3): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. shebangError.ts(2,12): error TS2304: Cannot find name 'env'. shebangError.ts(2,16): error TS1005: ';' expected. shebangError.ts(2,16): error TS2304: Cannot find name 'node'. -==== shebangError.ts (6 errors) ==== +==== shebangError.ts (5 errors) ==== var foo = 'Shebang is only allowed on the first line'; #!/usr/bin/env node ~~ !!! error TS18026: '#!' can only be used at the start of a file. - ~~~~~~~~~ -!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. ~~~~~~~~ -!!! error TS2872: This kind of expression is always truthy. +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. ~~~ !!! error TS2304: Cannot find name 'env'. ~~~~ diff --git a/tests/baselines/reference/shebangError.js b/tests/baselines/reference/shebangError.js index 95004e323f32c..77ea9a5c0d253 100644 --- a/tests/baselines/reference/shebangError.js +++ b/tests/baselines/reference/shebangError.js @@ -6,5 +6,5 @@ var foo = 'Shebang is only allowed on the first line'; //// [shebangError.js] var foo = 'Shebang is only allowed on the first line'; -!/usr/bin / env; +/usr/bin / env; node; diff --git a/tests/baselines/reference/shebangError.types b/tests/baselines/reference/shebangError.types index 40a7de47cdbb5..4e54b50f7369e 100644 --- a/tests/baselines/reference/shebangError.types +++ b/tests/baselines/reference/shebangError.types @@ -8,10 +8,8 @@ var foo = 'Shebang is only allowed on the first line'; > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #!/usr/bin/env node ->!/usr/bin/env : number -> : ^^^^^^ ->!/usr/bin : boolean -> : ^^^^^^^ +>/usr/bin/env : number +> : ^^^^^^ >/usr/bin : RegExp > : ^^^^^^ >env : any diff --git a/tests/baselines/reference/slashBeforeVariableDeclaration1.errors.txt b/tests/baselines/reference/slashBeforeVariableDeclaration1.errors.txt index 21a1c86ab4b56..39f04e4ddf134 100644 --- a/tests/baselines/reference/slashBeforeVariableDeclaration1.errors.txt +++ b/tests/baselines/reference/slashBeforeVariableDeclaration1.errors.txt @@ -3,5 +3,5 @@ slashBeforeVariableDeclaration1.ts(1,1): error TS1127: Invalid character. ==== slashBeforeVariableDeclaration1.ts (1 errors) ==== \ declare var v; - + ~ !!! error TS1127: Invalid character. \ No newline at end of file diff --git a/tests/baselines/reference/unicodeEscapesInJSDoc.js b/tests/baselines/reference/unicodeEscapesInJSDoc.js index 76aca7f81862c..d90a066c630c2 100644 --- a/tests/baselines/reference/unicodeEscapesInJSDoc.js +++ b/tests/baselines/reference/unicodeEscapesInJSDoc.js @@ -4,17 +4,19 @@ /** * @param {number} \u0061 * @param {number} a\u0061 + * @param {number} a\u0062c\u0064e */ -function foo(a, aa) { - console.log(a + aa); +function foo(a, aa, abcde) { + console.log(a + aa + abcde); } /** * @param {number} \u{0061} * @param {number} a\u{0061} + * @param {number} a\u{62}c\u{64}e */ -function bar(a, aa) { - console.log(a + aa); +function bar(a, aa, abcde) { + console.log(a + aa + abcde); } @@ -22,14 +24,16 @@ function bar(a, aa) { /** * @param {number} \u0061 * @param {number} a\u0061 + * @param {number} a\u0062c\u0064e */ -function foo(a, aa) { - console.log(a + aa); +function foo(a, aa, abcde) { + console.log(a + aa + abcde); } /** * @param {number} \u{0061} * @param {number} a\u{0061} + * @param {number} a\u{62}c\u{64}e */ -function bar(a, aa) { - console.log(a + aa); +function bar(a, aa, abcde) { + console.log(a + aa + abcde); } diff --git a/tests/baselines/reference/unicodeEscapesInJSDoc.symbols b/tests/baselines/reference/unicodeEscapesInJSDoc.symbols index 2ef9a193c705e..bdc7065af073b 100644 --- a/tests/baselines/reference/unicodeEscapesInJSDoc.symbols +++ b/tests/baselines/reference/unicodeEscapesInJSDoc.symbols @@ -4,34 +4,40 @@ /** * @param {number} \u0061 * @param {number} a\u0061 + * @param {number} a\u0062c\u0064e */ -function foo(a, aa) { +function foo(a, aa, abcde) { >foo : Symbol(foo, Decl(file.js, 0, 0)) ->a : Symbol(a, Decl(file.js, 4, 13)) ->aa : Symbol(aa, Decl(file.js, 4, 15)) +>a : Symbol(a, Decl(file.js, 5, 13)) +>aa : Symbol(aa, Decl(file.js, 5, 15)) +>abcde : Symbol(abcde, Decl(file.js, 5, 19)) - console.log(a + aa); + console.log(a + aa + abcde); >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) >console : Symbol(console, Decl(lib.dom.d.ts, --, --)) >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) ->a : Symbol(a, Decl(file.js, 4, 13)) ->aa : Symbol(aa, Decl(file.js, 4, 15)) +>a : Symbol(a, Decl(file.js, 5, 13)) +>aa : Symbol(aa, Decl(file.js, 5, 15)) +>abcde : Symbol(abcde, Decl(file.js, 5, 19)) } /** * @param {number} \u{0061} * @param {number} a\u{0061} + * @param {number} a\u{62}c\u{64}e */ -function bar(a, aa) { ->bar : Symbol(bar, Decl(file.js, 6, 1)) ->a : Symbol(a, Decl(file.js, 12, 13)) ->aa : Symbol(aa, Decl(file.js, 12, 15)) +function bar(a, aa, abcde) { +>bar : Symbol(bar, Decl(file.js, 7, 1)) +>a : Symbol(a, Decl(file.js, 14, 13)) +>aa : Symbol(aa, Decl(file.js, 14, 15)) +>abcde : Symbol(abcde, Decl(file.js, 14, 19)) - console.log(a + aa); + console.log(a + aa + abcde); >console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) >console : Symbol(console, Decl(lib.dom.d.ts, --, --)) >log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --)) ->a : Symbol(a, Decl(file.js, 12, 13)) ->aa : Symbol(aa, Decl(file.js, 12, 15)) +>a : Symbol(a, Decl(file.js, 14, 13)) +>aa : Symbol(aa, Decl(file.js, 14, 15)) +>abcde : Symbol(abcde, Decl(file.js, 14, 19)) } diff --git a/tests/baselines/reference/unicodeEscapesInJSDoc.types b/tests/baselines/reference/unicodeEscapesInJSDoc.types index cbaaa47609eff..68c1f1ee236e8 100644 --- a/tests/baselines/reference/unicodeEscapesInJSDoc.types +++ b/tests/baselines/reference/unicodeEscapesInJSDoc.types @@ -4,58 +4,72 @@ /** * @param {number} \u0061 * @param {number} a\u0061 + * @param {number} a\u0062c\u0064e */ -function foo(a, aa) { ->foo : (a: number, aa: number) => void -> : ^ ^^ ^^ ^^ ^^^^^^^^^ +function foo(a, aa, abcde) { +>foo : (a: number, aa: number, abcde: number) => void +> : ^ ^^ ^^ ^^ ^^ ^^ ^^^^^^^^^ >a : number > : ^^^^^^ >aa : number > : ^^^^^^ +>abcde : number +> : ^^^^^^ - console.log(a + aa); ->console.log(a + aa) : void -> : ^^^^ + console.log(a + aa + abcde); +>console.log(a + aa + abcde) : void +> : ^^^^ >console.log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ >console : Console > : ^^^^^^^ >log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ +>a + aa + abcde : number +> : ^^^^^^ >a + aa : number > : ^^^^^^ >a : number > : ^^^^^^ >aa : number > : ^^^^^^ +>abcde : number +> : ^^^^^^ } /** * @param {number} \u{0061} * @param {number} a\u{0061} + * @param {number} a\u{62}c\u{64}e */ -function bar(a, aa) { ->bar : (a: number, aa: number) => void -> : ^ ^^ ^^ ^^ ^^^^^^^^^ +function bar(a, aa, abcde) { +>bar : (a: number, aa: number, abcde: number) => void +> : ^ ^^ ^^ ^^ ^^ ^^ ^^^^^^^^^ >a : number > : ^^^^^^ >aa : number > : ^^^^^^ +>abcde : number +> : ^^^^^^ - console.log(a + aa); ->console.log(a + aa) : void -> : ^^^^ + console.log(a + aa + abcde); +>console.log(a + aa + abcde) : void +> : ^^^^ >console.log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ >console : Console > : ^^^^^^^ >log : (...data: any[]) => void > : ^^^^ ^^ ^^^^^ +>a + aa + abcde : number +> : ^^^^^^ >a + aa : number > : ^^^^^^ >a : number > : ^^^^^^ >aa : number > : ^^^^^^ +>abcde : number +> : ^^^^^^ } diff --git a/tests/baselines/reference/unicodeEscapesInJsxtags.errors.txt b/tests/baselines/reference/unicodeEscapesInJsxtags.errors.txt index cc664d0d2ece4..a585e1244c59a 100644 --- a/tests/baselines/reference/unicodeEscapesInJsxtags.errors.txt +++ b/tests/baselines/reference/unicodeEscapesInJsxtags.errors.txt @@ -1,23 +1,31 @@ -file.tsx(15,4): error TS17021: Unicode escape sequence cannot appear here. -file.tsx(16,4): error TS17021: Unicode escape sequence cannot appear here. file.tsx(17,4): error TS17021: Unicode escape sequence cannot appear here. file.tsx(18,4): error TS17021: Unicode escape sequence cannot appear here. -file.tsx(19,6): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(19,4): error TS17021: Unicode escape sequence cannot appear here. file.tsx(20,4): error TS17021: Unicode escape sequence cannot appear here. -file.tsx(21,4): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(21,6): error TS17021: Unicode escape sequence cannot appear here. file.tsx(22,4): error TS17021: Unicode escape sequence cannot appear here. file.tsx(23,4): error TS17021: Unicode escape sequence cannot appear here. -file.tsx(26,9): error TS17021: Unicode escape sequence cannot appear here. -file.tsx(27,9): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(24,4): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(25,4): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(26,4): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(26,20): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(27,4): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(27,44): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(30,9): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(31,9): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(32,9): error TS17021: Unicode escape sequence cannot appear here. +file.tsx(33,9): error TS17021: Unicode escape sequence cannot appear here. -==== file.tsx (11 errors) ==== +==== file.tsx (17 errors) ==== import * as React from "react"; declare global { namespace JSX { interface IntrinsicElements { "a-b": any; "a-c": any; + "abcde:abcde": any; + "namespace-name:tagname-tag": any; } } } @@ -53,6 +61,16 @@ file.tsx(27,9): error TS17021: Unicode escape sequence cannot appear here. ; ~~~~~~~~~~~~ !!! error TS17021: Unicode escape sequence cannot appear here. + ; + ~~~~~~~~~~~~~~~ +!!! error TS17021: Unicode escape sequence cannot appear here. + ~~~~~~~~~~~~~~~ +!!! error TS17021: Unicode escape sequence cannot appear here. + ; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS17021: Unicode escape sequence cannot appear here. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS17021: Unicode escape sequence cannot appear here. // attribute name ;