From 4609d242cf94032e53c048db284ac81d3c5693df Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Fri, 14 Nov 2014 14:36:52 -0800 Subject: [PATCH] formatting: handle templates spans --- src/services/formatting/formattingScanner.ts | 16 ++++++++++++++-- tests/cases/fourslash/formattingTemplates.ts | 7 +++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/formattingTemplates.ts diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts index d774e34da4..9cf2a05a5d 100644 --- a/src/services/formatting/formattingScanner.ts +++ b/src/services/formatting/formattingScanner.ts @@ -1,3 +1,4 @@ +/// /// module ts.formatting { @@ -14,7 +15,8 @@ module ts.formatting { const enum ScanAction{ Scan, RescanGreaterThanToken, - RescanSlashToken + RescanSlashToken, + RescanTemplateToken } export function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner { @@ -111,6 +113,10 @@ module ts.formatting { return container.kind === SyntaxKind.RegularExpressionLiteral; } + function shouldRescanTemplateToken(container: Node): boolean { + return container.kind === SyntaxKind.TemplateSpan; + } + function startsWithSlashToken(t: SyntaxKind): boolean { return t === SyntaxKind.SlashToken || t === SyntaxKind.SlashEqualsToken; } @@ -132,7 +138,9 @@ module ts.formatting { ? ScanAction.RescanGreaterThanToken : shouldRescanSlashToken(n) ? ScanAction.RescanSlashToken - : ScanAction.Scan + : shouldRescanTemplateToken(n) + ? ScanAction.RescanTemplateToken + : ScanAction.Scan if (lastTokenInfo && expectedScanAction === lastScanAction) { // readTokenInfo was called before with the same expected scan action. @@ -159,6 +167,10 @@ module ts.formatting { Debug.assert(n.kind === currentToken); lastScanAction = ScanAction.RescanSlashToken; } + else if (expectedScanAction === ScanAction.RescanTemplateToken && currentToken === SyntaxKind.CloseBraceToken) { + currentToken = scanner.reScanTemplateToken(); + lastScanAction = ScanAction.RescanTemplateToken; + } else { lastScanAction = ScanAction.Scan; } diff --git a/tests/cases/fourslash/formattingTemplates.ts b/tests/cases/fourslash/formattingTemplates.ts new file mode 100644 index 0000000000..13bec47377 --- /dev/null +++ b/tests/cases/fourslash/formattingTemplates.ts @@ -0,0 +1,7 @@ +/// + +////String.call `${123}`/*1*/ + +goTo.marker("1"); +edit.insert(";"); +verify.currentLineContentIs("String.call `${123}`;"); \ No newline at end of file