diff --git a/src/harness/unittests/extractMethods.ts b/src/harness/unittests/extractMethods.ts index a7741a56f59..c8b4b35ff1c 100644 --- a/src/harness/unittests/extractMethods.ts +++ b/src/harness/unittests/extractMethods.ts @@ -606,6 +606,14 @@ namespace A { `function F(v: V) { [#|v.toString()|]; }`); + + testExtractMethod("extractMethod20", + `const _ = class { + a() { + [#|let a1 = { x: 1 }; + return a1.x + 10;|] + } +}`); }); diff --git a/src/services/refactors/extractMethod.ts b/src/services/refactors/extractMethod.ts index 66ab0126aaa..1a96857b73e 100644 --- a/src/services/refactors/extractMethod.ts +++ b/src/services/refactors/extractMethod.ts @@ -584,7 +584,7 @@ namespace ts.refactor.extractMethod { else if (isClassLike(scope)) { return scope.kind === SyntaxKind.ClassDeclaration ? `class '${scope.name.text}'` - : scope.name.text + : scope.name && scope.name.text ? `class expression '${scope.name.text}'` : "anonymous class expression"; } diff --git a/tests/baselines/reference/extractMethod/extractMethod20.ts b/tests/baselines/reference/extractMethod/extractMethod20.ts new file mode 100644 index 00000000000..7c35caee30f --- /dev/null +++ b/tests/baselines/reference/extractMethod/extractMethod20.ts @@ -0,0 +1,28 @@ +// ==ORIGINAL== +const _ = class { + a() { + let a1 = { x: 1 }; + return a1.x + 10; + } +} +// ==SCOPE::anonymous class expression== +const _ = class { + a() { + return this.newFunction(); + } + + private newFunction() { + let a1 = { x: 1 }; + return a1.x + 10; + } +} +// ==SCOPE::global scope== +const _ = class { + a() { + return newFunction(); + } +} +function newFunction() { + let a1 = { x: 1 }; + return a1.x + 10; +}