@@ -40,9 +40,15 @@ export function tokenIsIdentifierOrKeywordOrGreaterThan(token: SyntaxKind): bool
40
40
}
41
41
42
42
export interface Scanner {
43
+ /** @deprecated use {@link getTokenFullStart} */
43
44
getStartPos ( ) : number ;
44
45
getToken ( ) : SyntaxKind ;
46
+ getTokenFullStart ( ) : number ;
47
+ getTokenStart ( ) : number ;
48
+ getTokenEnd ( ) : number ;
49
+ /** @deprecated use {@link getTokenEnd} */
45
50
getTextPos ( ) : number ;
51
+ /** @deprecated use {@link getTokenStart} */
46
52
getTokenPos ( ) : number ;
47
53
getTokenText ( ) : string ;
48
54
getTokenValue ( ) : string ;
@@ -86,7 +92,9 @@ export interface Scanner {
86
92
setOnError ( onError : ErrorCallback | undefined ) : void ;
87
93
setScriptTarget ( scriptTarget : ScriptTarget ) : void ;
88
94
setLanguageVariant ( variant : LanguageVariant ) : void ;
95
+ /** @deprecated use {@link resetTokenState} */
89
96
setTextPos ( textPos : number ) : void ;
97
+ resetTokenState ( pos : number ) : void ;
90
98
/** @internal */
91
99
setInJSDocType ( inType : boolean ) : void ;
92
100
// Invokes the provided callback then unconditionally restores the scanner to the state it
@@ -974,10 +982,10 @@ export function createScanner(languageVersion: ScriptTarget,
974
982
var end : number ;
975
983
976
984
// Start position of whitespace before current token
977
- var startPos : number ;
985
+ var fullStartPos : number ;
978
986
979
987
// Start position of text of current token
980
- var tokenPos : number ;
988
+ var tokenStart : number ;
981
989
982
990
var token : SyntaxKind ;
983
991
var tokenValue ! : string ;
@@ -989,11 +997,14 @@ export function createScanner(languageVersion: ScriptTarget,
989
997
setText ( text , start , length ) ;
990
998
991
999
var scanner : Scanner = {
992
- getStartPos : ( ) => startPos ,
1000
+ getTokenFullStart : ( ) => fullStartPos ,
1001
+ getStartPos : ( ) => fullStartPos ,
1002
+ getTokenEnd : ( ) => pos ,
993
1003
getTextPos : ( ) => pos ,
994
1004
getToken : ( ) => token ,
995
- getTokenPos : ( ) => tokenPos ,
996
- getTokenText : ( ) => text . substring ( tokenPos , pos ) ,
1005
+ getTokenStart : ( ) => tokenStart ,
1006
+ getTokenPos : ( ) => tokenStart ,
1007
+ getTokenText : ( ) => text . substring ( tokenStart , pos ) ,
997
1008
getTokenValue : ( ) => tokenValue ,
998
1009
hasUnicodeEscape : ( ) => ( tokenFlags & TokenFlags . UnicodeEscape ) !== 0 ,
999
1010
hasExtendedUnicodeEscape : ( ) => ( tokenFlags & TokenFlags . ExtendedUnicodeEscape ) !== 0 ,
@@ -1027,7 +1038,8 @@ export function createScanner(languageVersion: ScriptTarget,
1027
1038
setScriptTarget,
1028
1039
setLanguageVariant,
1029
1040
setOnError,
1030
- setTextPos,
1041
+ resetTokenState,
1042
+ setTextPos : resetTokenState ,
1031
1043
setInJSDocType,
1032
1044
tryScan,
1033
1045
lookAhead,
@@ -1039,7 +1051,7 @@ export function createScanner(languageVersion: ScriptTarget,
1039
1051
Object . defineProperty ( scanner , "__debugShowCurrentPositionInText" , {
1040
1052
get : ( ) => {
1041
1053
const text = scanner . getText ( ) ;
1042
- return text . slice ( 0 , scanner . getStartPos ( ) ) + "║" + text . slice ( scanner . getStartPos ( ) ) ;
1054
+ return text . slice ( 0 , scanner . getTokenFullStart ( ) ) + "║" + text . slice ( scanner . getTokenFullStart ( ) ) ;
1043
1055
} ,
1044
1056
} ) ;
1045
1057
}
@@ -1638,11 +1650,11 @@ export function createScanner(languageVersion: ScriptTarget,
1638
1650
}
1639
1651
1640
1652
function scan ( ) : SyntaxKind {
1641
- startPos = pos ;
1653
+ fullStartPos = pos ;
1642
1654
tokenFlags = TokenFlags . None ;
1643
1655
let asteriskSeen = false ;
1644
1656
while ( true ) {
1645
- tokenPos = pos ;
1657
+ tokenStart = pos ;
1646
1658
if ( pos >= end ) {
1647
1659
return token = SyntaxKind . EndOfFileToken ;
1648
1660
}
@@ -1810,9 +1822,9 @@ export function createScanner(languageVersion: ScriptTarget,
1810
1822
1811
1823
commentDirectives = appendIfCommentDirective (
1812
1824
commentDirectives ,
1813
- text . slice ( tokenPos , pos ) ,
1825
+ text . slice ( tokenStart , pos ) ,
1814
1826
commentDirectiveRegExSingleLine ,
1815
- tokenPos ,
1827
+ tokenStart ,
1816
1828
) ;
1817
1829
1818
1830
if ( skipTrivia ) {
@@ -1830,7 +1842,7 @@ export function createScanner(languageVersion: ScriptTarget,
1830
1842
}
1831
1843
1832
1844
let commentClosed = false ;
1833
- let lastLineStart = tokenPos ;
1845
+ let lastLineStart = tokenStart ;
1834
1846
while ( pos < end ) {
1835
1847
const ch = text . charCodeAt ( pos ) ;
1836
1848
@@ -2139,7 +2151,7 @@ export function createScanner(languageVersion: ScriptTarget,
2139
2151
2140
2152
function reScanInvalidIdentifier ( ) : SyntaxKind {
2141
2153
Debug . assert ( token === SyntaxKind . Unknown , "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'." ) ;
2142
- pos = tokenPos = startPos ;
2154
+ pos = tokenStart = fullStartPos ;
2143
2155
tokenFlags = 0 ;
2144
2156
const ch = codePointAt ( text , pos ) ;
2145
2157
const identifierKind = scanIdentifier ( ch , ScriptTarget . ESNext ) ;
@@ -2155,7 +2167,7 @@ export function createScanner(languageVersion: ScriptTarget,
2155
2167
if ( isIdentifierStart ( ch , languageVersion ) ) {
2156
2168
pos += charSize ( ch ) ;
2157
2169
while ( pos < end && isIdentifierPart ( ch = codePointAt ( text , pos ) , languageVersion ) ) pos += charSize ( ch ) ;
2158
- tokenValue = text . substring ( tokenPos , pos ) ;
2170
+ tokenValue = text . substring ( tokenStart , pos ) ;
2159
2171
if ( ch === CharacterCodes . backslash ) {
2160
2172
tokenValue += scanIdentifierParts ( ) ;
2161
2173
}
@@ -2188,13 +2200,13 @@ export function createScanner(languageVersion: ScriptTarget,
2188
2200
2189
2201
function reScanAsteriskEqualsToken ( ) : SyntaxKind {
2190
2202
Debug . assert ( token === SyntaxKind . AsteriskEqualsToken , "'reScanAsteriskEqualsToken' should only be called on a '*='" ) ;
2191
- pos = tokenPos + 1 ;
2203
+ pos = tokenStart + 1 ;
2192
2204
return token = SyntaxKind . EqualsToken ;
2193
2205
}
2194
2206
2195
2207
function reScanSlashToken ( ) : SyntaxKind {
2196
2208
if ( token === SyntaxKind . SlashToken || token === SyntaxKind . SlashEqualsToken ) {
2197
- let p = tokenPos + 1 ;
2209
+ let p = tokenStart + 1 ;
2198
2210
let inEscape = false ;
2199
2211
let inCharacterClass = false ;
2200
2212
while ( true ) {
@@ -2240,7 +2252,7 @@ export function createScanner(languageVersion: ScriptTarget,
2240
2252
p ++ ;
2241
2253
}
2242
2254
pos = p ;
2243
- tokenValue = text . substring ( tokenPos , pos ) ;
2255
+ tokenValue = text . substring ( tokenStart , pos ) ;
2244
2256
token = SyntaxKind . RegularExpressionLiteral ;
2245
2257
}
2246
2258
return token ;
@@ -2288,44 +2300,44 @@ export function createScanner(languageVersion: ScriptTarget,
2288
2300
*/
2289
2301
function reScanTemplateToken ( isTaggedTemplate : boolean ) : SyntaxKind {
2290
2302
Debug . assert ( token === SyntaxKind . CloseBraceToken , "'reScanTemplateToken' should only be called on a '}'" ) ;
2291
- pos = tokenPos ;
2303
+ pos = tokenStart ;
2292
2304
return token = scanTemplateAndSetTokenValue ( isTaggedTemplate ) ;
2293
2305
}
2294
2306
2295
2307
function reScanTemplateHeadOrNoSubstitutionTemplate ( ) : SyntaxKind {
2296
- pos = tokenPos ;
2308
+ pos = tokenStart ;
2297
2309
return token = scanTemplateAndSetTokenValue ( /* isTaggedTemplate */ true ) ;
2298
2310
}
2299
2311
2300
2312
function reScanJsxToken ( allowMultilineJsxText = true ) : JsxTokenSyntaxKind {
2301
- pos = tokenPos = startPos ;
2313
+ pos = tokenStart = fullStartPos ;
2302
2314
return token = scanJsxToken ( allowMultilineJsxText ) ;
2303
2315
}
2304
2316
2305
2317
function reScanLessThanToken ( ) : SyntaxKind {
2306
2318
if ( token === SyntaxKind . LessThanLessThanToken ) {
2307
- pos = tokenPos + 1 ;
2319
+ pos = tokenStart + 1 ;
2308
2320
return token = SyntaxKind . LessThanToken ;
2309
2321
}
2310
2322
return token ;
2311
2323
}
2312
2324
2313
2325
function reScanHashToken ( ) : SyntaxKind {
2314
2326
if ( token === SyntaxKind . PrivateIdentifier ) {
2315
- pos = tokenPos + 1 ;
2327
+ pos = tokenStart + 1 ;
2316
2328
return token = SyntaxKind . HashToken ;
2317
2329
}
2318
2330
return token ;
2319
2331
}
2320
2332
2321
2333
function reScanQuestionToken ( ) : SyntaxKind {
2322
2334
Debug . assert ( token === SyntaxKind . QuestionQuestionToken , "'reScanQuestionToken' should only be called on a '??'" ) ;
2323
- pos = tokenPos + 1 ;
2335
+ pos = tokenStart + 1 ;
2324
2336
return token = SyntaxKind . QuestionToken ;
2325
2337
}
2326
2338
2327
2339
function scanJsxToken ( allowMultilineJsxText = true ) : JsxTokenSyntaxKind {
2328
- startPos = tokenPos = pos ;
2340
+ fullStartPos = tokenStart = pos ;
2329
2341
2330
2342
if ( pos >= end ) {
2331
2343
return token = SyntaxKind . EndOfFileToken ;
@@ -2392,7 +2404,7 @@ export function createScanner(languageVersion: ScriptTarget,
2392
2404
pos ++ ;
2393
2405
}
2394
2406
2395
- tokenValue = text . substring ( startPos , pos ) ;
2407
+ tokenValue = text . substring ( fullStartPos , pos ) ;
2396
2408
2397
2409
return firstNonWhitespace === - 1 ? SyntaxKind . JsxTextAllWhiteSpaces : SyntaxKind . JsxText ;
2398
2410
}
@@ -2437,7 +2449,7 @@ export function createScanner(languageVersion: ScriptTarget,
2437
2449
}
2438
2450
2439
2451
function scanJsxAttributeValue ( ) : SyntaxKind {
2440
- startPos = pos ;
2452
+ fullStartPos = pos ;
2441
2453
2442
2454
switch ( text . charCodeAt ( pos ) ) {
2443
2455
case CharacterCodes . doubleQuote :
@@ -2451,12 +2463,12 @@ export function createScanner(languageVersion: ScriptTarget,
2451
2463
}
2452
2464
2453
2465
function reScanJsxAttributeValue ( ) : SyntaxKind {
2454
- pos = tokenPos = startPos ;
2466
+ pos = tokenStart = fullStartPos ;
2455
2467
return scanJsxAttributeValue ( ) ;
2456
2468
}
2457
2469
2458
2470
function scanJsDocToken ( ) : JSDocSyntaxKind {
2459
- startPos = tokenPos = pos ;
2471
+ fullStartPos = tokenStart = pos ;
2460
2472
tokenFlags = TokenFlags . None ;
2461
2473
if ( pos >= end ) {
2462
2474
return token = SyntaxKind . EndOfFileToken ;
@@ -2531,7 +2543,7 @@ export function createScanner(languageVersion: ScriptTarget,
2531
2543
if ( isIdentifierStart ( ch , languageVersion ) ) {
2532
2544
let char = ch ;
2533
2545
while ( pos < end && isIdentifierPart ( char = codePointAt ( text , pos ) , languageVersion ) || text . charCodeAt ( pos ) === CharacterCodes . minus ) pos += charSize ( char ) ;
2534
- tokenValue = text . substring ( tokenPos , pos ) ;
2546
+ tokenValue = text . substring ( tokenStart , pos ) ;
2535
2547
if ( char === CharacterCodes . backslash ) {
2536
2548
tokenValue += scanIdentifierParts ( ) ;
2537
2549
}
@@ -2544,8 +2556,8 @@ export function createScanner(languageVersion: ScriptTarget,
2544
2556
2545
2557
function speculationHelper < T > ( callback : ( ) => T , isLookahead : boolean ) : T {
2546
2558
const savePos = pos ;
2547
- const saveStartPos = startPos ;
2548
- const saveTokenPos = tokenPos ;
2559
+ const saveStartPos = fullStartPos ;
2560
+ const saveTokenPos = tokenStart ;
2549
2561
const saveToken = token ;
2550
2562
const saveTokenValue = tokenValue ;
2551
2563
const saveTokenFlags = tokenFlags ;
@@ -2555,8 +2567,8 @@ export function createScanner(languageVersion: ScriptTarget,
2555
2567
// then unconditionally restore us to where we were.
2556
2568
if ( ! result || isLookahead ) {
2557
2569
pos = savePos ;
2558
- startPos = saveStartPos ;
2559
- tokenPos = saveTokenPos ;
2570
+ fullStartPos = saveStartPos ;
2571
+ tokenStart = saveTokenPos ;
2560
2572
token = saveToken ;
2561
2573
tokenValue = saveTokenValue ;
2562
2574
tokenFlags = saveTokenFlags ;
@@ -2567,8 +2579,8 @@ export function createScanner(languageVersion: ScriptTarget,
2567
2579
function scanRange < T > ( start : number , length : number , callback : ( ) => T ) : T {
2568
2580
const saveEnd = end ;
2569
2581
const savePos = pos ;
2570
- const saveStartPos = startPos ;
2571
- const saveTokenPos = tokenPos ;
2582
+ const saveStartPos = fullStartPos ;
2583
+ const saveTokenPos = tokenStart ;
2572
2584
const saveToken = token ;
2573
2585
const saveTokenValue = tokenValue ;
2574
2586
const saveTokenFlags = tokenFlags ;
@@ -2579,8 +2591,8 @@ export function createScanner(languageVersion: ScriptTarget,
2579
2591
2580
2592
end = saveEnd ;
2581
2593
pos = savePos ;
2582
- startPos = saveStartPos ;
2583
- tokenPos = saveTokenPos ;
2594
+ fullStartPos = saveStartPos ;
2595
+ tokenStart = saveTokenPos ;
2584
2596
token = saveToken ;
2585
2597
tokenValue = saveTokenValue ;
2586
2598
tokenFlags = saveTokenFlags ;
@@ -2608,7 +2620,7 @@ export function createScanner(languageVersion: ScriptTarget,
2608
2620
function setText ( newText : string | undefined , start : number | undefined , length : number | undefined ) {
2609
2621
text = newText || "" ;
2610
2622
end = length === undefined ? text . length : start ! + length ;
2611
- setTextPos ( start || 0 ) ;
2623
+ resetTokenState ( start || 0 ) ;
2612
2624
}
2613
2625
2614
2626
function setOnError ( errorCallback : ErrorCallback | undefined ) {
@@ -2623,11 +2635,11 @@ export function createScanner(languageVersion: ScriptTarget,
2623
2635
languageVariant = variant ;
2624
2636
}
2625
2637
2626
- function setTextPos ( textPos : number ) {
2627
- Debug . assert ( textPos >= 0 ) ;
2628
- pos = textPos ;
2629
- startPos = textPos ;
2630
- tokenPos = textPos ;
2638
+ function resetTokenState ( position : number ) {
2639
+ Debug . assert ( position >= 0 ) ;
2640
+ pos = position ;
2641
+ fullStartPos = position ;
2642
+ tokenStart = position ;
2631
2643
token = SyntaxKind . Unknown ;
2632
2644
tokenValue = undefined ! ;
2633
2645
tokenFlags = TokenFlags . None ;
0 commit comments