Skip to content

Commit a4b5870

Browse files
author
Andy
authored
Cleanups in formattingScanner.ts (#18599)
* Cleanups in formattingScanner.ts * Move switch statement to function * Fix assertions
1 parent f7d8081 commit a4b5870

File tree

1 file changed

+55
-66
lines changed

1 file changed

+55
-66
lines changed

src/services/formatting/formattingScanner.ts

Lines changed: 55 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -53,28 +53,19 @@ namespace ts.formatting {
5353
return res;
5454

5555
function advance(): void {
56-
Debug.assert(scanner !== undefined, "Scanner should be present");
57-
5856
lastTokenInfo = undefined;
5957
const isStarted = scanner.getStartPos() !== startPos;
6058

6159
if (isStarted) {
62-
if (trailingTrivia) {
63-
Debug.assert(trailingTrivia.length !== 0);
64-
wasNewLine = lastOrUndefined(trailingTrivia).kind === SyntaxKind.NewLineTrivia;
65-
}
66-
else {
67-
wasNewLine = false;
68-
}
60+
wasNewLine = trailingTrivia && lastOrUndefined(trailingTrivia)!.kind === SyntaxKind.NewLineTrivia;
61+
}
62+
else {
63+
scanner.scan();
6964
}
7065

7166
leadingTrivia = undefined;
7267
trailingTrivia = undefined;
7368

74-
if (!isStarted) {
75-
scanner.scan();
76-
}
77-
7869
let pos = scanner.getStartPos();
7970

8071
// Read leading trivia and token
@@ -94,25 +85,20 @@ namespace ts.formatting {
9485

9586
pos = scanner.getStartPos();
9687

97-
if (!leadingTrivia) {
98-
leadingTrivia = [];
99-
}
100-
leadingTrivia.push(item);
88+
leadingTrivia = append(leadingTrivia, item);
10189
}
10290

10391
savedPos = scanner.getStartPos();
10492
}
10593

10694
function shouldRescanGreaterThanToken(node: Node): boolean {
107-
if (node) {
108-
switch (node.kind) {
109-
case SyntaxKind.GreaterThanEqualsToken:
110-
case SyntaxKind.GreaterThanGreaterThanEqualsToken:
111-
case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:
112-
case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
113-
case SyntaxKind.GreaterThanGreaterThanToken:
114-
return true;
115-
}
95+
switch (node.kind) {
96+
case SyntaxKind.GreaterThanEqualsToken:
97+
case SyntaxKind.GreaterThanGreaterThanEqualsToken:
98+
case SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken:
99+
case SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
100+
case SyntaxKind.GreaterThanGreaterThanToken:
101+
return true;
116102
}
117103

118104
return false;
@@ -134,7 +120,7 @@ namespace ts.formatting {
134120
}
135121

136122
function shouldRescanJsxText(node: Node): boolean {
137-
return node && node.kind === SyntaxKind.JsxText;
123+
return node.kind === SyntaxKind.JsxText;
138124
}
139125

140126
function shouldRescanSlashToken(container: Node): boolean {
@@ -151,16 +137,7 @@ namespace ts.formatting {
151137
}
152138

153139
function readTokenInfo(n: Node): TokenInfo {
154-
Debug.assert(scanner !== undefined);
155-
156-
if (!isOnToken()) {
157-
// scanner is not on the token (either advance was not called yet or scanner is already past the end position)
158-
return {
159-
leadingTrivia,
160-
trailingTrivia: undefined,
161-
token: undefined
162-
};
163-
}
140+
Debug.assert(isOnToken());
164141

165142
// normally scanner returns the smallest available token
166143
// check the kind of context node to determine if scanner should have more greedy behavior and consume more text.
@@ -194,33 +171,7 @@ namespace ts.formatting {
194171
scanner.scan();
195172
}
196173

197-
let currentToken = scanner.getToken();
198-
199-
if (expectedScanAction === ScanAction.RescanGreaterThanToken && currentToken === SyntaxKind.GreaterThanToken) {
200-
currentToken = scanner.reScanGreaterToken();
201-
Debug.assert(n.kind === currentToken);
202-
lastScanAction = ScanAction.RescanGreaterThanToken;
203-
}
204-
else if (expectedScanAction === ScanAction.RescanSlashToken && startsWithSlashToken(currentToken)) {
205-
currentToken = scanner.reScanSlashToken();
206-
Debug.assert(n.kind === currentToken);
207-
lastScanAction = ScanAction.RescanSlashToken;
208-
}
209-
else if (expectedScanAction === ScanAction.RescanTemplateToken && currentToken === SyntaxKind.CloseBraceToken) {
210-
currentToken = scanner.reScanTemplateToken();
211-
lastScanAction = ScanAction.RescanTemplateToken;
212-
}
213-
else if (expectedScanAction === ScanAction.RescanJsxIdentifier) {
214-
currentToken = scanner.scanJsxIdentifier();
215-
lastScanAction = ScanAction.RescanJsxIdentifier;
216-
}
217-
else if (expectedScanAction === ScanAction.RescanJsxText) {
218-
currentToken = scanner.reScanJsxToken();
219-
lastScanAction = ScanAction.RescanJsxText;
220-
}
221-
else {
222-
lastScanAction = ScanAction.Scan;
223-
}
174+
let currentToken = getNextToken(n, expectedScanAction);
224175

225176
const token: TextRangeWithKind = {
226177
pos: scanner.getStartPos(),
@@ -261,9 +212,47 @@ namespace ts.formatting {
261212
return fixTokenKind(lastTokenInfo, n);
262213
}
263214

264-
function isOnToken(): boolean {
265-
Debug.assert(scanner !== undefined);
215+
function getNextToken(n: Node, expectedScanAction: ScanAction): SyntaxKind {
216+
const token = scanner.getToken();
217+
lastScanAction = ScanAction.Scan;
218+
switch (expectedScanAction) {
219+
case ScanAction.RescanGreaterThanToken:
220+
if (token === SyntaxKind.GreaterThanToken) {
221+
lastScanAction = ScanAction.RescanGreaterThanToken;
222+
const newToken = scanner.reScanGreaterToken();
223+
Debug.assert(n.kind === newToken);
224+
return newToken;
225+
}
226+
break;
227+
case ScanAction.RescanSlashToken:
228+
if (startsWithSlashToken(token)) {
229+
lastScanAction = ScanAction.RescanSlashToken;
230+
const newToken = scanner.reScanSlashToken();
231+
Debug.assert(n.kind === newToken);
232+
return newToken;
233+
}
234+
break;
235+
case ScanAction.RescanTemplateToken:
236+
if (token === SyntaxKind.CloseBraceToken) {
237+
lastScanAction = ScanAction.RescanTemplateToken;
238+
return scanner.reScanTemplateToken();
239+
}
240+
break;
241+
case ScanAction.RescanJsxIdentifier:
242+
lastScanAction = ScanAction.RescanJsxIdentifier;
243+
return scanner.scanJsxIdentifier();
244+
case ScanAction.RescanJsxText:
245+
lastScanAction = ScanAction.RescanJsxText;
246+
return scanner.reScanJsxToken();
247+
case ScanAction.Scan:
248+
break;
249+
default:
250+
Debug.assertNever(expectedScanAction);
251+
}
252+
return token;
253+
}
266254

255+
function isOnToken(): boolean {
267256
const current = lastTokenInfo ? lastTokenInfo.token.kind : scanner.getToken();
268257
const startPos = lastTokenInfo ? lastTokenInfo.token.pos : scanner.getStartPos();
269258
return startPos < endPos && current !== SyntaxKind.EndOfFileToken && !isTrivia(current);

0 commit comments

Comments
 (0)