diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts
index 8788e0c02f455..2c6eef3672f79 100644
--- a/src/compiler/emitter.ts
+++ b/src/compiler/emitter.ts
@@ -2417,6 +2417,12 @@ namespace ts {
const isEmpty = isUndefined || start >= children.length || count === 0;
if (isEmpty && format & ListFormat.OptionalIfEmpty) {
+ if (onBeforeEmitNodeArray) {
+ onBeforeEmitNodeArray(children);
+ }
+ if (onAfterEmitNodeArray) {
+ onAfterEmitNodeArray(children);
+ }
return;
}
diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts
index fb5e9e0354e72..64e25e0eb9a29 100644
--- a/src/harness/fourslash.ts
+++ b/src/harness/fourslash.ts
@@ -3500,7 +3500,7 @@ ${code}
expected = makeWhitespaceVisible(expected);
actual = makeWhitespaceVisible(actual);
}
- return `Expected:\n${expected}\nActual:${actual}`;
+ return `Expected:\n${expected}\nActual:\n${actual}`;
}
function differOnlyByWhitespace(a: string, b: string) {
diff --git a/src/services/formatting/rules.ts b/src/services/formatting/rules.ts
index 07c2804ee8356..d41d9dfbfd868 100644
--- a/src/services/formatting/rules.ts
+++ b/src/services/formatting/rules.ts
@@ -755,9 +755,8 @@ namespace ts.formatting {
return true;
case SyntaxKind.Block: {
const blockParent = context.currentTokenParent.parent;
- if (blockParent.kind !== SyntaxKind.ArrowFunction &&
- blockParent.kind !== SyntaxKind.FunctionExpression
- ) {
+ // In a codefix scenario, we can't rely on parents being set. So just always return true.
+ if (!blockParent || blockParent.kind !== SyntaxKind.ArrowFunction && blockParent.kind !== SyntaxKind.FunctionExpression) {
return true;
}
}
diff --git a/tests/cases/fourslash/convertFunctionToEs6Class3.ts b/tests/cases/fourslash/convertFunctionToEs6Class3.ts
index bb48ffadec25f..fec4dd8edfae2 100644
--- a/tests/cases/fourslash/convertFunctionToEs6Class3.ts
+++ b/tests/cases/fourslash/convertFunctionToEs6Class3.ts
@@ -2,14 +2,14 @@
// @allowNonTsExtensions: true
// @Filename: test123.js
-//// [|var bar = 10, /*1*/foo = function() { };
+//// var bar = 10, /*1*/foo = function() { };
//// /*2*/foo.prototype.instanceMethod1 = function() { return "this is name"; };
//// /*3*/foo.prototype.instanceMethod2 = () => { return "this is name"; };
//// /*4*/foo.prototype.instanceProp1 = "hello";
//// /*5*/foo.prototype.instanceProp2 = undefined;
//// /*6*/foo.staticProp = "world";
//// /*7*/foo.staticMethod1 = function() { return "this is static name"; };
-//// /*8*/foo.staticMethod2 = () => "this is static name";|]
+//// /*8*/foo.staticMethod2 = () => "this is static name";
['1', '2', '3', '4', '5', '6', '7', '8'].forEach(m => verify.applicableRefactorAvailableAtMarker(m));
diff --git a/tests/cases/fourslash/convertFunctionToEs6Class_emptySwitchCase.ts b/tests/cases/fourslash/convertFunctionToEs6Class_emptySwitchCase.ts
new file mode 100644
index 0000000000000..90bd48784ce8b
--- /dev/null
+++ b/tests/cases/fourslash/convertFunctionToEs6Class_emptySwitchCase.ts
@@ -0,0 +1,25 @@
+///
+
+// @allowNonTsExtensions: true
+// @Filename: /a.js
+////function /**/MyClass() {
+////}
+////MyClass.prototype.f = function(x) {
+//// switch (x) {
+//// case 0:
+//// }
+////}
+
+verify.applicableRefactorAvailableAtMarker("");
+verify.fileAfterApplyingRefactorAtMarker("",
+`class MyClass {
+ constructor() {
+ }
+ f(x) {
+ switch (x) {
+ case 0:
+ }
+ }
+}
+`,
+'Convert to ES2015 class', 'convert');
diff --git a/tests/cases/fourslash/convertFunctionToEs6Class_objectLiteralInArrowFunction.ts b/tests/cases/fourslash/convertFunctionToEs6Class_objectLiteralInArrowFunction.ts
new file mode 100644
index 0000000000000..0bbbf4e00246c
--- /dev/null
+++ b/tests/cases/fourslash/convertFunctionToEs6Class_objectLiteralInArrowFunction.ts
@@ -0,0 +1,21 @@
+///
+
+// @allowNonTsExtensions: true
+// @Filename: /a.js
+////function /**/MyClass() {
+////}
+////MyClass.prototype.foo = function() {
+//// ({ bar: () => { } })
+////}
+
+verify.applicableRefactorAvailableAtMarker("");
+verify.fileAfterApplyingRefactorAtMarker("",
+`class MyClass {
+ constructor() {
+ }
+ foo() {
+ ({ bar: () => { } });
+ }
+}
+`,
+'Convert to ES2015 class', 'convert');