@@ -19,6 +19,7 @@ import {
19
19
JSDocSyntaxKind ,
20
20
JsxTokenSyntaxKind ,
21
21
KeywordSyntaxKind ,
22
+ LanguageFeatureMinimumTarget ,
22
23
LanguageVariant ,
23
24
last ,
24
25
LineAndCharacter ,
@@ -293,15 +294,12 @@ const charToRegExpFlag = new Map(Object.entries({
293
294
y : RegularExpressionFlags . Sticky ,
294
295
} ) ) ;
295
296
296
- const regExpFlagToFirstAvailableLanguageVersion = new Map ( [
297
- [ RegularExpressionFlags . HasIndices , ScriptTarget . ES2022 ] ,
298
- [ RegularExpressionFlags . Global , ScriptTarget . ES3 ] ,
299
- [ RegularExpressionFlags . IgnoreCase , ScriptTarget . ES3 ] ,
300
- [ RegularExpressionFlags . Multiline , ScriptTarget . ES3 ] ,
301
- [ RegularExpressionFlags . DotAll , ScriptTarget . ES2018 ] ,
302
- [ RegularExpressionFlags . Unicode , ScriptTarget . ES2015 ] ,
303
- [ RegularExpressionFlags . UnicodeSets , ScriptTarget . ESNext ] ,
304
- [ RegularExpressionFlags . Sticky , ScriptTarget . ES2015 ] ,
297
+ const regExpFlagToFirstAvailableLanguageVersion = new Map < RegularExpressionFlags , LanguageFeatureMinimumTarget > ( [
298
+ [ RegularExpressionFlags . HasIndices , LanguageFeatureMinimumTarget . RegularExpressionFlagsHasIndices ] ,
299
+ [ RegularExpressionFlags . DotAll , LanguageFeatureMinimumTarget . RegularExpressionFlagsDotAll ] ,
300
+ [ RegularExpressionFlags . Unicode , LanguageFeatureMinimumTarget . RegularExpressionFlagsUnicode ] ,
301
+ [ RegularExpressionFlags . UnicodeSets , LanguageFeatureMinimumTarget . RegularExpressionFlagsUnicodeSets ] ,
302
+ [ RegularExpressionFlags . Sticky , LanguageFeatureMinimumTarget . RegularExpressionFlagsSticky ] ,
305
303
] ) ;
306
304
307
305
/*
@@ -2461,10 +2459,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
2461
2459
}
2462
2460
else {
2463
2461
regExpFlags |= flag ;
2464
- const availableFrom = regExpFlagToFirstAvailableLanguageVersion . get ( flag ) ! ;
2465
- if ( languageVersion < availableFrom ) {
2466
- error ( Diagnostics . This_regular_expression_flag_is_only_available_when_targeting_0_or_later , p , 1 , getNameOfScriptTarget ( availableFrom ) ) ;
2467
- }
2462
+ checkRegularExpressionFlagAvailable ( flag , p ) ;
2468
2463
}
2469
2464
}
2470
2465
p ++ ;
@@ -2742,10 +2737,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
2742
2737
}
2743
2738
else {
2744
2739
currFlags |= flag ;
2745
- const availableFrom = regExpFlagToFirstAvailableLanguageVersion . get ( flag ) ! ;
2746
- if ( languageVersion < availableFrom ) {
2747
- error ( Diagnostics . This_regular_expression_flag_is_only_available_when_targeting_0_or_later , pos , 1 , getNameOfScriptTarget ( availableFrom ) ) ;
2748
- }
2740
+ checkRegularExpressionFlagAvailable ( flag , pos ) ;
2749
2741
}
2750
2742
pos ++ ;
2751
2743
}
@@ -3446,6 +3438,13 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
3446
3438
}
3447
3439
} ) ;
3448
3440
}
3441
+
3442
+ function checkRegularExpressionFlagAvailable ( flag : RegularExpressionFlags , pos : number ) {
3443
+ const availableFrom = regExpFlagToFirstAvailableLanguageVersion . get ( flag ) as ScriptTarget | undefined ;
3444
+ if ( availableFrom && languageVersion < availableFrom ) {
3445
+ error ( Diagnostics . This_regular_expression_flag_is_only_available_when_targeting_0_or_later , pos , 1 , getNameOfScriptTarget ( availableFrom ) ) ;
3446
+ }
3447
+ }
3449
3448
}
3450
3449
3451
3450
function appendIfCommentDirective (
0 commit comments