From e4576edce020e75008229667c1a23843b6a79dc4 Mon Sep 17 00:00:00 2001 From: kingwl <805037171@163.com> Date: Mon, 23 Oct 2017 15:12:04 +0800 Subject: [PATCH] warn when generator function without any yield expression(#13847) --- src/compiler/checker.ts | 9 ++- src/compiler/diagnosticMessages.json | 4 ++ ...ter.asyncGenerators.classMethods.es2015.js | 2 - ...syncGenerators.classMethods.es2015.symbols | 2 - ....asyncGenerators.classMethods.es2015.types | 5 +- ...mitter.asyncGenerators.classMethods.es5.js | 3 +- ...r.asyncGenerators.classMethods.es5.symbols | 2 - ...ter.asyncGenerators.classMethods.es5.types | 5 +- ...ter.asyncGenerators.classMethods.esnext.js | 2 - ...syncGenerators.classMethods.esnext.symbols | 2 - ....asyncGenerators.classMethods.esnext.types | 5 +- ...cGenerators.functionDeclarations.es2015.js | 2 - ...rators.functionDeclarations.es2015.symbols | 2 - ...nerators.functionDeclarations.es2015.types | 5 +- ...syncGenerators.functionDeclarations.es5.js | 3 +- ...enerators.functionDeclarations.es5.symbols | 2 - ...cGenerators.functionDeclarations.es5.types | 5 +- ...cGenerators.functionDeclarations.esnext.js | 2 - ...rators.functionDeclarations.esnext.symbols | 2 - ...nerators.functionDeclarations.esnext.types | 5 +- ...ncGenerators.functionExpressions.es2015.js | 2 - ...erators.functionExpressions.es2015.symbols | 2 - ...enerators.functionExpressions.es2015.types | 7 +-- ...asyncGenerators.functionExpressions.es5.js | 3 +- ...Generators.functionExpressions.es5.symbols | 2 - ...ncGenerators.functionExpressions.es5.types | 7 +-- ...ncGenerators.functionExpressions.esnext.js | 2 - ...erators.functionExpressions.esnext.symbols | 2 - ...enerators.functionExpressions.esnext.types | 7 +-- ...cGenerators.objectLiteralMethods.es2015.js | 2 - ...rators.objectLiteralMethods.es2015.symbols | 2 - ...nerators.objectLiteralMethods.es2015.types | 9 +-- ...syncGenerators.objectLiteralMethods.es5.js | 3 +- ...enerators.objectLiteralMethods.es5.symbols | 2 - ...cGenerators.objectLiteralMethods.es5.types | 9 +-- ...cGenerators.objectLiteralMethods.esnext.js | 2 - ...rators.objectLiteralMethods.esnext.symbols | 2 - ...nerators.objectLiteralMethods.esnext.types | 9 +-- .../reference/generatorTypeCheck10.js | 2 + .../reference/generatorTypeCheck10.symbols | 1 + .../reference/generatorTypeCheck10.types | 3 + .../reference/generatorTypeCheck11.js | 2 + .../reference/generatorTypeCheck11.symbols | 1 + .../reference/generatorTypeCheck11.types | 4 ++ .../reference/generatorTypeCheck12.errors.txt | 9 +++ .../reference/generatorTypeCheck15.js | 2 - .../reference/generatorTypeCheck15.symbols | 2 - .../reference/generatorTypeCheck15.types | 5 +- .../reference/generatorTypeCheck16.js | 2 - .../reference/generatorTypeCheck16.symbols | 2 - .../reference/generatorTypeCheck16.types | 2 - .../reference/generatorTypeCheck34.js | 2 + .../reference/generatorTypeCheck34.symbols | 1 + .../reference/generatorTypeCheck34.types | 4 ++ .../reference/generatorTypeCheck62.js | 2 + .../reference/generatorTypeCheck62.symbols | 13 +++-- .../reference/generatorTypeCheck62.types | 7 ++- .../reference/generatorTypeCheck63.errors.txt | 5 +- ...generatorWithoutYieldExpression.errors.txt | 37 ++++++++++++ .../generatorWithoutYieldExpression.js | 56 +++++++++++++++++++ .../generatorWithoutYieldExpression.symbols | 35 ++++++++++++ .../generatorWithoutYieldExpression.types | 38 +++++++++++++ ...ter.asyncGenerators.classMethods.es2015.ts | 1 - ...cGenerators.functionDeclarations.es2015.ts | 1 - ...ncGenerators.functionExpressions.es2015.ts | 1 - ...cGenerators.objectLiteralMethods.es2015.ts | 1 - ...mitter.asyncGenerators.classMethods.es5.ts | 1 - ...syncGenerators.functionDeclarations.es5.ts | 1 - ...asyncGenerators.functionExpressions.es5.ts | 1 - ...syncGenerators.objectLiteralMethods.es5.ts | 1 - ...ter.asyncGenerators.classMethods.esnext.ts | 1 - ...cGenerators.functionDeclarations.esnext.ts | 1 - ...ncGenerators.functionExpressions.esnext.ts | 1 - ...cGenerators.objectLiteralMethods.esnext.ts | 1 - .../yieldExpressions/generatorTypeCheck10.ts | 1 + .../yieldExpressions/generatorTypeCheck11.ts | 1 + .../yieldExpressions/generatorTypeCheck15.ts | 1 - .../yieldExpressions/generatorTypeCheck16.ts | 1 - .../yieldExpressions/generatorTypeCheck34.ts | 1 + .../yieldExpressions/generatorTypeCheck62.ts | 1 + .../generatorWithoutYieldExpression.ts | 30 ++++++++++ 81 files changed, 284 insertions(+), 144 deletions(-) create mode 100644 tests/baselines/reference/generatorTypeCheck12.errors.txt create mode 100644 tests/baselines/reference/generatorWithoutYieldExpression.errors.txt create mode 100644 tests/baselines/reference/generatorWithoutYieldExpression.js create mode 100644 tests/baselines/reference/generatorWithoutYieldExpression.symbols create mode 100644 tests/baselines/reference/generatorWithoutYieldExpression.types create mode 100644 tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index bcb35cefd53d1..82cb0efeeb8e0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -17283,7 +17283,12 @@ namespace ts { else { let types: Type[]; if (functionFlags & FunctionFlags.Generator) { // Generator or AsyncGenerator function - types = concatenate(checkAndAggregateYieldOperandTypes(func, checkMode), checkAndAggregateReturnExpressionTypes(func, checkMode)); + const aggregatedYield = checkAndAggregateYieldOperandTypes(func, checkMode); + const aggregatedReturn = checkAndAggregateReturnExpressionTypes(func, checkMode) + if (aggregatedReturn.length && aggregatedYield.length === 0) { + error(func, Diagnostics.A_generator_cannot_have_a_return_statement_and_no_yield_statements); + } + types = concatenate(aggregatedYield, aggregatedReturn); if (!types || types.length === 0) { const iterableIteratorAny = functionFlags & FunctionFlags.Async ? createAsyncIterableIteratorType(anyType) // AsyncGenerator function @@ -25071,7 +25076,7 @@ namespace ts { if (isInAmbientContext(node)) { return grammarErrorOnNode(node.asteriskToken, Diagnostics.Generators_are_not_allowed_in_an_ambient_context); } - if (!node.body) { + else { return grammarErrorOnNode(node.asteriskToken, Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator); } } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 0f88d5e4ac567..1fa4f1016613c 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -911,6 +911,10 @@ "category": "Error", "code": 1329 }, + "A generator cannot have a return statement and no yield statements.": { + "category": "Error", + "code": 1330 + }, "Duplicate identifier '{0}'.": { "category": "Error", diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js index d91571f93ad84..0096c8b0d8111 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.js @@ -38,7 +38,6 @@ class C6 { //// [C7.ts] class C7 { async * f() { - return 1; } } //// [C8.ts] @@ -215,7 +214,6 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar class C7 { f() { return __asyncGenerator(this, arguments, function* f_1() { - return 1; }); } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.symbols b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.symbols index 5db32d5c4d8a3..172e4ec0115d6 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.symbols @@ -67,8 +67,6 @@ class C7 { async * f() { >f : Symbol(C7.f, Decl(C7.ts, 0, 10)) - - return 1; } } === tests/cases/conformance/emitter/es2015/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types index c375fb6f45522..d3a6f9cc96939 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types @@ -80,10 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } === tests/cases/conformance/emitter/es2015/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js index 1119d6b06e376..ac53fe6f23dc4 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.js @@ -38,7 +38,6 @@ class C6 { //// [C7.ts] class C7 { async * f() { - return 1; } } //// [C8.ts] @@ -497,7 +496,7 @@ var C7 = /** @class */ (function () { C7.prototype.f = function () { return __asyncGenerator(this, arguments, function f_1() { return __generator(this, function (_a) { - return [2 /*return*/, 1]; + return [2 /*return*/]; }); }); }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.symbols b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.symbols index de82f07faacaf..2e24c774d8c01 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.symbols @@ -67,8 +67,6 @@ class C7 { async * f() { >f : Symbol(C7.f, Decl(C7.ts, 0, 10)) - - return 1; } } === tests/cases/conformance/emitter/es5/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types index e4be9f80d4ae6..0194cbd06d007 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types @@ -80,10 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } === tests/cases/conformance/emitter/es5/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.js b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.js index 84c8aaf009bb4..e43e9ace3c1f5 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.js +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.js @@ -38,7 +38,6 @@ class C6 { //// [C7.ts] class C7 { async * f() { - return 1; } } //// [C8.ts] @@ -98,7 +97,6 @@ class C6 { //// [C7.js] class C7 { async *f() { - return 1; } } //// [C8.js] diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.symbols b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.symbols index 99450781f82ea..85a40b9f6cc3b 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.symbols @@ -67,8 +67,6 @@ class C7 { async * f() { >f : Symbol(C7.f, Decl(C7.ts, 0, 10)) - - return 1; } } === tests/cases/conformance/emitter/esnext/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.types index 1232130a389a3..892fee649ab64 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.esnext.types @@ -80,10 +80,7 @@ class C7 { >C7 : C7 async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } === tests/cases/conformance/emitter/esnext/asyncGenerators/C8.ts === diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js index 4ca8322da9fc3..19c71a0bf2b10 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.js @@ -25,7 +25,6 @@ async function * f6() { } //// [F7.ts] async function * f7() { - return 1; } @@ -171,6 +170,5 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f7() { return __asyncGenerator(this, arguments, function* f7_1() { - return 1; }); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.symbols index 8c2c8b1aead53..f3d8f77e1d016 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.symbols @@ -40,7 +40,5 @@ async function * f6() { === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === async function * f7() { >f7 : Symbol(f7, Decl(F7.ts, 0, 0)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types index 0e43463990629..51e88dcad7b10 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types @@ -53,9 +53,6 @@ async function * f6() { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js index 410a25d2e16c7..8591097748884 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.js @@ -25,7 +25,6 @@ async function * f6() { } //// [F7.ts] async function * f7() { - return 1; } @@ -433,7 +432,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar function f7() { return __asyncGenerator(this, arguments, function f7_1() { return __generator(this, function (_a) { - return [2 /*return*/, 1]; + return [2 /*return*/]; }); }); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.symbols index 416d53498115e..70656f1240233 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.symbols @@ -40,7 +40,5 @@ async function * f6() { === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === async function * f7() { >f7 : Symbol(f7, Decl(F7.ts, 0, 0)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types index 9ebd2659ef4ab..503a1d27a838c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types @@ -53,9 +53,6 @@ async function * f6() { } === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.js b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.js index 57708e027a361..7c0ae3d583b48 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.js @@ -25,7 +25,6 @@ async function * f6() { } //// [F7.ts] async function * f7() { - return 1; } @@ -54,5 +53,4 @@ async function* f6() { } //// [F7.js] async function* f7() { - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.symbols index 018b7d7e07a64..ca8c8ab83636e 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.symbols @@ -40,7 +40,5 @@ async function * f6() { === tests/cases/conformance/emitter/esnext/asyncGenerators/F7.ts === async function * f7() { >f7 : Symbol(f7, Decl(F7.ts, 0, 0)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.types index 4e61c9032273c..37abb84b77f3c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.esnext.types @@ -53,9 +53,6 @@ async function * f6() { } === tests/cases/conformance/emitter/esnext/asyncGenerators/F7.ts === async function * f7() { ->f7 : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js index 602fd47d38b6e..6cf5d88956f04 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.js @@ -25,7 +25,6 @@ const f6 = async function * () { } //// [F7.ts] const f7 = async function * () { - return 1; } @@ -171,6 +170,5 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; const f7 = function () { return __asyncGenerator(this, arguments, function* () { - return 1; }); }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.symbols index ff315c7f82ee8..a5c12d4a1a20c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.symbols @@ -40,7 +40,5 @@ const f6 = async function * () { === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === const f7 = async function * () { >f7 : Symbol(f7, Decl(F7.ts, 0, 5)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types index 83d65ce524624..8070f54e18548 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types @@ -59,10 +59,7 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/es2015/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator<1> ->async function * () { return 1;} : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator +>async function * () {} : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js index 45d17737cefad..62451cf0b7a25 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.js @@ -25,7 +25,6 @@ const f6 = async function * () { } //// [F7.ts] const f7 = async function * () { - return 1; } @@ -433,7 +432,7 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar var f7 = function () { return __asyncGenerator(this, arguments, function () { return __generator(this, function (_a) { - return [2 /*return*/, 1]; + return [2 /*return*/]; }); }); }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.symbols index 88a9631c0bb6e..b581f957f97b7 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.symbols @@ -40,7 +40,5 @@ const f6 = async function * () { === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === const f7 = async function * () { >f7 : Symbol(f7, Decl(F7.ts, 0, 5)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types index 7d736b2327c9a..e391d75485839 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types @@ -59,10 +59,7 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/es5/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator<1> ->async function * () { return 1;} : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator +>async function * () {} : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.js b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.js index 349fea53b7a22..83d535893feed 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.js +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.js @@ -25,7 +25,6 @@ const f6 = async function * () { } //// [F7.ts] const f7 = async function * () { - return 1; } @@ -54,5 +53,4 @@ const f6 = async function* () { }; //// [F7.js] const f7 = async function* () { - return 1; }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.symbols b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.symbols index e59d8429fb735..71eacf6699041 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.symbols @@ -40,7 +40,5 @@ const f6 = async function * () { === tests/cases/conformance/emitter/esnext/asyncGenerators/F7.ts === const f7 = async function * () { >f7 : Symbol(f7, Decl(F7.ts, 0, 5)) - - return 1; } diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.types index 6c40f9cebb169..fc1a018bd7235 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.esnext.types @@ -59,10 +59,7 @@ const f6 = async function * () { } === tests/cases/conformance/emitter/esnext/asyncGenerators/F7.ts === const f7 = async function * () { ->f7 : () => AsyncIterableIterator<1> ->async function * () { return 1;} : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f7 : () => AsyncIterableIterator +>async function * () {} : () => AsyncIterableIterator } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js index 760931a43421e..6b42f6898b00a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.js @@ -38,7 +38,6 @@ const o6 = { //// [O7.ts] const o7 = { async * f() { - return 1; } } @@ -198,7 +197,6 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar const o7 = { f() { return __asyncGenerator(this, arguments, function* f_1() { - return 1; }); } }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.symbols b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.symbols index 7f03bf6eef0f3..e4c17a4361146 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.symbols @@ -67,8 +67,6 @@ const o7 = { async * f() { >f : Symbol(f, Decl(O7.ts, 0, 12)) - - return 1; } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types index 59c5bcfa16716..d5b1ee2cd7592 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types @@ -83,14 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/es2015/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator<1>; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator<1>; } +>o7 : { f(): AsyncIterableIterator; } +>{ async * f() { }} : { f(): AsyncIterableIterator; } async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js index b5069bcea2c71..258010e290c8a 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.js @@ -38,7 +38,6 @@ const o6 = { //// [O7.ts] const o7 = { async * f() { - return 1; } } @@ -460,7 +459,7 @@ var o7 = { f: function () { return __asyncGenerator(this, arguments, function f_1() { return __generator(this, function (_a) { - return [2 /*return*/, 1]; + return [2 /*return*/]; }); }); } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.symbols b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.symbols index fbf789697424f..8d6ae290633f9 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.symbols @@ -67,8 +67,6 @@ const o7 = { async * f() { >f : Symbol(f, Decl(O7.ts, 0, 12)) - - return 1; } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types index 3e7ead2f73796..062a561dadf07 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types @@ -83,14 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/es5/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator<1>; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator<1>; } +>o7 : { f(): AsyncIterableIterator; } +>{ async * f() { }} : { f(): AsyncIterableIterator; } async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.js b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.js index a1877b38184e0..f188138c41014 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.js +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.js @@ -38,7 +38,6 @@ const o6 = { //// [O7.ts] const o7 = { async * f() { - return 1; } } @@ -81,6 +80,5 @@ const o6 = { //// [O7.js] const o7 = { async *f() { - return 1; } }; diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.symbols b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.symbols index c1c7847c59279..7400b4b114379 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.symbols +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.symbols @@ -67,8 +67,6 @@ const o7 = { async * f() { >f : Symbol(f, Decl(O7.ts, 0, 12)) - - return 1; } } diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.types index 9e5aad8af2367..ca7bc35c0ece3 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.esnext.types @@ -83,14 +83,11 @@ const o6 = { } === tests/cases/conformance/emitter/esnext/asyncGenerators/O7.ts === const o7 = { ->o7 : { f(): AsyncIterableIterator<1>; } ->{ async * f() { return 1; }} : { f(): AsyncIterableIterator<1>; } +>o7 : { f(): AsyncIterableIterator; } +>{ async * f() { }} : { f(): AsyncIterableIterator; } async * f() { ->f : () => AsyncIterableIterator<1> - - return 1; ->1 : 1 +>f : () => AsyncIterableIterator } } diff --git a/tests/baselines/reference/generatorTypeCheck10.js b/tests/baselines/reference/generatorTypeCheck10.js index 252f3011613bc..261b2307fccbd 100644 --- a/tests/baselines/reference/generatorTypeCheck10.js +++ b/tests/baselines/reference/generatorTypeCheck10.js @@ -1,9 +1,11 @@ //// [generatorTypeCheck10.ts] function* g(): IterableIterator { + yield; return; } //// [generatorTypeCheck10.js] function* g() { + yield; return; } diff --git a/tests/baselines/reference/generatorTypeCheck10.symbols b/tests/baselines/reference/generatorTypeCheck10.symbols index 3d6f8cf889a33..ed33591724105 100644 --- a/tests/baselines/reference/generatorTypeCheck10.symbols +++ b/tests/baselines/reference/generatorTypeCheck10.symbols @@ -3,5 +3,6 @@ function* g(): IterableIterator { >g : Symbol(g, Decl(generatorTypeCheck10.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + yield; return; } diff --git a/tests/baselines/reference/generatorTypeCheck10.types b/tests/baselines/reference/generatorTypeCheck10.types index f9304e3b16854..a1275fa8baebc 100644 --- a/tests/baselines/reference/generatorTypeCheck10.types +++ b/tests/baselines/reference/generatorTypeCheck10.types @@ -3,5 +3,8 @@ function* g(): IterableIterator { >g : () => IterableIterator >IterableIterator : IterableIterator + yield; +>yield : any + return; } diff --git a/tests/baselines/reference/generatorTypeCheck11.js b/tests/baselines/reference/generatorTypeCheck11.js index 4898f661f265a..6b15c74578401 100644 --- a/tests/baselines/reference/generatorTypeCheck11.js +++ b/tests/baselines/reference/generatorTypeCheck11.js @@ -1,9 +1,11 @@ //// [generatorTypeCheck11.ts] function* g(): IterableIterator { + yield 0; return 0; } //// [generatorTypeCheck11.js] function* g() { + yield 0; return 0; } diff --git a/tests/baselines/reference/generatorTypeCheck11.symbols b/tests/baselines/reference/generatorTypeCheck11.symbols index aea1ffd781c7d..eb06920bd90f5 100644 --- a/tests/baselines/reference/generatorTypeCheck11.symbols +++ b/tests/baselines/reference/generatorTypeCheck11.symbols @@ -3,5 +3,6 @@ function* g(): IterableIterator { >g : Symbol(g, Decl(generatorTypeCheck11.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + yield 0; return 0; } diff --git a/tests/baselines/reference/generatorTypeCheck11.types b/tests/baselines/reference/generatorTypeCheck11.types index 7613cc189a974..8abf733077407 100644 --- a/tests/baselines/reference/generatorTypeCheck11.types +++ b/tests/baselines/reference/generatorTypeCheck11.types @@ -3,6 +3,10 @@ function* g(): IterableIterator { >g : () => IterableIterator >IterableIterator : IterableIterator + yield 0; +>yield 0 : any +>0 : 0 + return 0; >0 : 0 } diff --git a/tests/baselines/reference/generatorTypeCheck12.errors.txt b/tests/baselines/reference/generatorTypeCheck12.errors.txt new file mode 100644 index 0000000000000..2be8a08a35713 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck12.errors.txt @@ -0,0 +1,9 @@ +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts(1,11): message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts (1 errors) ==== + function* g(): IterableIterator { + ~ +!!! message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + return ""; + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck15.js b/tests/baselines/reference/generatorTypeCheck15.js index d359c10048652..92d965316b1d0 100644 --- a/tests/baselines/reference/generatorTypeCheck15.js +++ b/tests/baselines/reference/generatorTypeCheck15.js @@ -1,9 +1,7 @@ //// [generatorTypeCheck15.ts] function* g() { - return ""; } //// [generatorTypeCheck15.js] function* g() { - return ""; } diff --git a/tests/baselines/reference/generatorTypeCheck15.symbols b/tests/baselines/reference/generatorTypeCheck15.symbols index 3d914d0bd6faa..892345dd848fa 100644 --- a/tests/baselines/reference/generatorTypeCheck15.symbols +++ b/tests/baselines/reference/generatorTypeCheck15.symbols @@ -1,6 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts === function* g() { >g : Symbol(g, Decl(generatorTypeCheck15.ts, 0, 0)) - - return ""; } diff --git a/tests/baselines/reference/generatorTypeCheck15.types b/tests/baselines/reference/generatorTypeCheck15.types index 3851d8e56a416..8ad61a9fe80b5 100644 --- a/tests/baselines/reference/generatorTypeCheck15.types +++ b/tests/baselines/reference/generatorTypeCheck15.types @@ -1,7 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts === function* g() { ->g : () => IterableIterator<""> - - return ""; ->"" : "" +>g : () => IterableIterator } diff --git a/tests/baselines/reference/generatorTypeCheck16.js b/tests/baselines/reference/generatorTypeCheck16.js index 7b8b93deabdac..bd6ff850848cf 100644 --- a/tests/baselines/reference/generatorTypeCheck16.js +++ b/tests/baselines/reference/generatorTypeCheck16.js @@ -1,9 +1,7 @@ //// [generatorTypeCheck16.ts] function* g() { - return; } //// [generatorTypeCheck16.js] function* g() { - return; } diff --git a/tests/baselines/reference/generatorTypeCheck16.symbols b/tests/baselines/reference/generatorTypeCheck16.symbols index bbc22cc4a2de5..431483c296463 100644 --- a/tests/baselines/reference/generatorTypeCheck16.symbols +++ b/tests/baselines/reference/generatorTypeCheck16.symbols @@ -1,6 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts === function* g() { >g : Symbol(g, Decl(generatorTypeCheck16.ts, 0, 0)) - - return; } diff --git a/tests/baselines/reference/generatorTypeCheck16.types b/tests/baselines/reference/generatorTypeCheck16.types index a607ad851c198..f290f877ddcc5 100644 --- a/tests/baselines/reference/generatorTypeCheck16.types +++ b/tests/baselines/reference/generatorTypeCheck16.types @@ -1,6 +1,4 @@ === tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts === function* g() { >g : () => IterableIterator - - return; } diff --git a/tests/baselines/reference/generatorTypeCheck34.js b/tests/baselines/reference/generatorTypeCheck34.js index 20b88b9a090b8..c97a791d66ef1 100644 --- a/tests/baselines/reference/generatorTypeCheck34.js +++ b/tests/baselines/reference/generatorTypeCheck34.js @@ -2,6 +2,7 @@ function* g() { yield 0; function* g2() { + yield ""; return ""; } } @@ -10,6 +11,7 @@ function* g() { function* g() { yield 0; function* g2() { + yield ""; return ""; } } diff --git a/tests/baselines/reference/generatorTypeCheck34.symbols b/tests/baselines/reference/generatorTypeCheck34.symbols index 343b68c3bda53..455e99060179a 100644 --- a/tests/baselines/reference/generatorTypeCheck34.symbols +++ b/tests/baselines/reference/generatorTypeCheck34.symbols @@ -6,6 +6,7 @@ function* g() { function* g2() { >g2 : Symbol(g2, Decl(generatorTypeCheck34.ts, 1, 12)) + yield ""; return ""; } } diff --git a/tests/baselines/reference/generatorTypeCheck34.types b/tests/baselines/reference/generatorTypeCheck34.types index 239c5ff14936d..fefc5f5d4e20a 100644 --- a/tests/baselines/reference/generatorTypeCheck34.types +++ b/tests/baselines/reference/generatorTypeCheck34.types @@ -9,6 +9,10 @@ function* g() { function* g2() { >g2 : () => IterableIterator<""> + yield ""; +>yield "" : any +>"" : "" + return ""; >"" : "" } diff --git a/tests/baselines/reference/generatorTypeCheck62.js b/tests/baselines/reference/generatorTypeCheck62.js index e87e2d494be8a..93b012fa7d9c4 100644 --- a/tests/baselines/reference/generatorTypeCheck62.js +++ b/tests/baselines/reference/generatorTypeCheck62.js @@ -23,6 +23,7 @@ export interface State extends StrategicState { } export const Nothing1: Strategy = strategy("Nothing", function*(state: State) { + yield ; return state; }); @@ -51,6 +52,7 @@ function strategy(stratName, gen) { } exports.strategy = strategy; exports.Nothing1 = strategy("Nothing", function* (state) { + yield; return state; }); exports.Nothing2 = strategy("Nothing", function* (state) { diff --git a/tests/baselines/reference/generatorTypeCheck62.symbols b/tests/baselines/reference/generatorTypeCheck62.symbols index b8eb11d1f6743..90d68032ed6f3 100644 --- a/tests/baselines/reference/generatorTypeCheck62.symbols +++ b/tests/baselines/reference/generatorTypeCheck62.symbols @@ -71,35 +71,36 @@ export const Nothing1: Strategy = strategy("Nothing", function*(state: St >state : Symbol(state, Decl(generatorTypeCheck62.ts, 23, 71)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) + yield ; return state; >state : Symbol(state, Decl(generatorTypeCheck62.ts, 23, 71)) }); export const Nothing2: Strategy = strategy("Nothing", function*(state: State) { ->Nothing2 : Symbol(Nothing2, Decl(generatorTypeCheck62.ts, 27, 12)) +>Nothing2 : Symbol(Nothing2, Decl(generatorTypeCheck62.ts, 28, 12)) >Strategy : Symbol(Strategy, Decl(generatorTypeCheck62.ts, 13, 1)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) >strategy : Symbol(strategy, Decl(generatorTypeCheck62.ts, 2, 1)) ->state : Symbol(state, Decl(generatorTypeCheck62.ts, 27, 71)) +>state : Symbol(state, Decl(generatorTypeCheck62.ts, 28, 71)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) yield state; ->state : Symbol(state, Decl(generatorTypeCheck62.ts, 27, 71)) +>state : Symbol(state, Decl(generatorTypeCheck62.ts, 28, 71)) }); export const Nothing3: Strategy = strategy("Nothing", function* (state: State) { ->Nothing3 : Symbol(Nothing3, Decl(generatorTypeCheck62.ts, 31, 12)) +>Nothing3 : Symbol(Nothing3, Decl(generatorTypeCheck62.ts, 32, 12)) >Strategy : Symbol(Strategy, Decl(generatorTypeCheck62.ts, 13, 1)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) >strategy : Symbol(strategy, Decl(generatorTypeCheck62.ts, 2, 1)) ->state : Symbol(state, Decl(generatorTypeCheck62.ts, 31, 72)) +>state : Symbol(state, Decl(generatorTypeCheck62.ts, 32, 72)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) yield ; return state; ->state : Symbol(state, Decl(generatorTypeCheck62.ts, 31, 72)) +>state : Symbol(state, Decl(generatorTypeCheck62.ts, 32, 72)) }); diff --git a/tests/baselines/reference/generatorTypeCheck62.types b/tests/baselines/reference/generatorTypeCheck62.types index f8b3a9117b137..17c7a7fb17ca1 100644 --- a/tests/baselines/reference/generatorTypeCheck62.types +++ b/tests/baselines/reference/generatorTypeCheck62.types @@ -71,13 +71,16 @@ export const Nothing1: Strategy = strategy("Nothing", function*(state: St >Nothing1 : Strategy >Strategy : Strategy >State : State ->strategy("Nothing", function*(state: State) { return state;}) : (a: State) => IterableIterator +>strategy("Nothing", function*(state: State) { yield ; return state;}) : (a: State) => IterableIterator >strategy : (stratName: string, gen: (a: T) => IterableIterator) => (a: T) => IterableIterator >"Nothing" : "Nothing" ->function*(state: State) { return state;} : (state: State) => IterableIterator +>function*(state: State) { yield ; return state;} : (state: State) => IterableIterator >state : State >State : State + yield ; +>yield : any + return state; >state : State diff --git a/tests/baselines/reference/generatorTypeCheck63.errors.txt b/tests/baselines/reference/generatorTypeCheck63.errors.txt index 1466530dd0c65..b6b633d4af382 100644 --- a/tests/baselines/reference/generatorTypeCheck63.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck63.errors.txt @@ -3,6 +3,7 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(24,61): err Type 'State | 1' is not assignable to type 'StrategicState'. Type '1' has no properties in common with type 'StrategicState'. tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(29,70): error TS7025: Generator implicitly has type 'IterableIterator' because it does not yield any values. Consider supplying a return type. +tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(32,62): message TS1330: generator with 'return statement' must not have zero 'yield return' statements. tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(32,62): error TS2345: Argument of type '(state: State) => IterableIterator<1>' is not assignable to parameter of type '(a: State) => IterableIterator'. Type 'IterableIterator<1>' is not assignable to type 'IterableIterator'. Type '1' is not assignable to type 'State'. @@ -10,7 +11,7 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(36,62): err Type 'IterableIterator' is not assignable to type 'IterableIterator'. -==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts (4 errors) ==== +==== tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts (5 errors) ==== export interface StrategicState { lastStrategyApplied?: string; } @@ -51,6 +52,8 @@ tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts(36,62): err export const Nothing2: Strategy = strategy("Nothing", function* (state: State) { ~~~~~~~~ +!!! message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + ~~~~~~~~ !!! error TS2345: Argument of type '(state: State) => IterableIterator<1>' is not assignable to parameter of type '(a: State) => IterableIterator'. !!! error TS2345: Type 'IterableIterator<1>' is not assignable to type 'IterableIterator'. !!! error TS2345: Type '1' is not assignable to type 'State'. diff --git a/tests/baselines/reference/generatorWithoutYieldExpression.errors.txt b/tests/baselines/reference/generatorWithoutYieldExpression.errors.txt new file mode 100644 index 0000000000000..55253d81af57c --- /dev/null +++ b/tests/baselines/reference/generatorWithoutYieldExpression.errors.txt @@ -0,0 +1,37 @@ +tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts(21,5): message TS1330: generator with 'return statement' must not have zero 'yield return' statements. +tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts(25,8): message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + + +==== tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts (2 errors) ==== + // function* g0 () { } + + // function* g1() { + // return 42; + // } + + // function* g2() { + // yield 42; + // return 42; + // } + + // function* g3() { + // function* g4 () { + // yield 42; + // return 42; + // } + // return 42; + // } + + class A { + * g5 () { + ~~ +!!! message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + return 42; + } + + g6 = function* () { + ~~~~~~~~ +!!! message TS1330: generator with 'return statement' must not have zero 'yield return' statements. + return 42; + } + } \ No newline at end of file diff --git a/tests/baselines/reference/generatorWithoutYieldExpression.js b/tests/baselines/reference/generatorWithoutYieldExpression.js new file mode 100644 index 0000000000000..d72e1a5744f8b --- /dev/null +++ b/tests/baselines/reference/generatorWithoutYieldExpression.js @@ -0,0 +1,56 @@ +//// [generatorWithoutYieldExpression.ts] +// function* g0 () { } + +// function* g1() { +// return 42; +// } + +// function* g2() { +// yield 42; +// return 42; +// } + +// function* g3() { +// function* g4 () { +// yield 42; +// return 42; +// } +// return 42; +// } + +class A { + * g5 () { + return 42; + } + + g6 = function* () { + return 42; + } +} + +//// [generatorWithoutYieldExpression.js] +// function* g0 () { } +// function* g1() { +// return 42; +// } +// function* g2() { +// yield 42; +// return 42; +// } +// function* g3() { +// function* g4 () { +// yield 42; +// return 42; +// } +// return 42; +// } +class A { + constructor() { + this.g6 = function* () { + return 42; + }; + } + *g5() { + return 42; + } +} diff --git a/tests/baselines/reference/generatorWithoutYieldExpression.symbols b/tests/baselines/reference/generatorWithoutYieldExpression.symbols new file mode 100644 index 0000000000000..8cb8d8256b65d --- /dev/null +++ b/tests/baselines/reference/generatorWithoutYieldExpression.symbols @@ -0,0 +1,35 @@ +=== tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts === +// function* g0 () { } + +// function* g1() { +// return 42; +// } + +// function* g2() { +// yield 42; +// return 42; +// } + +// function* g3() { +// function* g4 () { +// yield 42; +// return 42; +// } +// return 42; +// } + +class A { +>A : Symbol(A, Decl(generatorWithoutYieldExpression.ts, 0, 0)) + + * g5 () { +>g5 : Symbol(A.g5, Decl(generatorWithoutYieldExpression.ts, 19, 9)) + + return 42; + } + + g6 = function* () { +>g6 : Symbol(A.g6, Decl(generatorWithoutYieldExpression.ts, 22, 3)) + + return 42; + } +} diff --git a/tests/baselines/reference/generatorWithoutYieldExpression.types b/tests/baselines/reference/generatorWithoutYieldExpression.types new file mode 100644 index 0000000000000..c36a29c04cc1b --- /dev/null +++ b/tests/baselines/reference/generatorWithoutYieldExpression.types @@ -0,0 +1,38 @@ +=== tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts === +// function* g0 () { } + +// function* g1() { +// return 42; +// } + +// function* g2() { +// yield 42; +// return 42; +// } + +// function* g3() { +// function* g4 () { +// yield 42; +// return 42; +// } +// return 42; +// } + +class A { +>A : A + + * g5 () { +>g5 : () => IterableIterator<42> + + return 42; +>42 : 42 + } + + g6 = function* () { +>g6 : () => IterableIterator<42> +>function* () { return 42; } : () => IterableIterator<42> + + return 42; +>42 : 42 + } +} diff --git a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts index fe1bc56dd1550..03070d0bddb4c 100644 --- a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts +++ b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.classMethods.es2015.ts @@ -38,7 +38,6 @@ class C6 { // @filename: C7.ts class C7 { async * f() { - return 1; } } // @filename: C8.ts diff --git a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es2015.ts b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es2015.ts index 280bda810d0b8..741da9516a088 100644 --- a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es2015.ts +++ b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es2015.ts @@ -25,5 +25,4 @@ async function * f6() { } // @filename: F7.ts async function * f7() { - return 1; } diff --git a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionExpressions.es2015.ts b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionExpressions.es2015.ts index d90e14a19d110..3504096bfe022 100644 --- a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionExpressions.es2015.ts +++ b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.functionExpressions.es2015.ts @@ -25,5 +25,4 @@ const f6 = async function * () { } // @filename: F7.ts const f7 = async function * () { - return 1; } diff --git a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es2015.ts b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es2015.ts index 1998b8674a37e..1b91d4bd5fd71 100644 --- a/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es2015.ts +++ b/tests/cases/conformance/emitter/es2015/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es2015.ts @@ -38,6 +38,5 @@ const o6 = { // @filename: O7.ts const o7 = { async * f() { - return 1; } } diff --git a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.classMethods.es5.ts b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.classMethods.es5.ts index 0bd75b03649e0..b015c125c335b 100644 --- a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.classMethods.es5.ts +++ b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.classMethods.es5.ts @@ -38,7 +38,6 @@ class C6 { // @filename: C7.ts class C7 { async * f() { - return 1; } } // @filename: C8.ts diff --git a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es5.ts b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es5.ts index f7b5caf181c97..6464883b108c1 100644 --- a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es5.ts +++ b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionDeclarations.es5.ts @@ -25,5 +25,4 @@ async function * f6() { } // @filename: F7.ts async function * f7() { - return 1; } diff --git a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionExpressions.es5.ts b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionExpressions.es5.ts index cc756a2f4adf6..2857e79d25644 100644 --- a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionExpressions.es5.ts +++ b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.functionExpressions.es5.ts @@ -25,5 +25,4 @@ const f6 = async function * () { } // @filename: F7.ts const f7 = async function * () { - return 1; } diff --git a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es5.ts b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es5.ts index 8c33be18d1f9e..ecec95c1e090f 100644 --- a/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es5.ts +++ b/tests/cases/conformance/emitter/es5/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.es5.ts @@ -38,6 +38,5 @@ const o6 = { // @filename: O7.ts const o7 = { async * f() { - return 1; } } diff --git a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.classMethods.esnext.ts b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.classMethods.esnext.ts index fbdcaab49987a..890605518f639 100644 --- a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.classMethods.esnext.ts +++ b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.classMethods.esnext.ts @@ -38,7 +38,6 @@ class C6 { // @filename: C7.ts class C7 { async * f() { - return 1; } } // @filename: C8.ts diff --git a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionDeclarations.esnext.ts b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionDeclarations.esnext.ts index 2e529c5c92d05..e0ebfc0eecd51 100644 --- a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionDeclarations.esnext.ts +++ b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionDeclarations.esnext.ts @@ -25,5 +25,4 @@ async function * f6() { } // @filename: F7.ts async function * f7() { - return 1; } diff --git a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionExpressions.esnext.ts b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionExpressions.esnext.ts index 412e3a8a4d66f..ec595bdb5f570 100644 --- a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionExpressions.esnext.ts +++ b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.functionExpressions.esnext.ts @@ -25,5 +25,4 @@ const f6 = async function * () { } // @filename: F7.ts const f7 = async function * () { - return 1; } diff --git a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.esnext.ts b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.esnext.ts index ae41cff42b9bb..d79cb42b1c512 100644 --- a/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.esnext.ts +++ b/tests/cases/conformance/emitter/esnext/asyncGenerators/emitter.asyncGenerators.objectLiteralMethods.esnext.ts @@ -38,6 +38,5 @@ const o6 = { // @filename: O7.ts const o7 = { async * f() { - return 1; } } diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck10.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck10.ts index 813ea07075da2..6e2a6e243486d 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck10.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck10.ts @@ -1,4 +1,5 @@ //@target: ES6 function* g(): IterableIterator { + yield; return; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts index e77ec3d911c66..b07c431ceb4cb 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts @@ -1,4 +1,5 @@ //@target: ES6 function* g(): IterableIterator { + yield 0; return 0; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts index b810a13aa558f..4f21aa841ebf4 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck15.ts @@ -1,4 +1,3 @@ //@target: ES6 function* g() { - return ""; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts index 06d3de394efdf..4f21aa841ebf4 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck16.ts @@ -1,4 +1,3 @@ //@target: ES6 function* g() { - return; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck34.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck34.ts index 3afd5617a0827..14b3335191950 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck34.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck34.ts @@ -2,6 +2,7 @@ function* g() { yield 0; function* g2() { + yield ""; return ""; } } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts index 2f30fe9d90257..05126d30df20f 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts @@ -26,6 +26,7 @@ export interface State extends StrategicState { } export const Nothing1: Strategy = strategy("Nothing", function*(state: State) { + yield ; return state; }); diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts b/tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts new file mode 100644 index 0000000000000..5c973a419d73d --- /dev/null +++ b/tests/cases/conformance/es6/yieldExpressions/generatorWithoutYieldExpression.ts @@ -0,0 +1,30 @@ +//@target: ES6 + +// function* g0 () { } + +// function* g1() { +// return 42; +// } + +// function* g2() { +// yield 42; +// return 42; +// } + +// function* g3() { +// function* g4 () { +// yield 42; +// return 42; +// } +// return 42; +// } + +class A { + * g5 () { + return 42; + } + + g6 = function* () { + return 42; + } +} \ No newline at end of file