Forbid extraction of empty spans

This commit is contained in:
Andrew Casey
2017-09-12 18:07:25 -07:00
parent ece4e4f701
commit a02aaf2625
2 changed files with 11 additions and 0 deletions

View File

@@ -404,6 +404,12 @@ function test(x: number) {
"Cannot extract range containing conditional break or continue statements."
]);
testExtractRangeFailed("extractRangeFailed9",
`var x = ([#||]1 + 2);`,
[
"Statement or expression expected."
]);
testExtractMethod("extractMethod1",
`namespace A {
let x = 1;

View File

@@ -162,6 +162,11 @@ namespace ts.refactor.extractMethod {
*/
export function getRangeToExtract(sourceFile: SourceFile, span: TextSpan): RangeToExtract {
const length = span.length || 0;
if (length === 0) {
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.StatementOrExpressionExpected)] };
}
// Walk up starting from the the start position until we find a non-SourceFile node that subsumes the selected span.
// This may fail (e.g. you select two statements in the root of a source file)
let start = getParentNodeInSpan(getTokenAtPosition(sourceFile, span.start, /*includeJsDocComment*/ false), sourceFile, span);