python / python/mypy

Covariance error inferred for lambda has invalid line number associated with it

Aperta
#8,592 3 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug priority-0-high topic-error-reporting
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Versions

mypy 0.770
python 3.8.2

Description

This is probably related to the https://github.com/python/mypy/issues/4270

Problem is triggered when using recipe everything_except from hypothesis documentation:

https://hypothesis.readthedocs.io/en/latest/data.html#hypothesis.strategies.from_type

I have a file with following content (this is the whole file):

from typing import TypeVar

from hypothesis import strategies as st

_Ex = TypeVar("_Ex", covariant=True)


def everything_except(*types: type) -> st.SearchStrategy[_Ex]:
    strategy = st.from_type(type).flatmap(st.from_type)

    return strategy.filter(lambda x: not isinstance(x, types))  # type: ignore

Running mypy on first clean run (without .mypy_cache) has the following output:

example.py:1276: error: Cannot use a covariant type variable as a parameter
Found 1 error in 1 file (checked 1 source file)

For some reason, mypy sees error on line 1276 which does not exist. On the other hand, running mypy for the second time gives:

Success: no issues found in 1 source file

What's more, when you have pretty set to True, first run gives:

Traceback (most recent call last):
  File "/home/krprzyby/.local/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/home/krprzyby/.local/lib/python3.8/site-packages/mypy/__main__.py", line 8, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 89, in main
  File "mypy/build.py", line 180, in build
  File "mypy/build.py", line 249, in _build
  File "mypy/build.py", line 2649, in dispatch
  File "mypy/build.py", line 2956, in process_graph
  File "mypy/build.py", line 3073, in process_stale_scc
  File "mypy/errors.py", line 476, in file_messages
  File "mypy/errors.py", line 449, in format_messages
IndexError: list index out of range

Running mypy for the second time works correctly with pretty set to True because the line number is correct and # type: ignore works.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci l'esempio fornito con un .mypy_cache vuoto e l'output pretty abilitato. Inizia leggendo mypy/errors.py e i percorsi build.py correlati mostrati nel traceback; il lavoro è completato quando la prima esecuzione segnala una riga sorgente valida e non solleva IndexError, mentre il comportamento di type-ignore rimane coerente nelle esecuzioni successive.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
compilers
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.