python / python/mypy

New semantic analyzer: placeholder nodes from self.x assignment

Offen
#6,338 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug priority-1-normal semantic-analyzer
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

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, 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

Neue Issues direkt in Ihr Postfach

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