diff --git a/src/services/refactors/extractMethod.ts b/src/services/refactors/extractMethod.ts index e4fd0e85dc2..b73613350a8 100644 --- a/src/services/refactors/extractMethod.ts +++ b/src/services/refactors/extractMethod.ts @@ -293,14 +293,13 @@ namespace ts.refactor.extractMethod { } let errors: Diagnostic[]; - let permittedJumps = PermittedJumps.Return; let seenLabels: Array<__String>; - visit(nodeToCheck); + visit(nodeToCheck, PermittedJumps.Return); return errors; - function visit(node: Node) { + function visit(node: Node, permittedJumps: PermittedJumps) { if (errors) { // already found an error - can stop now return true; @@ -351,7 +350,6 @@ namespace ts.refactor.extractMethod { // do not dive into functions or classes return false; } - const savedPermittedJumps = permittedJumps; if (node.parent) { switch (node.parent.kind) { case SyntaxKind.IfStatement: @@ -402,7 +400,7 @@ namespace ts.refactor.extractMethod { { const label = (node).label; (seenLabels || (seenLabels = [])).push(label.escapedText); - forEachChild(node, visit); + forEachChild(node, child => visit(child, permittedJumps)); seenLabels.pop(); break; } @@ -439,11 +437,10 @@ namespace ts.refactor.extractMethod { } break; default: - forEachChild(node, visit); + forEachChild(node, child => visit(child, permittedJumps)); break; } - permittedJumps = savedPermittedJumps; } } }