mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-06 11:54:44 -06:00
in noImplicitReturns mode, also disallow "return;"
In --noImplicitReturns mode, if a function specifies a return type, disallow empty "return;" statements. Fixes #5916.
This commit is contained in:
parent
0f6dbd0250
commit
5132ea64ea
@ -13842,11 +13842,11 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
if (node.expression) {
|
||||
const func = getContainingFunction(node);
|
||||
if (func) {
|
||||
const signature = getSignatureFromDeclaration(func);
|
||||
const returnType = getReturnTypeOfSignature(signature);
|
||||
const func = getContainingFunction(node);
|
||||
if (func) {
|
||||
const signature = getSignatureFromDeclaration(func);
|
||||
const returnType = getReturnTypeOfSignature(signature);
|
||||
if (node.expression) {
|
||||
const exprType = checkExpressionCached(node.expression);
|
||||
|
||||
if (func.asteriskToken) {
|
||||
@ -13881,6 +13881,10 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (compilerOptions.noImplicitReturns && !maybeTypeOfKind(returnType, TypeFlags.Void | TypeFlags.Any)) {
|
||||
// The function has a return type, but the return statement doesn't have an expression.
|
||||
error(node, Diagnostics.Not_all_code_paths_return_a_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
tests/cases/compiler/noImplicitReturnsWithoutReturnExpression.ts(2,5): error TS7030: Not all code paths return a value.
|
||||
tests/cases/compiler/noImplicitReturnsWithoutReturnExpression.ts(22,9): error TS7030: Not all code paths return a value.
|
||||
|
||||
|
||||
==== tests/cases/compiler/noImplicitReturnsWithoutReturnExpression.ts (2 errors) ====
|
||||
function isMissingReturnExpression(): number {
|
||||
return;
|
||||
~~~~~~~
|
||||
!!! error TS7030: Not all code paths return a value.
|
||||
}
|
||||
|
||||
function isMissingReturnExpression2(): any {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression3(): number|void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression4(): void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression5(x) {
|
||||
if (x) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
~~~~~~~
|
||||
!!! error TS7030: Not all code paths return a value.
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
//// [noImplicitReturnsWithoutReturnExpression.ts]
|
||||
function isMissingReturnExpression(): number {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression2(): any {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression3(): number|void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression4(): void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression5(x) {
|
||||
if (x) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//// [noImplicitReturnsWithoutReturnExpression.js]
|
||||
function isMissingReturnExpression() {
|
||||
return;
|
||||
}
|
||||
function isMissingReturnExpression2() {
|
||||
return;
|
||||
}
|
||||
function isMissingReturnExpression3() {
|
||||
return;
|
||||
}
|
||||
function isMissingReturnExpression4() {
|
||||
return;
|
||||
}
|
||||
function isMissingReturnExpression5(x) {
|
||||
if (x) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
// @noImplicitReturns: true
|
||||
function isMissingReturnExpression(): number {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression2(): any {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression3(): number|void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression4(): void {
|
||||
return;
|
||||
}
|
||||
|
||||
function isMissingReturnExpression5(x) {
|
||||
if (x) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user