From 364b63bd8242be2a1c05bd3e7227a586b1d85be0 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Thu, 6 Nov 2014 16:19:09 -0800 Subject: [PATCH] simplify formatting scanner --- src/services/format.ts | 2 +- src/services/format/formattingScanner.ts | 29 +++++++++++------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/services/format.ts b/src/services/format.ts index 6e53fa26541..525fc3b6041 100644 --- a/src/services/format.ts +++ b/src/services/format.ts @@ -185,7 +185,7 @@ module ts.formatting { var enclosingNode = findEnclosingNode(originalRange, sourceFile); var initialIndentation = SmartIndenter.getIndentationForNode(enclosingNode, originalRange, sourceFile, options); - var formattingScanner = getFormattingScanner(sourceFile, enclosingNode, originalRange); + var formattingScanner = getFormattingScanner(sourceFile, enclosingNode.pos, originalRange.end); var previousRangeHasError: boolean; var previousRange: TextRangeWithKind; diff --git a/src/services/format/formattingScanner.ts b/src/services/format/formattingScanner.ts index e7f6b019057..eb6d7a7964f 100644 --- a/src/services/format/formattingScanner.ts +++ b/src/services/format/formattingScanner.ts @@ -17,16 +17,16 @@ module ts.formatting { RescanSlashToken } - export function getFormattingScanner(sourceFile: SourceFile, enclosingNode: Node, range: TextRange): FormattingScanner { + export function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner { scanner.setText(sourceFile.text); - scanner.setTextPos(enclosingNode.pos); + scanner.setTextPos(startPos); var wasNewLine: boolean = true; var leadingTrivia: TextRangeWithKind[]; var trailingTrivia: TextRangeWithKind[]; - var savedStartPos: number; + var savedPos: number; var lastScanAction: ScanAction; var lastTokenInfo: TokenInfo; @@ -43,7 +43,7 @@ module ts.formatting { function advance(): void { lastTokenInfo = undefined; - var isStarted = scanner.getStartPos() !== enclosingNode.pos; + var isStarted = scanner.getStartPos() !== startPos; if (isStarted) { if (trailingTrivia) { @@ -63,9 +63,9 @@ module ts.formatting { } var t: SyntaxKind; - var startPos = scanner.getStartPos(); + var pos = scanner.getStartPos(); - while (startPos < range.end) { + while (pos < endPos) { var t = scanner.getToken(); if (!isTrivia(t)) { break; @@ -74,12 +74,12 @@ module ts.formatting { // consume leading trivia scanner.scan(); var item = { - pos: startPos, + pos: pos, end: scanner.getStartPos(), kind: t } - startPos = scanner.getStartPos(); + pos = scanner.getStartPos(); if (!leadingTrivia) { leadingTrivia = []; @@ -87,7 +87,7 @@ module ts.formatting { leadingTrivia.push(item); } - savedStartPos = scanner.getStartPos(); + savedPos = scanner.getStartPos(); } function shouldRescanGreaterThanToken(container: Node): boolean { @@ -135,13 +135,12 @@ module ts.formatting { return lastTokenInfo; } - if (scanner.getStartPos() !== savedStartPos) { - scanner.setTextPos(savedStartPos); + if (scanner.getStartPos() !== savedPos) { + scanner.setTextPos(savedPos); scanner.scan(); } var currentToken = scanner.getToken(); - var endPos: number; if (expectedScanAction === ScanAction.RescanGreaterThanToken && currentToken === SyntaxKind.GreaterThanToken) { currentToken = scanner.reScanGreaterToken(); @@ -157,15 +156,13 @@ module ts.formatting { lastScanAction = ScanAction.Scan; } - endPos = scanner.getTextPos(); - var token: TextRangeWithKind = { pos: scanner.getStartPos(), end: scanner.getTextPos(), kind: currentToken } - while(scanner.getStartPos() < range.end) { + while(scanner.getStartPos() < endPos) { currentToken = scanner.scan(); if (!isTrivia(currentToken)) { break; @@ -199,7 +196,7 @@ module ts.formatting { function isOnToken(): boolean { var current = (lastTokenInfo && lastTokenInfo.token.kind) || scanner.getToken(); var startPos = (lastTokenInfo && lastTokenInfo.token.pos) || scanner.getStartPos(); - return startPos < range.end && current !== SyntaxKind.EndOfFileToken && !isTrivia(current); + return startPos < endPos && current !== SyntaxKind.EndOfFileToken && !isTrivia(current); } } } \ No newline at end of file