From 4cfb7a5105d738cf4dde6af45fd6e15dbe03e674 Mon Sep 17 00:00:00 2001
From: Priyantha Lankapura <403912+lankaapura@users.noreply.github.com>
Date: Wed, 7 Feb 2018 22:53:31 +0530
Subject: [PATCH] Fix space issue in mapped type formatting (#21712)
* Add the test for mapped type formatting issue
* Fix inconsistent number of spaces within braces when formatting mapped types
---
src/services/formatting/rules.ts | 4 ++-
.../fourslash/formattingMultipleMappedType.ts | 36 +++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
create mode 100644 tests/cases/fourslash/formattingMultipleMappedType.ts
diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts
index f6a9dee4cfe..d8c94e8c772 100644
--- a/src/services/formatting/rules.ts
+++ b/src/services/formatting/rules.ts
@@ -469,7 +469,9 @@ namespace ts.formatting {
}
function isBraceWrappedContext(context: FormattingContext): boolean {
- return context.contextNode.kind === SyntaxKind.ObjectBindingPattern || isSingleLineBlockContext(context);
+ return context.contextNode.kind === SyntaxKind.ObjectBindingPattern ||
+ context.contextNode.kind === SyntaxKind.MappedType ||
+ isSingleLineBlockContext(context);
}
// This check is done before an open brace in a control construct, a function, or a typescript block declaration
diff --git a/tests/cases/fourslash/formattingMultipleMappedType.ts b/tests/cases/fourslash/formattingMultipleMappedType.ts
new file mode 100644
index 00000000000..1ebfd3144d7
--- /dev/null
+++ b/tests/cases/fourslash/formattingMultipleMappedType.ts
@@ -0,0 +1,36 @@
+///
+
+/////*x1*/type x1 = {[K in keyof T]: number}
+/////*x2*/type x2 = { [K in keyof T]: number }
+/////*x3*/type x3 = { [K in keyof T]: number}
+/////*x4*/type x4 = {[K in keyof T]: number }
+/////*x5*/type x5 = { [K in keyof T]: number}
+/////*x6*/type x6 = {[K in keyof T]: number }
+/////*x7*/type x7 = { [K in keyof T]: number }
+/////*x8*/type x8 = { [K in keyof T]: number };
+////
+/////*y1*/type y1 = {foo: number}
+/////*y2*/type y2 = { foo: number }
+/////*y3*/type y3 = { foo: number}
+/////*y4*/type y4 = {foo: number }
+/////*y5*/type y5 = { foo: number}
+/////*y6*/type y6 = {foo: number }
+/////*y7*/type y7 = { foo: number }
+/////*y8*/type y8 = { foo: number };
+
+format.document();
+for (let index = 1; index < 8; index++) {
+ goTo.marker(`x${index}`);
+ verify.currentLineContentIs(`type x${index} = { [K in keyof T]: number }`);
+}
+
+goTo.marker(`x8`);
+verify.currentLineContentIs(`type x8 = { [K in keyof T]: number };`);
+
+for (let index = 1; index < 8; index++) {
+ goTo.marker(`y${index}`);
+ verify.currentLineContentIs(`type y${index} = { foo: number }`);
+}
+
+goTo.marker(`y8`);
+verify.currentLineContentIs(`type y8 = { foo: number };`);
\ No newline at end of file