python / python/mypy

Don't report "expression contains 'Any'" if it's a `TypeOfAny.from_error`

Abierto
#12,016 2 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Merge medio
1 d 18 h
PR fusionados (30 d)
54

Descripción

Update

@A5Rocks idea about not reporting expression contains Any if it's TypeOfAny.from_error is based 100. I also realized that if it's <nothing> it would still complain about attribute access etc being incorrect.

Bug Report
The reason being that when you update an overloaded signature you can get hundreds of reported "Expression contains 'Any'" errors, when there are in reality an order of magnitude less actual errors.

from typing import overload

@overload
def foo(a: int) -> int: ...
# this overload was just removed
# @overload
# def foo(a: None) -> str ...
@overload
def foo(a: str) -> str: ...
def foo(a: object) -> object: ...

a = foo(None)  # error: No overload variant of "foo" matches argument type "None"\
    # error: Expression has type "Any"

reveal_type(a)  # error: Expression has type "Any"\
  # note: Revealed type is "Any"
print(a) # error: Expression has type "Any"
bar(a) # error: Expression has type "Any"
a + "asdf" # error: Expression has type "Any"

But If TypeOfAny.from_errors are ignored:

a = foo(None)  # error: No overload variant of "foo" matches argument type "None"

reveal_type(a)  # note: Revealed type is "Any"
print(a)
bar(a)
a + "asdf"

Original Title

Invocations of overloaded functions with invalid argument types shouldn't return Any it should return <nothing>

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con los ejemplos mínimos de llamadas sobrecargadas del issue y sigue cómo la resolución de sobrecargas no válidas asigna TypeOfAny.from_error y cómo las expresiones posteriores informan de ese tipo. Se considera terminado cuando el error de sobrecarga original permanece, mientras que los valores Any de error propagados no producen diagnósticos adicionales "Expression has type Any"; el issue no indica archivos ni pruebas que ejecutar.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.