From 1f4c8708c251eb0cce31ad527e50fd7a3a7ddae7 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Sat, 29 May 2021 00:42:09 +0300 Subject: [PATCH] fix(44123): forbid convert to async for generator callbacks (#44147) --- src/services/suggestionDiagnostics.ts | 5 +++++ .../unittests/services/convertToAsyncFunction.ts | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/services/suggestionDiagnostics.ts b/src/services/suggestionDiagnostics.ts index ade23ff29e7..09740f8f2ee 100644 --- a/src/services/suggestionDiagnostics.ts +++ b/src/services/suggestionDiagnostics.ts @@ -174,6 +174,11 @@ namespace ts { switch (arg.kind) { case SyntaxKind.FunctionDeclaration: case SyntaxKind.FunctionExpression: + const functionFlags = getFunctionFlags(arg as FunctionDeclaration | FunctionExpression); + if (functionFlags & FunctionFlags.Generator) { + return false; + } + // falls through case SyntaxKind.ArrowFunction: visitedNestedConvertibleFunctions.set(getKeyFromNode(arg as FunctionLikeDeclaration), true); // falls through diff --git a/src/testRunner/unittests/services/convertToAsyncFunction.ts b/src/testRunner/unittests/services/convertToAsyncFunction.ts index fd2677b029e..d73877b259f 100644 --- a/src/testRunner/unittests/services/convertToAsyncFunction.ts +++ b/src/testRunner/unittests/services/convertToAsyncFunction.ts @@ -1706,6 +1706,16 @@ class Foo { return Promise.resolve(1).then(n => n); } } +`); + + _testConvertToAsyncFunctionFailed("convertToAsyncFunction__NoSuggestionForGeneratorCallbacks", ` +function [#|foo|](p: Promise) { + return p.then(function* (strings) { + for (const s of strings) { + yield s.toUpperCase(); + } + }); +} `); });