fix(43939): forbid converting getters to async/await (#43944)

This commit is contained in:
Oleksandr T 2021-05-06 11:48:54 +03:00 committed by GitHub
parent 97f5c62956
commit e0d7703cf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 2 deletions

View File

@ -54,7 +54,7 @@ namespace ts.codefix {
functionToConvert = tokenAtPosition.parent.initializer;
}
else {
functionToConvert = tryCast(getContainingFunction(getTokenAtPosition(sourceFile, position)), isFunctionLikeDeclaration);
functionToConvert = tryCast(getContainingFunction(getTokenAtPosition(sourceFile, position)), canBeConvertedToAsync);
}
if (!functionToConvert) {

View File

@ -57,7 +57,7 @@ namespace ts {
}
}
if (isFunctionLikeDeclaration(node)) {
if (canBeConvertedToAsync(node)) {
addConvertToAsyncFunctionDiagnostics(node, checker, diags);
}
node.forEachChild(check);
@ -213,4 +213,16 @@ namespace ts {
return false;
}
export function canBeConvertedToAsync(node: Node): node is FunctionDeclaration | MethodDeclaration | FunctionExpression | ArrowFunction {
switch (node.kind) {
case SyntaxKind.FunctionDeclaration:
case SyntaxKind.MethodDeclaration:
case SyntaxKind.FunctionExpression:
case SyntaxKind.ArrowFunction:
return true;
default:
return false;
}
}
}

View File

@ -1698,6 +1698,14 @@ function [#|f|](x?: number): Promise<void> | number {
if (x) return x;
return fetch('').then(() => {});
}
`);
_testConvertToAsyncFunctionFailed("convertToAsyncFunction__NoSuggestionInGetters", `
class Foo {
get [#|m|](): Promise<number> {
return Promise.resolve(1).then(n => n);
}
}
`);
});