Handle the combination of a write and a void return

When the return type is void, there's no `returnValueProperty`, but that
doesn't mean we don't need a `return` at the call site.

Fixes #18140.
This commit is contained in:
Andrew Casey
2017-09-07 14:43:02 -07:00
parent 2e02778960
commit 0e50da62c4
3 changed files with 37 additions and 0 deletions
+7
View File
@@ -613,6 +613,13 @@ namespace A {
[#|let a1 = { x: 1 };
return a1.x + 10;|]
}
}`);
// Write + void return
testExtractMethod("extractMethod21",
`function foo() {
let x = 10;
[#|x++;
return;|]
}`);
});
+4
View File
@@ -748,6 +748,10 @@ namespace ts.refactor.extractMethod {
}
else {
newNodes.push(createStatement(createBinary(assignments[0].name, SyntaxKind.EqualsToken, call)));
if (range.facts & RangeFacts.HasReturn) {
newNodes.push(createReturn());
}
}
}
else {
@@ -0,0 +1,26 @@
// ==ORIGINAL==
function foo() {
let x = 10;
x++;
return;
}
// ==SCOPE::function 'foo'==
function foo() {
let x = 10;
return newFunction();
function newFunction() {
x++;
return;
}
}
// ==SCOPE::global scope==
function foo() {
let x = 10;
x = newFunction(x);
return;
}
function newFunction(x: number) {
x++;
return x;
}