diff --git a/tests/cases/fourslash/smartIndentAfterNewExpression.ts b/tests/cases/fourslash/smartIndentAfterNewExpression.ts
new file mode 100644
index 00000000000..f2d699f988b
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentAfterNewExpression.ts
@@ -0,0 +1,17 @@
+///
+
+////
+////new Array
+////{| "indent": 0 |}
+////new Array;
+////{| "indent": 0 |}
+////new Array(0);
+////{| "indent": 0 |}
+////new Array(;
+////{| "indent": 0 |}
+////new Array(
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentInParenthesizedExpression01.ts b/tests/cases/fourslash/smartIndentInParenthesizedExpression01.ts
new file mode 100644
index 00000000000..253f58071d9
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentInParenthesizedExpression01.ts
@@ -0,0 +1,13 @@
+///
+
+////var x = (/*1*/1/*2*/)/*3*/
+
+function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
+ goTo.marker(marker);
+ edit.insert("\r\n");
+ verify.indentationIs(indentation);
+}
+
+verifyIndentationAfterNewLine("1", 4);
+verifyIndentationAfterNewLine("2", 4);
+verifyIndentationAfterNewLine("3", 0);
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentInParenthesizedExpression02.ts b/tests/cases/fourslash/smartIndentInParenthesizedExpression02.ts
new file mode 100644
index 00000000000..ac169d0b17e
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentInParenthesizedExpression02.ts
@@ -0,0 +1,8 @@
+///
+
+////var y = (
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnAccessors.ts b/tests/cases/fourslash/smartIndentOnAccessors.ts
new file mode 100644
index 00000000000..a7972b1f48b
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnAccessors.ts
@@ -0,0 +1,36 @@
+///
+
+////class Foo {
+//// get foo(a,
+//// /*1*/b,/*0*/
+//// //comment/*2*/
+//// /*3*/c
+//// ) {
+//// }
+//// set foo(a,
+//// /*5*/b,/*4*/
+//// //comment/*6*/
+//// /*7*/c
+//// ) {
+//// }
+////}
+
+
+goTo.marker("0");
+edit.insert("\r\n");
+verify.indentationIs(8);
+goTo.marker("1");
+verify.currentLineContentIs(" b,");
+goTo.marker("2");
+verify.currentLineContentIs(" //comment");
+goTo.marker("3");
+verify.currentLineContentIs(" c");
+goTo.marker("4");
+edit.insert("\r\n");
+verify.indentationIs(8);
+goTo.marker("5");
+verify.currentLineContentIs(" b,");
+goTo.marker("6");
+verify.currentLineContentIs(" //comment");
+goTo.marker("7");
+verify.currentLineContentIs(" c");
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnAccessors01.ts b/tests/cases/fourslash/smartIndentOnAccessors01.ts
new file mode 100644
index 00000000000..a7972b1f48b
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnAccessors01.ts
@@ -0,0 +1,36 @@
+///
+
+////class Foo {
+//// get foo(a,
+//// /*1*/b,/*0*/
+//// //comment/*2*/
+//// /*3*/c
+//// ) {
+//// }
+//// set foo(a,
+//// /*5*/b,/*4*/
+//// //comment/*6*/
+//// /*7*/c
+//// ) {
+//// }
+////}
+
+
+goTo.marker("0");
+edit.insert("\r\n");
+verify.indentationIs(8);
+goTo.marker("1");
+verify.currentLineContentIs(" b,");
+goTo.marker("2");
+verify.currentLineContentIs(" //comment");
+goTo.marker("3");
+verify.currentLineContentIs(" c");
+goTo.marker("4");
+edit.insert("\r\n");
+verify.indentationIs(8);
+goTo.marker("5");
+verify.currentLineContentIs(" b,");
+goTo.marker("6");
+verify.currentLineContentIs(" //comment");
+goTo.marker("7");
+verify.currentLineContentIs(" c");
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnAccessors02.ts b/tests/cases/fourslash/smartIndentOnAccessors02.ts
new file mode 100644
index 00000000000..08f0083f2f2
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnAccessors02.ts
@@ -0,0 +1,9 @@
+///
+
+////class Foo {
+//// get foo() {
+////{| "indent": 8 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedArrowType01.ts b/tests/cases/fourslash/smartIndentOnUnclosedArrowType01.ts
new file mode 100644
index 00000000000..44a47d984ab
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedArrowType01.ts
@@ -0,0 +1,8 @@
+///
+
+////var x: () => {
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedComputedProperty01.ts b/tests/cases/fourslash/smartIndentOnUnclosedComputedProperty01.ts
new file mode 100644
index 00000000000..0b57a2cb466
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedComputedProperty01.ts
@@ -0,0 +1,11 @@
+///
+
+////var x = {
+//// [1123123123132
+////{| "indent": 4 |}
+////}
+
+// Note that we currently do NOT indent further in a computed property.
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedConstructorType01.ts b/tests/cases/fourslash/smartIndentOnUnclosedConstructorType01.ts
new file mode 100644
index 00000000000..ae76cbf06c9
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedConstructorType01.ts
@@ -0,0 +1,8 @@
+///
+
+////var x: new () => {
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration01.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration01.ts
new file mode 100644
index 00000000000..3e08fe5975e
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration01.ts
@@ -0,0 +1,13 @@
+///
+
+////function /*1*/f/*2*/
+
+
+function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
+ goTo.marker(marker);
+ edit.insert("\r\n");
+ verify.indentationIs(indentation);
+}
+
+verifyIndentationAfterNewLine("1", 4);
+verifyIndentationAfterNewLine("2", 4);
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration02.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration02.ts
new file mode 100644
index 00000000000..3de8b5ec6c3
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration02.ts
@@ -0,0 +1,14 @@
+///
+
+////function f*1*/A/*2*/,B/*3*/
+
+
+function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
+ goTo.marker(marker);
+ edit.insert("\r\n");
+ verify.indentationIs(indentation);
+}
+
+verifyIndentationAfterNewLine("1", 4);
+verifyIndentationAfterNewLine("2", 4);
+verifyIndentationAfterNewLine("3", 4);
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration03.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration03.ts
new file mode 100644
index 00000000000..9a6c378f6ce
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration03.ts
@@ -0,0 +1,12 @@
+///
+
+////function f/*1*/
+
+
+function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
+ goTo.marker(marker);
+ edit.insert("\r\n");
+ verify.indentationIs(indentation);
+}
+
+verifyIndentationAfterNewLine("1", 4);
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration04.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration04.ts
new file mode 100644
index 00000000000..3931433e51f
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration04.ts
@@ -0,0 +1,17 @@
+///
+
+////function f/*1*/(/*2*/a: A, /*3*/b:/*4*/B, c/*5*/, d: C/*6*/
+
+
+function verifyIndentationAfterNewLine(marker: string, indentation: number): void {
+ goTo.marker(marker);
+ edit.insert("\r\n");
+ verify.indentationIs(indentation);
+}
+
+verifyIndentationAfterNewLine("1", 4);
+verifyIndentationAfterNewLine("2", 4);
+verifyIndentationAfterNewLine("3", 4);
+verifyIndentationAfterNewLine("4", 4);
+verifyIndentationAfterNewLine("5", 4);
+verifyIndentationAfterNewLine("6", 4);
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration05.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration05.ts
new file mode 100644
index 00000000000..24c2bca72f7
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration05.ts
@@ -0,0 +1,9 @@
+///
+
+////function f(a: A, b:B, c, d: C): {
+////{| "indent": 4 |}
+////
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration06.ts b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration06.ts
new file mode 100644
index 00000000000..782a85c908a
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedFunctionDeclaration06.ts
@@ -0,0 +1,10 @@
+///
+
+////function f(a: A, b:B, c, d: C): {
+////{| "indent": 4 |}
+////} {
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedIndexSignature01.ts b/tests/cases/fourslash/smartIndentOnUnclosedIndexSignature01.ts
new file mode 100644
index 00000000000..da88bc9d0c1
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedIndexSignature01.ts
@@ -0,0 +1,11 @@
+///
+
+////class C {
+////[x: string
+////{| "indent": 4 |}
+////
+
+// Note that we currently do NOT indent further in an index signature.
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedObjectTypeLiteral01.ts b/tests/cases/fourslash/smartIndentOnUnclosedObjectTypeLiteral01.ts
new file mode 100644
index 00000000000..f2f900ce5d8
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedObjectTypeLiteral01.ts
@@ -0,0 +1,8 @@
+///
+
+////var x: {
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/smartIndentOnUnclosedTupleTypeLiteral01.ts b/tests/cases/fourslash/smartIndentOnUnclosedTupleTypeLiteral01.ts
new file mode 100644
index 00000000000..f2346e6bddc
--- /dev/null
+++ b/tests/cases/fourslash/smartIndentOnUnclosedTupleTypeLiteral01.ts
@@ -0,0 +1,8 @@
+///
+
+////var x: [string, number,
+////{| "indent": 4 |}
+
+test.markers().forEach(marker => {
+ verify.indentationAtPositionIs(marker.fileName, marker.position, marker.data.indent);
+});
\ No newline at end of file