From e0a79bcd63d3d86f5502b30c4702d61c6ca77005 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Sun, 13 Mar 2016 15:31:55 -0700 Subject: [PATCH] don't check that return statement has expression in constructors --- src/compiler/checker.ts | 2 +- .../reference/noImplicitReturnInConstructors.js | 14 ++++++++++++++ .../noImplicitReturnInConstructors.symbols | 8 ++++++++ .../reference/noImplicitReturnInConstructors.types | 8 ++++++++ .../compiler/noImplicitReturnInConstructors.ts | 6 ++++++ 5 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/noImplicitReturnInConstructors.js create mode 100644 tests/baselines/reference/noImplicitReturnInConstructors.symbols create mode 100644 tests/baselines/reference/noImplicitReturnInConstructors.types create mode 100644 tests/cases/compiler/noImplicitReturnInConstructors.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cbda24e6a6e..09672f5c09c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13965,7 +13965,7 @@ namespace ts { } } } - else if (compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { + else if (func.kind !== SyntaxKind.Constructor && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeVoidOrAny(func, returnType)) { // 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); } diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.js b/tests/baselines/reference/noImplicitReturnInConstructors.js new file mode 100644 index 00000000000..f1c4c8caa60 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.js @@ -0,0 +1,14 @@ +//// [noImplicitReturnInConstructors.ts] +class C { + constructor() { + return; + } +} + +//// [noImplicitReturnInConstructors.js] +var C = (function () { + function C() { + return; + } + return C; +}()); diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.symbols b/tests/baselines/reference/noImplicitReturnInConstructors.symbols new file mode 100644 index 00000000000..326a390ead8 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.symbols @@ -0,0 +1,8 @@ +=== tests/cases/compiler/noImplicitReturnInConstructors.ts === +class C { +>C : Symbol(C, Decl(noImplicitReturnInConstructors.ts, 0, 0)) + + constructor() { + return; + } +} diff --git a/tests/baselines/reference/noImplicitReturnInConstructors.types b/tests/baselines/reference/noImplicitReturnInConstructors.types new file mode 100644 index 00000000000..304c7b5db50 --- /dev/null +++ b/tests/baselines/reference/noImplicitReturnInConstructors.types @@ -0,0 +1,8 @@ +=== tests/cases/compiler/noImplicitReturnInConstructors.ts === +class C { +>C : C + + constructor() { + return; + } +} diff --git a/tests/cases/compiler/noImplicitReturnInConstructors.ts b/tests/cases/compiler/noImplicitReturnInConstructors.ts new file mode 100644 index 00000000000..ac6f5145318 --- /dev/null +++ b/tests/cases/compiler/noImplicitReturnInConstructors.ts @@ -0,0 +1,6 @@ +// @noImplicitReturns: true +class C { + constructor() { + return; + } +} \ No newline at end of file