python / python/mypy

Emit errors with `--disallow-any-generics` if `type[T]` or `TypeForm[T]` receives a generic `T` with missing type arguments

Offen
#21,145 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Feature

If --disallow-any-generics or --strict is on, I'd like mypy to emit E: Missing type parameters for generic type "list" [type-arg] when calling f(list) for the following function definitions:

  • def f[T](arg: type[T], /) -> T: ...
  • def f[T](arg: TypeForm[T], /) -> T: ...

Currently, there's no error report, and reveal_type(f(list)) shows Any.

Pitch

Due to the lack of error reporting in the above situation, implicit Anys currently easily leak when using type[T] or TypeForm[T], creating an implicit source of unsafety, which is surprising under --strict mode. Adapting the examples from PEP 747: Motivation:

# mypy: enable-incomplete-feature=TypeForm, disable-error-code=empty-body

from collections.abc import Callable
from typing_extensions import TypeForm, TypeIs

def trycast_list_item[T](typx: TypeForm[list[T]], value: object) -> T | None: ...
reveal_type(trycast_list_item(list, [1]))  # N: Revealed type is "Any | None"


def isassignable_list_item[T](value: object, typx: TypeForm[list[T]]) -> TypeIs[T]: ...

a: object
if isassignable_list_item(a, list):
    reveal_type(a)  # N: Revealed type is "Any"
else:
    reveal_type(a)  # N: Revealed type is "builtins.object"

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, die beiden Beispiele für generische Funktionen mit --disallow-any-generics oder --strict nachzustellen, einschließlich der reveal_type-Aufrufe und der TypeForm-Einstellung für unvollständige Features. Verfolge, wie Aufrufe mit list für type[T] und TypeForm[T] analysiert werden; fertig ist es, wenn der Fehler wegen des fehlenden Typarguments ausgegeben wird und das implizite Any nicht mehr in die gezeigten Reveals einfließt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
tooling
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.