False positive on function call with walrus operator
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
In our codebase we chose specific way of working with pytest.mark.parametrize.
It is hard to look at tests which names are autogenerated from parameters list. To improve this we use parametrize(ids=) argument.
Unfortunately maintainability/readability of tests decreases if test cases and ids are written separately.
To resolve this issue we add some description to test cases and reuse it in ids with walrus operator.
For instance
class TestA:
@pytest.mark.parametrize(
'desc,a,b',
_test_cases := (('a != b', 1, 2),),
ids=[desc for desc, *_ in _test_cases],
)
def test_func(self, desc: str, a: int, b: int) -> None:
assert a == b, desc
Mypy says here that _test_cases does not exist which is incorrect
To Reproduce
I have created simple playground without pytest dependency to reproduce the error
https://mypy-play.net/?mypy=master&python=3.12&flags=check-untyped-defs&gist=8f98cbc918fbf8053a14f58c8011e375
Expected Behavior
Success: no issues found in 1 source file
Actual Behavior
main.py:11: error: Name "my_call_vars" is not defined [name-defined]
Your Environment
- Mypy version used: 1.10.0 and master
- Mypy command-line flags: no specific flags needed
- Mypy configuration options from
mypy.ini(and other config files): no specific configurations - Python version used: 3.10, 3.12
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 verlinkte mypy-play-Reproduktion für main.py mit den angegebenen Python-Versionen und Flags auszuführen. Verfolge, wie die walrus assignment und die anschließende Comprehension für einen Funktionsaufruf analysiert werden, und füge dann Abdeckung für dieses Beispiel hinzu. Fertig ist dies, wenn die Reproduktion „Success: no issues found in 1 source file“ ohne den name-defined-Fehler 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
- 45/100