@@ -352,45 +352,31 @@ namespace ts.refactor.extractMethod {
352352 return false ;
353353 }
354354 const savedPermittedJumps = permittedJumps ;
355- if ( node . parent ) {
356- switch ( node . parent . kind ) {
357- case SyntaxKind . IfStatement :
358- if ( ( < IfStatement > node . parent ) . thenStatement === node || ( < IfStatement > node . parent ) . elseStatement === node ) {
359- // forbid all jumps inside thenStatement or elseStatement
360- permittedJumps = PermittedJumps . None ;
361- }
362- break ;
363- case SyntaxKind . TryStatement :
364- if ( ( < TryStatement > node . parent ) . tryBlock === node ) {
365- // forbid all jumps inside try blocks
366- permittedJumps = PermittedJumps . None ;
367- }
368- else if ( ( < TryStatement > node . parent ) . finallyBlock === node ) {
369- // allow unconditional returns from finally blocks
370- permittedJumps = PermittedJumps . Return ;
371- }
372- break ;
373- case SyntaxKind . CatchClause :
374- if ( ( < CatchClause > node . parent ) . block === node ) {
375- // forbid all jumps inside the block of catch clause
376- permittedJumps = PermittedJumps . None ;
377- }
378- break ;
379- case SyntaxKind . CaseClause :
380- if ( ( < CaseClause > node ) . expression !== node ) {
381- // allow unlabeled break inside case clauses
382- permittedJumps |= PermittedJumps . Break ;
383- }
384- break ;
385- default :
386- if ( isIterationStatement ( node . parent , /*lookInLabeledStatements*/ false ) ) {
387- if ( ( < IterationStatement > node . parent ) . statement === node ) {
388- // allow unlabeled break/continue inside loops
389- permittedJumps |= PermittedJumps . Break | PermittedJumps . Continue ;
390- }
391- }
392- break ;
393- }
355+
356+ switch ( node . kind ) {
357+ case SyntaxKind . IfStatement :
358+ permittedJumps = PermittedJumps . None ;
359+ break ;
360+ case SyntaxKind . TryStatement :
361+ // forbid all jumps inside try blocks
362+ permittedJumps = PermittedJumps . None ;
363+ break ;
364+ case SyntaxKind . Block :
365+ if ( node . parent && node . parent . kind === SyntaxKind . TryStatement && ( < TryStatement > node ) . finallyBlock === node ) {
366+ // allow unconditional returns from finally blocks
367+ permittedJumps = PermittedJumps . Return ;
368+ }
369+ break ;
370+ case SyntaxKind . CaseClause :
371+ // allow unlabeled break inside case clauses
372+ permittedJumps |= PermittedJumps . Break ;
373+ break ;
374+ default :
375+ if ( isIterationStatement ( node , /*lookInLabeledStatements*/ false ) ) {
376+ // allow unlabeled break/continue inside loops
377+ permittedJumps |= PermittedJumps . Break | PermittedJumps . Continue ;
378+ }
379+ break ;
394380 }
395381
396382 switch ( node . kind ) {
@@ -417,7 +403,7 @@ namespace ts.refactor.extractMethod {
417403 }
418404 }
419405 else {
420- if ( ! ( permittedJumps & ( SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
406+ if ( ! ( permittedJumps & ( node . kind === SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
421407 // attempt to break or continue in a forbidden context
422408 ( errors || ( errors = [ ] ) ) . push ( createDiagnosticForNode ( node , Messages . CannotExtractRangeContainingConditionalBreakOrContinueStatements ) ) ;
423409 }
0 commit comments