Overlapping overload detection fails when signature contains TypeVar
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Mypy detects and reports overlapping function overloads that differ in return type.
In the example below, it correctly reports that the second overload of func1 overlaps the first overload. However, when the concrete type str is replaced by a generic type _T, it fails to report the error.
@overload
def func1(
a: str,
b: Literal[False] = ...,
) -> List[str]: ...
@overload
def func1(
a: str,
b: bool = ...,
) -> List[Union[str, int]]: ...
_T = TypeVar("_T")
@overload
def func2(
a: _T,
b: Literal[False] = ...,
) -> List[_T]: ...
@overload
def func2(
a: _T,
b: bool = ...,
) -> List[Union[_T, int]]: ...
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
Beginne damit, die beiden Overload-Beispiele aus dem Issue mit mypy auszuführen und die Diagnosen für func1 und func2 zu vergleichen. Verfolge dann den Pfad zur Erkennung von Overload-Überschneidungen, der für diese Diagnosen verantwortlich ist. Als abgeschlossen gilt die Aufgabe, wenn mypy die sich überschneidenden Overloads im TypeVar-basierten func2-Beispiel meldet, ohne den konkreten Fall zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100