File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -365,6 +365,52 @@ switch (x) {
365365 refactor . extractSymbol . Messages . cannotExtractRange . message
366366 ] ) ;
367367
368+ testExtractRangeFailed ( "extractRangeFailed14" ,
369+ `
370+ switch(1) {
371+ case [#|1:
372+ break;|]
373+ }
374+ ` ,
375+ [
376+ refactor . extractSymbol . Messages . cannotExtractRange . message
377+ ] ) ;
378+
379+ testExtractRangeFailed ( "extractRangeFailed15" ,
380+ `
381+ switch(1) {
382+ case [#|1:
383+ break|];
384+ }
385+ ` ,
386+ [
387+ refactor . extractSymbol . Messages . cannotExtractRange . message
388+ ] ) ;
389+
390+ // Documentation only - it would be nice if the result were [$|1|]
391+ testExtractRangeFailed ( "extractRangeFailed16" ,
392+ `
393+ switch(1) {
394+ [#|case 1|]:
395+ break;
396+ }
397+ ` ,
398+ [
399+ refactor . extractSymbol . Messages . cannotExtractRange . message
400+ ] ) ;
401+
402+ // Documentation only - it would be nice if the result were [$|1|]
403+ testExtractRangeFailed ( "extractRangeFailed17" ,
404+ `
405+ switch(1) {
406+ [#|case 1:|]
407+ break;
408+ }
409+ ` ,
410+ [
411+ refactor . extractSymbol . Messages . cannotExtractRange . message
412+ ] ) ;
413+
368414 testExtractRangeFailed ( "extract-method-not-for-token-expression-statement" , `[#|a|]` , [ refactor . extractSymbol . Messages . cannotExtractIdentifier . message ] ) ;
369415 } ) ;
370416}
Original file line number Diff line number Diff line change @@ -235,6 +235,17 @@ namespace ts.refactor.extractSymbol {
235235 break ;
236236 }
237237 }
238+
239+ if ( ! statements . length ) {
240+ // https://github.com/Microsoft/TypeScript/issues/20559
241+ // Ranges like [|case 1: break;|] will fail to populate `statements` because
242+ // they will never find `start` in `start.parent.statements`.
243+ // Consider: We could support ranges like [|case 1:|] by refining them to just
244+ // the expression.
245+ Debug . assert ( isCaseClause ( start . parent ) && span . start < start . parent . expression . end ) ;
246+ return { errors : [ createFileDiagnostic ( sourceFile , span . start , length , Messages . cannotExtractRange ) ] } ;
247+ }
248+
238249 return { targetRange : { range : statements , facts : rangeFacts , declarations } } ;
239250 }
240251
You can’t perform that action at this time.
0 commit comments