@@ -13,29 +13,30 @@ type TextRangeWithKind struct {
1313 Kind ast.Kind
1414}
1515
16- func NewTextRangeWithKind (pos int , end int , kind ast.Kind ) * TextRangeWithKind {
17- return & TextRangeWithKind {
16+ func NewTextRangeWithKind (pos int , end int , kind ast.Kind ) TextRangeWithKind {
17+ return TextRangeWithKind {
1818 Loc : core .NewTextRange (pos , end ),
1919 Kind : kind ,
2020 }
2121}
2222
2323type tokenInfo struct {
24- leadingTrivia []* TextRangeWithKind
25- token * TextRangeWithKind
26- trailingTrivia []* TextRangeWithKind
24+ leadingTrivia []TextRangeWithKind
25+ token TextRangeWithKind
26+ trailingTrivia []TextRangeWithKind
2727}
2828
2929type formattingScanner struct {
30- s * scanner.Scanner
31- startPos int
32- endPos int
33- savedPos int
34- lastTokenInfo * tokenInfo
35- lastScanAction scanAction
36- leadingTrivia []* TextRangeWithKind
37- trailingTrivia []* TextRangeWithKind
38- wasNewLine bool
30+ s * scanner.Scanner
31+ startPos int
32+ endPos int
33+ savedPos int
34+ hasLastTokenInfo bool
35+ lastTokenInfo tokenInfo
36+ lastScanAction scanAction
37+ leadingTrivia []TextRangeWithKind
38+ trailingTrivia []TextRangeWithKind
39+ wasNewLine bool
3940}
4041
4142func newFormattingScanner (text string , languageVariant core.LanguageVariant , startPos int , endPos int , worker * formatSpanWorker ) []core.TextChange {
@@ -54,14 +55,14 @@ func newFormattingScanner(text string, languageVariant core.LanguageVariant, sta
5455
5556 res := worker .execute (fmtScn )
5657
57- fmtScn .lastTokenInfo = nil
58+ fmtScn .hasLastTokenInfo = false
5859 scan .Reset ()
5960
6061 return res
6162}
6263
6364func (s * formattingScanner ) advance () {
64- s .lastTokenInfo = nil
65+ s .hasLastTokenInfo = false
6566 isStarted := s .s .TokenFullStart () != s .startPos
6667
6768 if isStarted {
@@ -124,7 +125,7 @@ func (s *formattingScanner) shouldRescanJsxText(node *ast.Node) bool {
124125 if ast .IsJsxText (node ) {
125126 return true
126127 }
127- if ! ast .IsJsxElement (node ) || s .lastTokenInfo == nil {
128+ if ! ast .IsJsxElement (node ) || s .hasLastTokenInfo == false {
128129 return false
129130 }
130131
@@ -160,14 +161,14 @@ const (
160161 actionRescanJsxAttributeValue
161162)
162163
163- func fixTokenKind (tokenInfo * tokenInfo , container * ast.Node ) * tokenInfo {
164+ func fixTokenKind (tokenInfo tokenInfo , container * ast.Node ) tokenInfo {
164165 if ast .IsTokenKind (container .Kind ) && tokenInfo .token .Kind != container .Kind {
165166 tokenInfo .token .Kind = container .Kind
166167 }
167168 return tokenInfo
168169}
169170
170- func (s * formattingScanner ) readTokenInfo (n * ast.Node ) * tokenInfo {
171+ func (s * formattingScanner ) readTokenInfo (n * ast.Node ) tokenInfo {
171172 // Debug.assert(isOnToken()); // !!!
172173
173174 // normally scanner returns the smallest available token
@@ -190,14 +191,15 @@ func (s *formattingScanner) readTokenInfo(n *ast.Node) *tokenInfo {
190191 expectedScanAction = actionScan
191192 }
192193
193- if s .lastTokenInfo != nil && expectedScanAction == s .lastScanAction {
194+ if s .hasLastTokenInfo && expectedScanAction == s .lastScanAction {
194195 // readTokenInfo was called before with the same expected scan action.
195196 // No need to re-scan text, return existing 'lastTokenInfo'
196197 // it is ok to call fixTokenKind here since it does not affect
197198 // what portion of text is consumed. In contrast rescanning can change it,
198199 // i.e. for '>=' when originally scanner eats just one character
199200 // and rescanning forces it to consume more.
200- return fixTokenKind (s .lastTokenInfo , n )
201+ s .lastTokenInfo = fixTokenKind (s .lastTokenInfo , n )
202+ return s .lastTokenInfo
201203 }
202204
203205 if s .s .TokenFullStart () != s .savedPos {
@@ -237,13 +239,15 @@ func (s *formattingScanner) readTokenInfo(n *ast.Node) *tokenInfo {
237239 }
238240 }
239241
240- s .lastTokenInfo = & tokenInfo {
242+ s .hasLastTokenInfo = true
243+ s .lastTokenInfo = tokenInfo {
241244 leadingTrivia : slices .Clone (s .leadingTrivia ),
242245 token : token ,
243246 trailingTrivia : slices .Clone (s .trailingTrivia ),
244247 }
248+ s .lastTokenInfo = fixTokenKind (s .lastTokenInfo , n )
245249
246- return fixTokenKind ( s .lastTokenInfo , n )
250+ return s .lastTokenInfo
247251}
248252
249253func (s * formattingScanner ) getNextToken (n * ast.Node , expectedScanAction scanAction ) ast.Kind {
@@ -287,7 +291,7 @@ func (s *formattingScanner) getNextToken(n *ast.Node, expectedScanAction scanAct
287291 return token
288292}
289293
290- func (s * formattingScanner ) readEOFTokenRange () * TextRangeWithKind {
294+ func (s * formattingScanner ) readEOFTokenRange () TextRangeWithKind {
291295 // Debug.assert(isOnEOF()); // !!!
292296 return NewTextRangeWithKind (
293297 s .s .TokenFullStart (),
@@ -298,15 +302,15 @@ func (s *formattingScanner) readEOFTokenRange() *TextRangeWithKind {
298302
299303func (s * formattingScanner ) isOnToken () bool {
300304 current := s .s .Token ()
301- if s .lastTokenInfo != nil {
305+ if s .hasLastTokenInfo {
302306 current = s .lastTokenInfo .token .Kind
303307 }
304308 return current != ast .KindEndOfFile && ! ast .IsTrivia (current )
305309}
306310
307311func (s * formattingScanner ) isOnEOF () bool {
308312 current := s .s .Token ()
309- if s .lastTokenInfo != nil {
313+ if s .hasLastTokenInfo {
310314 current = s .lastTokenInfo .token .Kind
311315 }
312316 return current == ast .KindEndOfFile
@@ -316,7 +320,7 @@ func (s *formattingScanner) skipToEndOf(r *core.TextRange) {
316320 s .s .ResetTokenState (r .End ())
317321 s .savedPos = s .s .TokenFullStart ()
318322 s .lastScanAction = actionScan
319- s .lastTokenInfo = nil
323+ s .hasLastTokenInfo = false
320324 s .wasNewLine = false
321325 s .leadingTrivia = nil
322326 s .trailingTrivia = nil
@@ -326,13 +330,13 @@ func (s *formattingScanner) skipToStartOf(r *core.TextRange) {
326330 s .s .ResetTokenState (r .Pos ())
327331 s .savedPos = s .s .TokenFullStart ()
328332 s .lastScanAction = actionScan
329- s .lastTokenInfo = nil
333+ s .hasLastTokenInfo = false
330334 s .wasNewLine = false
331335 s .leadingTrivia = nil
332336 s .trailingTrivia = nil
333337}
334338
335- func (s * formattingScanner ) getCurrentLeadingTrivia () []* TextRangeWithKind {
339+ func (s * formattingScanner ) getCurrentLeadingTrivia () []TextRangeWithKind {
336340 return s .leadingTrivia
337341}
338342
@@ -341,7 +345,7 @@ func (s *formattingScanner) lastTrailingTriviaWasNewLine() bool {
341345}
342346
343347func (s * formattingScanner ) getTokenFullStart () int {
344- if s .lastTokenInfo != nil {
348+ if s .hasLastTokenInfo {
345349 return s .lastTokenInfo .token .Loc .Pos ()
346350 }
347351 return s .s .TokenFullStart ()
0 commit comments