diff --git a/src/services/refactors/extractSymbol.ts b/src/services/refactors/extractSymbol.ts index 5f42cbd270a..f797399bc8b 100644 --- a/src/services/refactors/extractSymbol.ts +++ b/src/services/refactors/extractSymbol.ts @@ -437,6 +437,7 @@ namespace ts.refactor.extractSymbol { permittedJumps = PermittedJumps.Return; } break; + case SyntaxKind.DefaultClause: case SyntaxKind.CaseClause: // allow unlabeled break inside case clauses permittedJumps |= PermittedJumps.Break; diff --git a/tests/cases/fourslash/extract-method31.ts b/tests/cases/fourslash/extract-method31.ts new file mode 100644 index 00000000000..6d6e007677d --- /dev/null +++ b/tests/cases/fourslash/extract-method31.ts @@ -0,0 +1,38 @@ +/// + +//// /*start*/let value: string; +//// switch (Date.now()) { +//// case 1: +//// value = 'foo'; +//// break; +//// default: +//// value = 'bar'; +//// break; +//// }/*end*/ +//// +//// console.log(value); + +goTo.select("start", "end"); +edit.applyRefactor({ + refactorName: "Extract Symbol", + actionName: "function_scope_0", + actionDescription: "Extract to function in global scope", + newContent: +`let value: string = /*RENAME*/newFunction(); + +console.log(value); + +function newFunction() { + let value: string; + switch (Date.now()) { + case 1: + value = 'foo'; + break; + default: + value = 'bar'; + break; + } + return value; +} +` +});