[red-knot] Fix async function edge case for inference of call expressions (#13187)

This commit is contained in:
Alex Waygood 2024-09-01 01:58:35 +01:00 committed by GitHub
parent 0c23b868dc
commit fae0573817
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 4 deletions

View file

@ -381,10 +381,14 @@ impl<'db> FunctionType<'db> {
panic!("Function type definition must have `DefinitionKind::Function`")
};
function_stmt_node
.returns
.as_ref()
.map(|returns| definition_expression_ty(db, definition, returns.as_ref()))
function_stmt_node.returns.as_ref().map(|returns| {
if function_stmt_node.is_async {
// TODO: generic `types.CoroutineType`!
Type::Unknown
} else {
definition_expression_ty(db, definition, returns.as_ref())
}
})
}
}

View file

@ -2834,6 +2834,26 @@ mod tests {
Ok(())
}
#[test]
fn basic_async_call_expression() -> anyhow::Result<()> {
let mut db = setup_db();
db.write_dedented(
"src/a.py",
"
async def get_int_async() -> int:
return 42
x = get_int_async()
",
)?;
// TODO: Generic `types.CoroutineType`!
assert_public_ty(&db, "src/a.py", "x", "Unknown");
Ok(())
}
#[test]
fn class_constructor_call_expression() -> anyhow::Result<()> {
let mut db = setup_db();