From 2cc7a5d6bf3fc5c05dc8893138839e432640dfa2 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Tue, 28 Jan 2020 22:10:12 +0200 Subject: [PATCH] =?UTF-8?q?fix(33362):=20'extract=20to=20function'=20for?= =?UTF-8?q?=20variable=20that=20is=20assigne=E2=80=A6=20(#36455)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/refactors/extractSymbol.ts | 1 + tests/cases/fourslash/extract-method31.ts | 38 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 tests/cases/fourslash/extract-method31.ts 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; +} +` +});