3
3
4
4
/* @internal */
5
5
namespace ts . formatting {
6
- let scanner = createScanner ( ScriptTarget . Latest , /*skipTrivia*/ false ) ;
7
-
6
+ const standardScanner = createScanner ( ScriptTarget . Latest , /*skipTrivia*/ false , LanguageVariant . Standard ) ;
7
+ const jsxScanner = createScanner ( ScriptTarget . Latest , /*skipTrivia*/ false , LanguageVariant . JSX ) ;
8
+
9
+ /**
10
+ * Scanner that is currently used for formatting
11
+ */
12
+ let scanner : Scanner ;
13
+
8
14
export interface FormattingScanner {
9
15
advance ( ) : void ;
10
16
isOnToken ( ) : boolean ;
@@ -22,6 +28,8 @@ namespace ts.formatting {
22
28
}
23
29
24
30
export function getFormattingScanner ( sourceFile : SourceFile , startPos : number , endPos : number ) : FormattingScanner {
31
+ Debug . assert ( scanner === undefined ) ;
32
+ scanner = sourceFile . languageVariant === LanguageVariant . JSX ? jsxScanner : standardScanner ;
25
33
26
34
scanner . setText ( sourceFile . text ) ;
27
35
scanner . setTextPos ( startPos ) ;
@@ -40,12 +48,17 @@ namespace ts.formatting {
40
48
isOnToken : isOnToken ,
41
49
lastTrailingTriviaWasNewLine : ( ) => wasNewLine ,
42
50
close : ( ) => {
51
+ Debug . assert ( scanner !== undefined ) ;
52
+
43
53
lastTokenInfo = undefined ;
44
54
scanner . setText ( undefined ) ;
55
+ scanner = undefined ;
45
56
}
46
57
}
47
58
48
59
function advance ( ) : void {
60
+ Debug . assert ( scanner !== undefined ) ;
61
+
49
62
lastTokenInfo = undefined ;
50
63
let isStarted = scanner . getStartPos ( ) !== startPos ;
51
64
@@ -138,6 +151,8 @@ namespace ts.formatting {
138
151
}
139
152
140
153
function readTokenInfo ( n : Node ) : TokenInfo {
154
+ Debug . assert ( scanner !== undefined ) ;
155
+
141
156
if ( ! isOnToken ( ) ) {
142
157
// scanner is not on the token (either advance was not called yet or scanner is already past the end position)
143
158
return {
@@ -245,6 +260,8 @@ namespace ts.formatting {
245
260
}
246
261
247
262
function isOnToken ( ) : boolean {
263
+ Debug . assert ( scanner !== undefined ) ;
264
+
248
265
let current = ( lastTokenInfo && lastTokenInfo . token . kind ) || scanner . getToken ( ) ;
249
266
let startPos = ( lastTokenInfo && lastTokenInfo . token . pos ) || scanner . getStartPos ( ) ;
250
267
return startPos < endPos && current !== SyntaxKind . EndOfFileToken && ! isTrivia ( current ) ;
0 commit comments