Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix crash with malformed TypedDicts and disllow-any-expr #13963

Merged

Commits on Oct 29, 2022

  1. Fix crash with malformed TypedDicts and disllow-any-expr

    Fixes python#13066
    
    During the semanal phase, mypy opts to ignore and skip processing
    any malformed or illegal statements inside of a TypedDict class
    definition, such as method definitions.
    
    Skipping semanal analysis on these statements can cause any number
    of odd downstream problems: the type-checking phase assumes that all
    semanal-only semantic constructs (e.g. FakeInfo) have been purged
    by this point, and so can crash at any point once this precondition has
    been violated.
    
    This diff opts to solve this problem by filtering down the list of
    statements so we keep only the ones we know are legal within a TypedDict
    definition.
    
    The other possible solution to this problem is to modify mypy so we
    skip checking TypedDict class bodies entirely during type checking and
    fine-grained deps analysis. Doing this would also let address python#10007
    and supersede my other diff python#13732.
    
    I decided against doing this for now because:
    
    1. I wasn't sure if this was actually safe, especially in the
       fine-grained deps phase and for mypyc.
    2. I think no matter what, the semanal phase should not leak
       semanal-only types: relaxing this postcondition would make
       it harder to reason about mypy. So, we'd probably want to make this
       change regardless of what we do in the later phases.
    Michael0x2a committed Oct 29, 2022
    Configuration menu
    Copy the full SHA
    67ba6f2 View commit details
    Browse the repository at this point in the history