Skip to content

Commit 3214ab3

Browse files
authored
Merge pull request #21397 from amcasey/PortGh20559
Port extract symbol fix to 2.7
2 parents 92d2a25 + f7f8125 commit 3214ab3

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

src/harness/unittests/extractRanges.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,58 @@ 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+
414+
testExtractRangeFailed("extractRangeFailed18",
415+
`[#|{ 1;|] }`,
416+
[
417+
refactor.extractSymbol.Messages.cannotExtractRange.message
418+
]);
419+
368420
testExtractRangeFailed("extract-method-not-for-token-expression-statement", `[#|a|]`, [refactor.extractSymbol.Messages.cannotExtractIdentifier.message]);
369421
});
370422
}

src/services/refactors/extractSymbol.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,16 @@ 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+
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
246+
}
247+
238248
return { targetRange: { range: statements, facts: rangeFacts, declarations } };
239249
}
240250

0 commit comments

Comments
 (0)