Daemon can lose updates if there is a blocking error in intermediate run
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Inline options parsing causes files to force-included in the build if they were previously excluded. For example this test fails with "Unrecognized option..." on the last run:
[case testBlockerBadBuild]
$ dmypy start -- --follow-imports=skip
Daemon started
$ dmypy check a.py
a.py:1: error: Unsupported operand types for + ("int" and "str")
== Return code: 1
$ {python} -c "import shutil; shutil.copy('a.py.2', 'a.py')"
$ dmypy recheck --update b.py --remove a.py
b.py:1: error: invalid syntax
== Return code: 1
$ dmypy recheck --update c.py --remove b.py
[file a.py]
42 + 'no'
[file a.py.2]
# mypy: why-is-this-file-checked-again
42 + 'no'
[file b.py]
syntax error
[file c.py]
# OK
In fact, a.py shouldn't be even parsed on the last run. Note that it is actually correctly not parsed if the error on the second run is non-blocking (like 42 + 'no').
Note that exactly the same problem appears if update is called directly, this test equally fails with same symptoms:
[case testBlockerBadBuild]
# flags: --follow-imports=skip
# cmd: mypy a.py
# cmd2: mypy b.py
# cmd3: mypy c.py
[file a.py]
# OK
[file b.py.2]
syntax error here
[file c.py.3]
# OK
[file a.py.3]
# mypy: this-file-is-not-in-build-in-cmd3-why-is-it-checked
[out]
==
b.py:1: error: invalid syntax
==
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
Reproduziere das Problem mit dem dmypy-Szenario testBlockerBadBuild und vergleiche es anschließend mit dem entsprechenden direkten mypy-Update-Szenario aus dem Bericht. Verfolge, wie sich der blockierende Syntaxfehler auf spätere recheck- oder Update-Läufe auswirkt; als erledigt gilt die Aufgabe, wenn der abschließende Lauf die zuvor ausgeschlossene a.py nicht parst und beide Reproduktionen erfolgreich sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- cli, tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100