Provide User-Friendly Message for Extended Unicode Escapes in Regular Expressions in Non-Unicode Modes (#58981)

Co-authored-by: Ron Buckton <ron.buckton@microsoft.com>
This commit is contained in:
graphemecluster
2024-07-18 10:08:54 +08:00
committed by GitHub
parent afa03f0948
commit 165350dc8f
8 changed files with 102 additions and 19 deletions

View File

@@ -1805,6 +1805,10 @@
"category": "Error",
"code": 1537
},
"Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set.": {
"category": "Error",
"code": 1538
},
"The types of '{0}' are incompatible between these types.": {
"category": "Error",

View File

@@ -1006,7 +1006,7 @@ const enum EscapeSequenceScanningFlags {
AtomEscape = 1 << 5,
ReportInvalidEscapeErrors = RegularExpression | ReportErrors,
ScanExtendedUnicodeEscape = String | AnyUnicodeMode,
AllowExtendedUnicodeEscape = String | AnyUnicodeMode,
}
const enum ClassSetExpressionType {
@@ -1609,13 +1609,17 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
case CharacterCodes.doubleQuote:
return '"';
case CharacterCodes.u:
if (
flags & EscapeSequenceScanningFlags.ScanExtendedUnicodeEscape &&
pos < end && charCodeUnchecked(pos) === CharacterCodes.openBrace
) {
if (pos < end && charCodeUnchecked(pos) === CharacterCodes.openBrace) {
// '\u{DDDDDD}'
pos -= 2;
return scanExtendedUnicodeEscape(!!(flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors));
const result = scanExtendedUnicodeEscape(!!(flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors));
if (!(flags & EscapeSequenceScanningFlags.AllowExtendedUnicodeEscape)) {
tokenFlags |= TokenFlags.ContainsInvalidEscape;
if (flags & EscapeSequenceScanningFlags.ReportInvalidEscapeErrors) {
error(Diagnostics.Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start, pos - start);
}
}
return result;
}
// '\uDDDD'
for (; pos < start + 6; pos++) {