@@ -352,45 +352,31 @@ namespace ts.refactor.extractMethod {
352
352
return false ;
353
353
}
354
354
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 ;
394
380
}
395
381
396
382
switch ( node . kind ) {
@@ -417,7 +403,7 @@ namespace ts.refactor.extractMethod {
417
403
}
418
404
}
419
405
else {
420
- if ( ! ( permittedJumps & ( SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
406
+ if ( ! ( permittedJumps & ( node . kind === SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
421
407
// attempt to break or continue in a forbidden context
422
408
( errors || ( errors = [ ] ) ) . push ( createDiagnosticForNode ( node , Messages . CannotExtractRangeContainingConditionalBreakOrContinueStatements ) ) ;
423
409
}
0 commit comments