33
44/* @internal */
55namespace 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+
814 export interface FormattingScanner {
915 advance ( ) : void ;
1016 isOnToken ( ) : boolean ;
@@ -22,6 +28,8 @@ namespace ts.formatting {
2228 }
2329
2430 export function getFormattingScanner ( sourceFile : SourceFile , startPos : number , endPos : number ) : FormattingScanner {
31+ Debug . assert ( scanner === undefined ) ;
32+ scanner = sourceFile . languageVariant === LanguageVariant . JSX ? jsxScanner : standardScanner ;
2533
2634 scanner . setText ( sourceFile . text ) ;
2735 scanner . setTextPos ( startPos ) ;
@@ -40,12 +48,17 @@ namespace ts.formatting {
4048 isOnToken : isOnToken ,
4149 lastTrailingTriviaWasNewLine : ( ) => wasNewLine ,
4250 close : ( ) => {
51+ Debug . assert ( scanner !== undefined ) ;
52+
4353 lastTokenInfo = undefined ;
4454 scanner . setText ( undefined ) ;
55+ scanner = undefined ;
4556 }
4657 }
4758
4859 function advance ( ) : void {
60+ Debug . assert ( scanner !== undefined ) ;
61+
4962 lastTokenInfo = undefined ;
5063 let isStarted = scanner . getStartPos ( ) !== startPos ;
5164
@@ -138,6 +151,8 @@ namespace ts.formatting {
138151 }
139152
140153 function readTokenInfo ( n : Node ) : TokenInfo {
154+ Debug . assert ( scanner !== undefined ) ;
155+
141156 if ( ! isOnToken ( ) ) {
142157 // scanner is not on the token (either advance was not called yet or scanner is already past the end position)
143158 return {
@@ -245,6 +260,8 @@ namespace ts.formatting {
245260 }
246261
247262 function isOnToken ( ) : boolean {
263+ Debug . assert ( scanner !== undefined ) ;
264+
248265 let current = ( lastTokenInfo && lastTokenInfo . token . kind ) || scanner . getToken ( ) ;
249266 let startPos = ( lastTokenInfo && lastTokenInfo . token . pos ) || scanner . getStartPos ( ) ;
250267 return startPos < endPos && current !== SyntaxKind . EndOfFileToken && ! isTrivia ( current ) ;
0 commit comments