mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-07-05 21:23:37 -05:00
Handle extraction ranges including case clause expressions
(mostly by rejecting them) Fixes #20559
This commit is contained in:
@@ -365,6 +365,52 @@ switch (x) {
|
||||
refactor.extractSymbol.Messages.cannotExtractRange.message
|
||||
]);
|
||||
|
||||
testExtractRangeFailed("extractRangeFailed14",
|
||||
`
|
||||
switch(1) {
|
||||
case [#|1:
|
||||
break;|]
|
||||
}
|
||||
`,
|
||||
[
|
||||
refactor.extractSymbol.Messages.cannotExtractRange.message
|
||||
]);
|
||||
|
||||
testExtractRangeFailed("extractRangeFailed15",
|
||||
`
|
||||
switch(1) {
|
||||
case [#|1:
|
||||
break|];
|
||||
}
|
||||
`,
|
||||
[
|
||||
refactor.extractSymbol.Messages.cannotExtractRange.message
|
||||
]);
|
||||
|
||||
// Documentation only - it would be nice if the result were [$|1|]
|
||||
testExtractRangeFailed("extractRangeFailed16",
|
||||
`
|
||||
switch(1) {
|
||||
[#|case 1|]:
|
||||
break;
|
||||
}
|
||||
`,
|
||||
[
|
||||
refactor.extractSymbol.Messages.cannotExtractRange.message
|
||||
]);
|
||||
|
||||
// Documentation only - it would be nice if the result were [$|1|]
|
||||
testExtractRangeFailed("extractRangeFailed17",
|
||||
`
|
||||
switch(1) {
|
||||
[#|case 1:|]
|
||||
break;
|
||||
}
|
||||
`,
|
||||
[
|
||||
refactor.extractSymbol.Messages.cannotExtractRange.message
|
||||
]);
|
||||
|
||||
testExtractRangeFailed("extract-method-not-for-token-expression-statement", `[#|a|]`, [refactor.extractSymbol.Messages.cannotExtractIdentifier.message]);
|
||||
});
|
||||
}
|
||||
@@ -235,6 +235,17 @@ namespace ts.refactor.extractSymbol {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!statements.length) {
|
||||
// https://github.com/Microsoft/TypeScript/issues/20559
|
||||
// Ranges like [|case 1: break;|] will fail to populate `statements` because
|
||||
// they will never find `start` in `start.parent.statements`.
|
||||
// Consider: We could support ranges like [|case 1:|] by refining them to just
|
||||
// the expression.
|
||||
Debug.assert(isCaseClause(start.parent) && span.start < start.parent.expression.end);
|
||||
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };
|
||||
}
|
||||
|
||||
return { targetRange: { range: statements, facts: rangeFacts, declarations } };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user