@@ -340,45 +340,31 @@ namespace ts.refactor.extractMethod {
340
340
return false ;
341
341
}
342
342
const savedPermittedJumps = permittedJumps ;
343
- if ( node . parent ) {
344
- switch ( node . parent . kind ) {
345
- case SyntaxKind . IfStatement :
346
- if ( ( < IfStatement > node . parent ) . thenStatement === node || ( < IfStatement > node . parent ) . elseStatement === node ) {
347
- // forbid all jumps inside thenStatement or elseStatement
348
- permittedJumps = PermittedJumps . None ;
349
- }
350
- break ;
351
- case SyntaxKind . TryStatement :
352
- if ( ( < TryStatement > node . parent ) . tryBlock === node ) {
353
- // forbid all jumps inside try blocks
354
- permittedJumps = PermittedJumps . None ;
355
- }
356
- else if ( ( < TryStatement > node . parent ) . finallyBlock === node ) {
357
- // allow unconditional returns from finally blocks
358
- permittedJumps = PermittedJumps . Return ;
359
- }
360
- break ;
361
- case SyntaxKind . CatchClause :
362
- if ( ( < CatchClause > node . parent ) . block === node ) {
363
- // forbid all jumps inside the block of catch clause
364
- permittedJumps = PermittedJumps . None ;
365
- }
366
- break ;
367
- case SyntaxKind . CaseClause :
368
- if ( ( < CaseClause > node ) . expression !== node ) {
369
- // allow unlabeled break inside case clauses
370
- permittedJumps |= PermittedJumps . Break ;
371
- }
372
- break ;
373
- default :
374
- if ( isIterationStatement ( node . parent , /*lookInLabeledStatements*/ false ) ) {
375
- if ( ( < IterationStatement > node . parent ) . statement === node ) {
376
- // allow unlabeled break/continue inside loops
377
- permittedJumps |= PermittedJumps . Break | PermittedJumps . Continue ;
378
- }
379
- }
380
- break ;
381
- }
343
+
344
+ switch ( node . kind ) {
345
+ case SyntaxKind . IfStatement :
346
+ permittedJumps = PermittedJumps . None ;
347
+ break ;
348
+ case SyntaxKind . TryStatement :
349
+ // forbid all jumps inside try blocks
350
+ permittedJumps = PermittedJumps . None ;
351
+ break ;
352
+ case SyntaxKind . Block :
353
+ if ( node . parent && node . parent . kind === SyntaxKind . TryStatement && ( < TryStatement > node ) . finallyBlock === node ) {
354
+ // allow unconditional returns from finally blocks
355
+ permittedJumps = PermittedJumps . Return ;
356
+ }
357
+ break ;
358
+ case SyntaxKind . CaseClause :
359
+ // allow unlabeled break inside case clauses
360
+ permittedJumps |= PermittedJumps . Break ;
361
+ break ;
362
+ default :
363
+ if ( isIterationStatement ( node , /*lookInLabeledStatements*/ false ) ) {
364
+ // allow unlabeled break/continue inside loops
365
+ permittedJumps |= PermittedJumps . Break | PermittedJumps . Continue ;
366
+ }
367
+ break ;
382
368
}
383
369
384
370
switch ( node . kind ) {
@@ -405,7 +391,7 @@ namespace ts.refactor.extractMethod {
405
391
}
406
392
}
407
393
else {
408
- if ( ! ( permittedJumps & ( SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
394
+ if ( ! ( permittedJumps & ( node . kind === SyntaxKind . BreakStatement ? PermittedJumps . Break : PermittedJumps . Continue ) ) ) {
409
395
// attempt to break or continue in a forbidden context
410
396
( errors || ( errors = [ ] ) ) . push ( createDiagnosticForNode ( node , Messages . CannotExtractRangeContainingConditionalBreakOrContinueStatements ) ) ;
411
397
}
0 commit comments