New semantic analyzer: placeholder nodes from self.x assignment
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
This test case generates unexpected output:
class C:
def f(self) -> None:
self.x: D = D() # Expression has type "D", variable has type "int"
self.x: int
class D: pass
reveal_type(C().x) # int
The first assignment should take precedence, even though it contains a forward reference. We could probably support this by inserting a placeholder node into the class symbol table.
Follow-up to #6336.
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, das bereitgestellte Python-Beispiel zu reproduzieren, und untersuche, wie der semantische Analysator Klassensymboltabellen und Vorwärtsreferenzen behandelt. Untersuche, ob ein Platzhalterknoten die erste Zuweisung von self.x bewahren kann. Als abgeschlossen gilt die Aufgabe, wenn das Beispiel nicht mehr den widersprüchlichen Typfehler meldet und reveal_type(C().x) int als Typ meldet.
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