Skip to content

Make it possible to obtain non-type arguments in type analyze plugin hooks #18508

Open
@palle-k

Description

@palle-k

Feature

It should be possible to obtain value expressions used as generic arguments in an AnalyzeTypeContext
For example, given typing.Annotated[builtins.int, "hello world"], I want to obtain "hello world", which is not a type, but a value.

Pitch

This feature would enable type checking of dependencies in FastAPI. FastAPI dependency injection allows specification of dependencies like this:

def my_dependency() -> SomeType:
    return ...


@app.get("/")
def route_handler(arg: Annotated[SomeType, Depends(my_dependency)]):
    return arg.do_something()

In this situation, MyPy should (with the help of a FastAPI specific plugin) be able to verify that the return type of my_dependency matches the type, which is the first generic argument of Annotated.


Currently, a plugin could theoretically obtain dependencies using get_type_analyze_hook. However, when inspecting the type arguments (ctx.type.args), any non-type argument to Annotated is not accessible within the scope of this hook.


Furthermore, this could potentially enable additional inspections relating to Pydantic fields.

Metadata

Metadata

Assignees

No one assigned

    Labels

    featuretopic-pluginsThe plugin API and ideas for new plugins

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions