mypy sometimes confuses nested classes-in-functions which share the same name
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Riproduci l’esempio minimo con mypy 1.9.0 e confrontalo con 0.800, quindi esamina il commit di bisezione e i file di analisi semantica che ha modificato, in particolare mypy/semanal.py. Inizia da test-data/unit/check-incremental.test come posizione del test indicata; il lavoro è completato quando le due definizioni di SomeClass con ambiti separati non producono più un errore incompatible-assignment.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug Report
In some circumstances, mypy will confuse two classes of the same name, even if they're declared in non-overlapping scopes.
To Reproduce
Check the following ~minimal example with mypy:
# from __future__ import annotations # with or without makes no difference
def test_a() -> None:
class SomeClass: # line 5
def some_method(self) -> None:
_ = some_var # line 7
some_var = None # not necessary for repro; stops error on line 7
def test_b() -> None:
instance: SomeClass
class SomeClass: # line 15
pass
instance = SomeClass()
# error: Incompatible types in assignment (expression
# has type "SomeClass@15", variable has type
# "SomeClass@5") [assignment]
Expected Behavior
No errors.
Actual Behavior
The tool confuses the two classes of the same name (SomeClass), despite these being declared in entirely different scopes.
Bisection
The problem appears to have been introduced by https://github.com/python/mypy/commit/389a1725c1df7fad4e2605360157c9f910cb502c (which made its way into mypy 0.900):
389a1725c1df7fad4e2605360157c9f910cb502c is the first bad commit
commit 389a1725c1df7fad4e2605360157c9f910cb502c
Author: Jukka Lehtosalo <jukka.lehtosalo@iki.fi>
Date: Thu May 6 14:32:36 2021 +0100
Fix crash with nested NamedTuple in incremental mode (#10431)
The name of the nested tuple type was inconsistent. Sometimes if was stored
using the full name in the module symbol table.
Also improve the internal API for creating classes to be less error-prone.
Work on #7281.
mypy/semanal.py | 10 +++++++---
mypy/semanal_enum.py | 9 +++++----
mypy/semanal_namedtuple.py | 2 +-
mypy/semanal_newtype.py | 11 ++++++-----
mypy/semanal_shared.py | 2 +-
mypy/semanal_typeddict.py | 14 ++++++++------
test-data/unit/check-incremental.test | 26 ++++++++++++++++++++++++++
7 files changed, 54 insertions(+), 20 deletions(-)
Probably relates to #7281, #10431.
Your Environment
- Mypy version used: 1.9.0, 0.900, but not 0.800 (see: "bisection")
- Mypy command-line flags: none necessary
- Mypy configuration options from
mypy.ini(and other config files): none necessary - Python version used: 3.8, 3.12
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Merge medio
- 1g 18h
- PR unite (30g)
- 54
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di python/mypy
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
bug topic-configuration topic-error-reporting
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Issue simili
-
area/auth bug comp/agent P3 platform/discord type/security
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
NousResearch/hermes-agent#117848 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
bancolombia/sentinel#23 ·
-
test md ApertaCI
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100