diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts
index d774e34da41..9cf2a05a5d9 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 00000000000..13bec473773
--- /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