Any is excessively used as outer context for inference
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Consider this example:
from typing import Any
def foo(**kwargs: Any) -> None: ...
foo(bar=reveal_type([1])) # Revealed type is List[Any]
Such behavior causes many false negatives for plugins that provide precise type checking for various ORMs, this includes SQLAlchemy plugin, our internal plugins, and likely Django plugin.
My guess this was added so that an empty list in Any context is inferred as List[Any] instead of List[<nothing>], but I think this is counterproductive. If empty collections cause issues for plugins they can easily work around using private APIs to re-infer argument type in generated precise context (for example using has_uninhabited_component() and ctx.api.accept()). Or maybe we can provide public API for inference.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere das Beispiel mit mypy und untersuche, wie sich der äußere Any-Kontext auf reveal_type([1]) in einem Aufruf mit **kwargs: Any auswirkt. Überprüfe die im Issue erwähnten APIs zur erneuten Inferenz des Plugins, einschließlich has_uninhabited_component() und ctx.api.accept(). Als abgeschlossen gilt die Einigung auf ein konsistentes Inferenzverhalten oder eine öffentliche API und deren Implementierung, einschließlich einer Regressionstestabdeckung für das Beispiel und die betroffenen Pluginszenarien.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers, devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100