@@ -19,6 +19,7 @@ import {
1919 JSDocSyntaxKind ,
2020 JsxTokenSyntaxKind ,
2121 KeywordSyntaxKind ,
22+ LanguageFeatureMinimumTarget ,
2223 LanguageVariant ,
2324 last ,
2425 LineAndCharacter ,
@@ -293,15 +294,12 @@ const charToRegExpFlag = new Map(Object.entries({
293294 y : RegularExpressionFlags . Sticky ,
294295} ) ) ;
295296
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 ] ,
305303] ) ;
306304
307305/*
@@ -2461,10 +2459,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
24612459 }
24622460 else {
24632461 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 ) ;
24682463 }
24692464 }
24702465 p ++ ;
@@ -2742,10 +2737,7 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
27422737 }
27432738 else {
27442739 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 ) ;
27492741 }
27502742 pos ++ ;
27512743 }
@@ -3446,6 +3438,13 @@ export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean
34463438 }
34473439 } ) ;
34483440 }
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+ }
34493448 }
34503449
34513450 function appendIfCommentDirective (
0 commit comments