Update LKG

This commit is contained in:
TypeScript Bot 2024-04-25 05:14:28 +00:00
parent 593f2008cd
commit b574864abc
2 changed files with 266 additions and 100 deletions

View File

@ -6206,8 +6206,8 @@ var Diagnostics = {
Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1530, 1 /* Error */, "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530", "Unicode property value expressions are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."),
_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces: diag(1531, 1 /* Error */, "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531", "'\\{0}' must be followed by a Unicode property value expression enclosed in braces."),
There_is_no_capturing_group_named_0_in_this_regular_expression: diag(1532, 1 /* Error */, "There_is_no_capturing_group_named_0_in_this_regular_expression_1532", "There is no capturing group named '{0}' in this regular expression."),
A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_regular_expression: diag(1533, 1 /* Error */, "A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_1533", "A decimal escape must refer to an existent capturing group. There are only {0} capturing groups in this regular expression."),
Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression: diag(1534, 1 /* Error */, "Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression_1534", "Decimal escapes are invalid when there are no capturing groups in a regular expression."),
This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression: diag(1533, 1 /* Error */, "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533", "This backreference refers to a group that does not exist. There are only {0} capturing groups in this regular expression."),
This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups: diag(1534, 1 /* Error */, "This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups_1534", "This backreference is invalid because the containing regular expression contains no capturing groups."),
This_character_cannot_be_escaped_in_a_regular_expression: diag(1535, 1 /* Error */, "This_character_cannot_be_escaped_in_a_regular_expression_1535", "This character cannot be escaped in a regular expression."),
The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
@ -9012,7 +9012,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
tokenFlags |= 2048 /* ContainsInvalidEscape */;
if (isRegularExpression || shouldEmitInvalidEscapeError) {
const code = parseInt(text.substring(start2 + 1, pos), 8);
error(Diagnostics.Octal_escape_sequences_are_not_allowed_Use_the_syntax_0, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0"));
if (isRegularExpression !== "annex-b") {
error(Diagnostics.Octal_escape_sequences_are_not_allowed_Use_the_syntax_0, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0"));
}
return String.fromCharCode(code);
}
return text.substring(start2, pos);
@ -9043,7 +9045,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 117 /* u */:
if ((!isRegularExpression || shouldEmitInvalidEscapeError) && pos < end && text.charCodeAt(pos) === 123 /* openBrace */) {
pos -= 2;
return scanExtendedUnicodeEscape(isRegularExpression || shouldEmitInvalidEscapeError);
return scanExtendedUnicodeEscape(!!isRegularExpression || shouldEmitInvalidEscapeError);
}
for (; pos < start2 + 6; pos++) {
if (!(pos < end && isHexDigit(text.charCodeAt(pos)))) {
@ -9093,7 +9095,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 8233 /* paragraphSeparator */:
return "";
default:
if (isRegularExpression && (shouldEmitInvalidEscapeError || isIdentifierPart(ch, languageVersion))) {
if (isRegularExpression === true && (shouldEmitInvalidEscapeError || isIdentifierPart(ch, languageVersion))) {
error(Diagnostics.This_character_cannot_be_escaped_in_a_regular_expression, pos - 2, 2);
}
return String.fromCharCode(ch);
@ -9788,7 +9790,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
pos = tokenStart + 1;
return token = 64 /* EqualsToken */;
}
function reScanSlashToken() {
function reScanSlashToken(reportErrors2) {
if (token === 44 /* SlashToken */ || token === 69 /* SlashEqualsToken */) {
let p = tokenStart + 1;
let inEscape = false;
@ -9827,38 +9829,54 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (!isIdentifierPart(ch, languageVersion)) {
break;
}
const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
if (flag === void 0) {
error(Diagnostics.Unknown_regular_expression_flag, p, 1);
} else if (regExpFlags & flag) {
error(Diagnostics.Duplicate_regular_expression_flag, p, 1);
} else if (((regExpFlags | flag) & 96 /* UnicodeMode */) === 96 /* UnicodeMode */) {
error(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, p, 1);
} else {
regExpFlags |= flag;
const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
if (languageVersion < availableFrom) {
error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, p, 1, getNameOfScriptTarget(availableFrom));
if (reportErrors2) {
const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
if (flag === void 0) {
error(Diagnostics.Unknown_regular_expression_flag, p, 1);
} else if (regExpFlags & flag) {
error(Diagnostics.Duplicate_regular_expression_flag, p, 1);
} else if (((regExpFlags | flag) & 96 /* UnicodeMode */) === 96 /* UnicodeMode */) {
error(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, p, 1);
} else {
regExpFlags |= flag;
const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
if (languageVersion < availableFrom) {
error(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, p, 1, getNameOfScriptTarget(availableFrom));
}
}
}
p++;
}
pos = tokenStart + 1;
const saveTokenPos = tokenStart;
const saveTokenFlags = tokenFlags;
scanRegularExpressionWorker(text, endOfBody, regExpFlags, isUnterminated);
if (!isUnterminated) {
if (reportErrors2) {
pos = tokenStart + 1;
const saveTokenPos = tokenStart;
const saveTokenFlags = tokenFlags;
scanRegularExpressionWorker(
text,
endOfBody,
regExpFlags,
isUnterminated,
/*annexB*/
true
);
if (!isUnterminated) {
pos = p;
}
tokenStart = saveTokenPos;
tokenFlags = saveTokenFlags;
} else {
pos = p;
}
tokenStart = saveTokenPos;
tokenFlags = saveTokenFlags;
tokenValue = text.substring(tokenStart, pos);
token = 14 /* RegularExpressionLiteral */;
}
return token;
function scanRegularExpressionWorker(text2, end2, regExpFlags, isUnterminated) {
const unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
function scanRegularExpressionWorker(text2, end2, regExpFlags, isUnterminated, annexB) {
const unicodeSetsMode = !!(regExpFlags & 64 /* UnicodeSets */);
const unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
if (unicodeMode) {
annexB = false;
}
let mayContainStrings = false;
let numberOfCapturingGroups = 0;
const groupSpecifiers = /* @__PURE__ */ new Set();
@ -9909,7 +9927,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 61 /* equals */:
case 33 /* exclamation */:
pos++;
isPreviousTermQuantifiable = false;
isPreviousTermQuantifiable = annexB;
break;
case 60 /* lessThan */:
const groupNameStart = pos;
@ -10088,7 +10106,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
break;
}
default:
Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape());
Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape(
/*atomEscape*/
true
));
break;
}
}
@ -10103,7 +10124,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
return false;
}
function scanCharacterEscape() {
function scanCharacterEscape(atomEscape) {
Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
let ch = text2.charCodeAt(pos);
switch (ch) {
@ -10116,6 +10137,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
if (unicodeMode) {
error(Diagnostics.c_must_be_followed_by_an_ASCII_letter, pos - 2, 2);
} else if (atomEscape && annexB) {
pos--;
return "\\";
}
return String.fromCharCode(ch);
case 94 /* caret */:
@ -10145,7 +10169,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
/*shouldEmitInvalidEscapeError*/
unicodeMode,
/*isRegularExpression*/
true
annexB ? "annex-b" : true
);
}
}
@ -10185,12 +10209,12 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (isClassContentExit(ch2)) {
return;
}
if (!minCharacter) {
if (!minCharacter && !annexB) {
error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, minStart, pos - 1 - minStart);
}
const maxStart = pos;
const maxCharacter = scanClassAtom();
if (!maxCharacter) {
if (!maxCharacter && !annexB) {
error(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, maxStart, pos - maxStart);
continue;
}
@ -10473,7 +10497,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
pos++;
return String.fromCharCode(ch2);
default:
return scanCharacterEscape();
return scanCharacterEscape(
/*atomEscape*/
false
);
}
} else if (ch === text2.charCodeAt(pos + 1)) {
switch (ch) {
@ -10530,7 +10557,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (scanCharacterClassEscape()) {
return "";
}
return scanCharacterEscape();
return scanCharacterEscape(
/*atomEscape*/
false
);
}
} else {
return scanSourceCharacter();
@ -10645,11 +10675,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
});
forEach(decimalEscapes, (escape) => {
if (escape.value > numberOfCapturingGroups) {
if (!annexB && escape.value > numberOfCapturingGroups) {
if (numberOfCapturingGroups) {
error(Diagnostics.A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
error(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
} else {
error(Diagnostics.Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression, escape.pos, escape.end - escape.pos);
error(Diagnostics.This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups, escape.pos, escape.end - escape.pos);
}
}
});
@ -45252,6 +45282,7 @@ function createTypeChecker(host) {
var requestedExternalEmitHelperNames = /* @__PURE__ */ new Set();
var requestedExternalEmitHelpers;
var externalHelpersModule;
var scanner;
var Symbol12 = objectAllocator.getSymbolConstructor();
var Type7 = objectAllocator.getTypeConstructor();
var Signature5 = objectAllocator.getSignatureConstructor();
@ -50111,7 +50142,8 @@ function createTypeChecker(host) {
deepCloneOrReuseNode,
/*context*/
void 0,
deepCloneOrReuseNodes
deepCloneOrReuseNodes,
deepCloneOrReuseNode
)), node);
}
function deepCloneOrReuseNodes(nodes, visitor, test, start, count) {
@ -71090,6 +71122,53 @@ function createTypeChecker(host) {
return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList);
}
}
function checkGrammarRegularExpressionLiteral(node) {
const sourceFile = getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
let lastError;
scanner ?? (scanner = createScanner(
99 /* ESNext */,
/*skipTrivia*/
true
));
scanner.setScriptTarget(sourceFile.languageVersion);
scanner.setLanguageVariant(sourceFile.languageVariant);
scanner.setOnError((message, length2, arg0) => {
const start = scanner.getTokenEnd();
if (message.category === 3 /* Message */ && lastError && start === lastError.start && length2 === lastError.length) {
const error2 = createDetachedDiagnostic(sourceFile.fileName, sourceFile.text, start, length2, message, arg0);
addRelatedInfo(lastError, error2);
} else if (!lastError || start !== lastError.start) {
lastError = createFileDiagnostic(sourceFile, start, length2, message, arg0);
diagnostics.add(lastError);
}
});
scanner.setText(sourceFile.text, node.pos, node.end - node.pos);
try {
scanner.scan();
Debug.assert(scanner.reScanSlashToken(
/*reportErrors*/
true
) === 14 /* RegularExpressionLiteral */, "Expected scanner to rescan RegularExpressionLiteral");
return !!lastError;
} finally {
scanner.setText("");
scanner.setOnError(
/*onError*/
void 0
);
}
}
return false;
}
function checkRegularExpressionLiteral(node) {
const nodeLinks2 = getNodeLinks(node);
if (!(nodeLinks2.flags & 1 /* TypeChecked */)) {
nodeLinks2.flags |= 1 /* TypeChecked */;
addLazyDiagnostic(() => checkGrammarRegularExpressionLiteral(node));
}
return globalRegExpType;
}
function checkSpreadExpression(node, checkMode) {
if (languageVersion < 2 /* SpreadElements */) {
checkExternalEmitHelpers(node, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
@ -76993,7 +77072,7 @@ function createTypeChecker(host) {
parent = parent.parent;
}
if (operator === 56 /* AmpersandAmpersandToken */ || isIfStatement(parent)) {
checkTestingKnownTruthyCallableOrAwaitableType(node.left, leftType, isIfStatement(parent) ? parent.thenStatement : void 0);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.left, leftType, isIfStatement(parent) ? parent.thenStatement : void 0);
}
checkTruthinessOfType(leftType, node.left);
}
@ -77551,7 +77630,7 @@ function createTypeChecker(host) {
}
function checkConditionalExpression(node, checkMode) {
const type = checkTruthinessExpression(node.condition, checkMode);
checkTestingKnownTruthyCallableOrAwaitableType(node.condition, type, node.whenTrue);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.condition, type, node.whenTrue);
const type1 = checkExpression(node.whenTrue, checkMode);
const type2 = checkExpression(node.whenFalse, checkMode);
return getUnionType([type1, type2], 2 /* Subtype */);
@ -78024,7 +78103,7 @@ function createTypeChecker(host) {
case 228 /* TemplateExpression */:
return checkTemplateExpression(node);
case 14 /* RegularExpressionLiteral */:
return globalRegExpType;
return checkRegularExpressionLiteral(node);
case 209 /* ArrayLiteralExpression */:
return checkArrayLiteral(node, checkMode, forceTuple);
case 210 /* ObjectLiteralExpression */:
@ -80599,14 +80678,14 @@ function createTypeChecker(host) {
function checkIfStatement(node) {
checkGrammarStatementInAmbientContext(node);
const type = checkTruthinessExpression(node.expression);
checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.expression, type, node.thenStatement);
checkSourceElement(node.thenStatement);
if (node.thenStatement.kind === 242 /* EmptyStatement */) {
error(node.thenStatement, Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
}
checkSourceElement(node.elseStatement);
}
function checkTestingKnownTruthyCallableOrAwaitableType(condExpr, condType, body) {
function checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(condExpr, condType, body) {
if (!strictNullChecks)
return;
bothHelper(condExpr, body);
@ -80628,6 +80707,10 @@ function createTypeChecker(host) {
return;
}
const type = location === condExpr2 ? condType : checkTruthinessExpression(location);
if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) {
error(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false");
return;
}
const isPropertyExpressionCast = isPropertyAccessExpression(location) && isTypeAssertion(location.expression);
if (!hasTypeFacts(type, 4194304 /* Truthy */) || isPropertyExpressionCast)
return;
@ -83073,7 +83156,7 @@ function createTypeChecker(host) {
if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) {
return;
}
if (!checkGrammarModifiers(node) && hasEffectiveModifiers(node)) {
if (!checkGrammarModifiers(node) && node.modifiers) {
grammarErrorOnFirstToken(node, Diagnostics.An_import_declaration_cannot_have_modifiers);
}
if (checkExternalImportOrExportDeclaration(node)) {
@ -121313,7 +121396,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
}
return Version.zero;
}
function checkDeprecations(deprecatedIn, removedIn, createDiagnostic, fn) {
function checkDeprecations(deprecatedIn, stopsWorkingIn, removedIn, createDiagnostic, fn) {
const deprecatedInVersion = new Version(deprecatedIn);
const removedInVersion = new Version(removedIn);
const typescriptVersion = new Version(typeScriptVersion2 || versionMajorMinor);
@ -121330,9 +121413,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
}
} else {
if (value === void 0) {
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn);
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, stopsWorkingIn, deprecatedIn);
} else {
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn);
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, stopsWorkingIn, deprecatedIn);
}
}
});
@ -121368,7 +121451,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
);
}
}
checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => {
checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => {
if (options.target === 0 /* ES3 */) {
createDeprecatedDiagnostic("target", "ES3");
}
@ -121420,7 +121503,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
function createDiagnostic(_name, _value, _useInstead, message, ...args) {
createDiagnosticForReference(parentFile, index, message, ...args);
}
checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => {
checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => {
if (ref.prepend) {
createDeprecatedDiagnostic("prepend");
}

View File

@ -9813,8 +9813,8 @@ var Diagnostics = {
Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1530, 1 /* Error */, "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530", "Unicode property value expressions are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."),
_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces: diag(1531, 1 /* Error */, "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531", "'\\{0}' must be followed by a Unicode property value expression enclosed in braces."),
There_is_no_capturing_group_named_0_in_this_regular_expression: diag(1532, 1 /* Error */, "There_is_no_capturing_group_named_0_in_this_regular_expression_1532", "There is no capturing group named '{0}' in this regular expression."),
A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_regular_expression: diag(1533, 1 /* Error */, "A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_1533", "A decimal escape must refer to an existent capturing group. There are only {0} capturing groups in this regular expression."),
Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression: diag(1534, 1 /* Error */, "Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression_1534", "Decimal escapes are invalid when there are no capturing groups in a regular expression."),
This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression: diag(1533, 1 /* Error */, "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533", "This backreference refers to a group that does not exist. There are only {0} capturing groups in this regular expression."),
This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups: diag(1534, 1 /* Error */, "This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups_1534", "This backreference is invalid because the containing regular expression contains no capturing groups."),
This_character_cannot_be_escaped_in_a_regular_expression: diag(1535, 1 /* Error */, "This_character_cannot_be_escaped_in_a_regular_expression_1535", "This character cannot be escaped in a regular expression."),
The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."),
The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."),
@ -12643,7 +12643,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
tokenFlags |= 2048 /* ContainsInvalidEscape */;
if (isRegularExpression || shouldEmitInvalidEscapeError) {
const code = parseInt(text.substring(start2 + 1, pos), 8);
error2(Diagnostics.Octal_escape_sequences_are_not_allowed_Use_the_syntax_0, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0"));
if (isRegularExpression !== "annex-b") {
error2(Diagnostics.Octal_escape_sequences_are_not_allowed_Use_the_syntax_0, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0"));
}
return String.fromCharCode(code);
}
return text.substring(start2, pos);
@ -12674,7 +12676,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 117 /* u */:
if ((!isRegularExpression || shouldEmitInvalidEscapeError) && pos < end && text.charCodeAt(pos) === 123 /* openBrace */) {
pos -= 2;
return scanExtendedUnicodeEscape(isRegularExpression || shouldEmitInvalidEscapeError);
return scanExtendedUnicodeEscape(!!isRegularExpression || shouldEmitInvalidEscapeError);
}
for (; pos < start2 + 6; pos++) {
if (!(pos < end && isHexDigit(text.charCodeAt(pos)))) {
@ -12724,7 +12726,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 8233 /* paragraphSeparator */:
return "";
default:
if (isRegularExpression && (shouldEmitInvalidEscapeError || isIdentifierPart(ch, languageVersion))) {
if (isRegularExpression === true && (shouldEmitInvalidEscapeError || isIdentifierPart(ch, languageVersion))) {
error2(Diagnostics.This_character_cannot_be_escaped_in_a_regular_expression, pos - 2, 2);
}
return String.fromCharCode(ch);
@ -13419,7 +13421,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
pos = tokenStart + 1;
return token = 64 /* EqualsToken */;
}
function reScanSlashToken() {
function reScanSlashToken(reportErrors2) {
if (token === 44 /* SlashToken */ || token === 69 /* SlashEqualsToken */) {
let p = tokenStart + 1;
let inEscape = false;
@ -13458,38 +13460,54 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (!isIdentifierPart(ch, languageVersion)) {
break;
}
const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
if (flag === void 0) {
error2(Diagnostics.Unknown_regular_expression_flag, p, 1);
} else if (regExpFlags & flag) {
error2(Diagnostics.Duplicate_regular_expression_flag, p, 1);
} else if (((regExpFlags | flag) & 96 /* UnicodeMode */) === 96 /* UnicodeMode */) {
error2(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, p, 1);
} else {
regExpFlags |= flag;
const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
if (languageVersion < availableFrom) {
error2(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, p, 1, getNameOfScriptTarget(availableFrom));
if (reportErrors2) {
const flag = characterToRegularExpressionFlag(String.fromCharCode(ch));
if (flag === void 0) {
error2(Diagnostics.Unknown_regular_expression_flag, p, 1);
} else if (regExpFlags & flag) {
error2(Diagnostics.Duplicate_regular_expression_flag, p, 1);
} else if (((regExpFlags | flag) & 96 /* UnicodeMode */) === 96 /* UnicodeMode */) {
error2(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, p, 1);
} else {
regExpFlags |= flag;
const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag);
if (languageVersion < availableFrom) {
error2(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, p, 1, getNameOfScriptTarget(availableFrom));
}
}
}
p++;
}
pos = tokenStart + 1;
const saveTokenPos = tokenStart;
const saveTokenFlags = tokenFlags;
scanRegularExpressionWorker(text, endOfBody, regExpFlags, isUnterminated);
if (!isUnterminated) {
if (reportErrors2) {
pos = tokenStart + 1;
const saveTokenPos = tokenStart;
const saveTokenFlags = tokenFlags;
scanRegularExpressionWorker(
text,
endOfBody,
regExpFlags,
isUnterminated,
/*annexB*/
true
);
if (!isUnterminated) {
pos = p;
}
tokenStart = saveTokenPos;
tokenFlags = saveTokenFlags;
} else {
pos = p;
}
tokenStart = saveTokenPos;
tokenFlags = saveTokenFlags;
tokenValue = text.substring(tokenStart, pos);
token = 14 /* RegularExpressionLiteral */;
}
return token;
function scanRegularExpressionWorker(text2, end2, regExpFlags, isUnterminated) {
const unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
function scanRegularExpressionWorker(text2, end2, regExpFlags, isUnterminated, annexB) {
const unicodeSetsMode = !!(regExpFlags & 64 /* UnicodeSets */);
const unicodeMode = !!(regExpFlags & 96 /* UnicodeMode */);
if (unicodeMode) {
annexB = false;
}
let mayContainStrings = false;
let numberOfCapturingGroups = 0;
const groupSpecifiers = /* @__PURE__ */ new Set();
@ -13540,7 +13558,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
case 61 /* equals */:
case 33 /* exclamation */:
pos++;
isPreviousTermQuantifiable = false;
isPreviousTermQuantifiable = annexB;
break;
case 60 /* lessThan */:
const groupNameStart = pos;
@ -13719,7 +13737,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
break;
}
default:
Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape());
Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape(
/*atomEscape*/
true
));
break;
}
}
@ -13734,7 +13755,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
return false;
}
function scanCharacterEscape() {
function scanCharacterEscape(atomEscape) {
Debug.assertEqual(text2.charCodeAt(pos - 1), 92 /* backslash */);
let ch = text2.charCodeAt(pos);
switch (ch) {
@ -13747,6 +13768,9 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
if (unicodeMode) {
error2(Diagnostics.c_must_be_followed_by_an_ASCII_letter, pos - 2, 2);
} else if (atomEscape && annexB) {
pos--;
return "\\";
}
return String.fromCharCode(ch);
case 94 /* caret */:
@ -13776,7 +13800,7 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
/*shouldEmitInvalidEscapeError*/
unicodeMode,
/*isRegularExpression*/
true
annexB ? "annex-b" : true
);
}
}
@ -13816,12 +13840,12 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (isClassContentExit(ch2)) {
return;
}
if (!minCharacter) {
if (!minCharacter && !annexB) {
error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, minStart, pos - 1 - minStart);
}
const maxStart = pos;
const maxCharacter = scanClassAtom();
if (!maxCharacter) {
if (!maxCharacter && !annexB) {
error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, maxStart, pos - maxStart);
continue;
}
@ -14104,7 +14128,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
pos++;
return String.fromCharCode(ch2);
default:
return scanCharacterEscape();
return scanCharacterEscape(
/*atomEscape*/
false
);
}
} else if (ch === text2.charCodeAt(pos + 1)) {
switch (ch) {
@ -14161,7 +14188,10 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
if (scanCharacterClassEscape()) {
return "";
}
return scanCharacterEscape();
return scanCharacterEscape(
/*atomEscape*/
false
);
}
} else {
return scanSourceCharacter();
@ -14276,11 +14306,11 @@ function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Stan
}
});
forEach(decimalEscapes, (escape) => {
if (escape.value > numberOfCapturingGroups) {
if (!annexB && escape.value > numberOfCapturingGroups) {
if (numberOfCapturingGroups) {
error2(Diagnostics.A_decimal_escape_must_refer_to_an_existent_capturing_group_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
error2(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups);
} else {
error2(Diagnostics.Decimal_escapes_are_invalid_when_there_are_no_capturing_groups_in_a_regular_expression, escape.pos, escape.end - escape.pos);
error2(Diagnostics.This_backreference_is_invalid_because_the_containing_regular_expression_contains_no_capturing_groups, escape.pos, escape.end - escape.pos);
}
}
});
@ -50077,6 +50107,7 @@ function createTypeChecker(host) {
var requestedExternalEmitHelperNames = /* @__PURE__ */ new Set();
var requestedExternalEmitHelpers;
var externalHelpersModule;
var scanner2;
var Symbol47 = objectAllocator.getSymbolConstructor();
var Type28 = objectAllocator.getTypeConstructor();
var Signature14 = objectAllocator.getSignatureConstructor();
@ -54936,7 +54967,8 @@ function createTypeChecker(host) {
deepCloneOrReuseNode,
/*context*/
void 0,
deepCloneOrReuseNodes
deepCloneOrReuseNodes,
deepCloneOrReuseNode
)), node);
}
function deepCloneOrReuseNodes(nodes, visitor, test, start, count) {
@ -75915,6 +75947,53 @@ function createTypeChecker(host) {
return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList);
}
}
function checkGrammarRegularExpressionLiteral(node) {
const sourceFile = getSourceFileOfNode(node);
if (!hasParseDiagnostics(sourceFile)) {
let lastError;
scanner2 ?? (scanner2 = createScanner(
99 /* ESNext */,
/*skipTrivia*/
true
));
scanner2.setScriptTarget(sourceFile.languageVersion);
scanner2.setLanguageVariant(sourceFile.languageVariant);
scanner2.setOnError((message, length2, arg0) => {
const start = scanner2.getTokenEnd();
if (message.category === 3 /* Message */ && lastError && start === lastError.start && length2 === lastError.length) {
const error3 = createDetachedDiagnostic(sourceFile.fileName, sourceFile.text, start, length2, message, arg0);
addRelatedInfo(lastError, error3);
} else if (!lastError || start !== lastError.start) {
lastError = createFileDiagnostic(sourceFile, start, length2, message, arg0);
diagnostics.add(lastError);
}
});
scanner2.setText(sourceFile.text, node.pos, node.end - node.pos);
try {
scanner2.scan();
Debug.assert(scanner2.reScanSlashToken(
/*reportErrors*/
true
) === 14 /* RegularExpressionLiteral */, "Expected scanner to rescan RegularExpressionLiteral");
return !!lastError;
} finally {
scanner2.setText("");
scanner2.setOnError(
/*onError*/
void 0
);
}
}
return false;
}
function checkRegularExpressionLiteral(node) {
const nodeLinks2 = getNodeLinks(node);
if (!(nodeLinks2.flags & 1 /* TypeChecked */)) {
nodeLinks2.flags |= 1 /* TypeChecked */;
addLazyDiagnostic(() => checkGrammarRegularExpressionLiteral(node));
}
return globalRegExpType;
}
function checkSpreadExpression(node, checkMode) {
if (languageVersion < 2 /* SpreadElements */) {
checkExternalEmitHelpers(node, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */);
@ -81818,7 +81897,7 @@ function createTypeChecker(host) {
parent2 = parent2.parent;
}
if (operator === 56 /* AmpersandAmpersandToken */ || isIfStatement(parent2)) {
checkTestingKnownTruthyCallableOrAwaitableType(node.left, leftType, isIfStatement(parent2) ? parent2.thenStatement : void 0);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.left, leftType, isIfStatement(parent2) ? parent2.thenStatement : void 0);
}
checkTruthinessOfType(leftType, node.left);
}
@ -82376,7 +82455,7 @@ function createTypeChecker(host) {
}
function checkConditionalExpression(node, checkMode) {
const type = checkTruthinessExpression(node.condition, checkMode);
checkTestingKnownTruthyCallableOrAwaitableType(node.condition, type, node.whenTrue);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.condition, type, node.whenTrue);
const type1 = checkExpression(node.whenTrue, checkMode);
const type2 = checkExpression(node.whenFalse, checkMode);
return getUnionType([type1, type2], 2 /* Subtype */);
@ -82849,7 +82928,7 @@ function createTypeChecker(host) {
case 228 /* TemplateExpression */:
return checkTemplateExpression(node);
case 14 /* RegularExpressionLiteral */:
return globalRegExpType;
return checkRegularExpressionLiteral(node);
case 209 /* ArrayLiteralExpression */:
return checkArrayLiteral(node, checkMode, forceTuple);
case 210 /* ObjectLiteralExpression */:
@ -85424,14 +85503,14 @@ function createTypeChecker(host) {
function checkIfStatement(node) {
checkGrammarStatementInAmbientContext(node);
const type = checkTruthinessExpression(node.expression);
checkTestingKnownTruthyCallableOrAwaitableType(node.expression, type, node.thenStatement);
checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.expression, type, node.thenStatement);
checkSourceElement(node.thenStatement);
if (node.thenStatement.kind === 242 /* EmptyStatement */) {
error2(node.thenStatement, Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement);
}
checkSourceElement(node.elseStatement);
}
function checkTestingKnownTruthyCallableOrAwaitableType(condExpr, condType, body) {
function checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(condExpr, condType, body) {
if (!strictNullChecks)
return;
bothHelper(condExpr, body);
@ -85453,6 +85532,10 @@ function createTypeChecker(host) {
return;
}
const type = location === condExpr2 ? condType : checkTruthinessExpression(location);
if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) {
error2(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false");
return;
}
const isPropertyExpressionCast = isPropertyAccessExpression(location) && isTypeAssertion(location.expression);
if (!hasTypeFacts(type, 4194304 /* Truthy */) || isPropertyExpressionCast)
return;
@ -87898,7 +87981,7 @@ function createTypeChecker(host) {
if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) {
return;
}
if (!checkGrammarModifiers(node) && hasEffectiveModifiers(node)) {
if (!checkGrammarModifiers(node) && node.modifiers) {
grammarErrorOnFirstToken(node, Diagnostics.An_import_declaration_cannot_have_modifiers);
}
if (checkExternalImportOrExportDeclaration(node)) {
@ -126382,7 +126465,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
}
return Version.zero;
}
function checkDeprecations(deprecatedIn, removedIn, createDiagnostic, fn) {
function checkDeprecations(deprecatedIn, stopsWorkingIn, removedIn, createDiagnostic, fn) {
const deprecatedInVersion = new Version(deprecatedIn);
const removedInVersion = new Version(removedIn);
const typescriptVersion = new Version(typeScriptVersion3 || versionMajorMinor);
@ -126399,9 +126482,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
}
} else {
if (value === void 0) {
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn);
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, stopsWorkingIn, deprecatedIn);
} else {
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn);
createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, stopsWorkingIn, deprecatedIn);
}
}
});
@ -126437,7 +126520,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
);
}
}
checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => {
checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => {
if (options.target === 0 /* ES3 */) {
createDeprecatedDiagnostic("target", "ES3");
}
@ -126489,7 +126572,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config
function createDiagnostic(_name, _value, _useInstead, message, ...args) {
createDiagnosticForReference(parentFile, index, message, ...args);
}
checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => {
checkDeprecations("5.0", "5.5", "6.0", createDiagnostic, (createDeprecatedDiagnostic) => {
if (ref.prepend) {
createDeprecatedDiagnostic("prepend");
}