Skip to content

Commit

Permalink
[red-knot] Fix async function edge case for inference of call express…
Browse files Browse the repository at this point in the history
…ions (#13187)
  • Loading branch information
AlexWaygood authored Sep 1, 2024
1 parent 0c23b86 commit fae0573
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
12 changes: 8 additions & 4 deletions crates/red_knot_python_semantic/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())
}
})
}
}

Expand Down
20 changes: 20 additions & 0 deletions crates/red_knot_python_semantic/src/types/infer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit fae0573

Please sign in to comment.