Disable comparison overlap checks in assert statements
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Feature
In assert statements, allow comparisons that don't appear to overlap. These are common in test cases, and tend to generate false positives.
One way to implement this would be to filter out errors with the comparison-overlap error code in assert statements.
A potentially better way would be to not narrow down types in comparisons in assert statements, but this could be too complicated and ad hoc.
Example where we have a false positive:
# mypy: strict-equality
from enum import Enum
class MyEnum(Enum):
X = 1
Y = 2
class MyClass:
attr: MyEnum = MyEnum.X
def mutate(self) -> None:
self.attr = MyEnum.Y
def test_foo() -> None:
a = MyClass()
assert a.attr == MyEnum.X
a.mutate()
assert a.attr == MyEnum.Y # Error: Non-overlapping equality check
Pitch
These errors are often false positives, and they are somewhat frequent in test cases. The fix seems simple.
Hints
Here is an example of filtering errors adapted from mypy/plugins/default.py:
with self.msg.filter_errors(
filter_errors=lambda name, info: info.code != codes.TYPEDDICT_READONLY_MUTATED,
save_filtered_errors=True,
):
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza rastreando cómo se comprueban las sentencias assert y cómo se produce el comparison-overlap error; usa como referencia el ejemplo de filtrado en mypy/plugins/default.py. Se considerará terminado cuando las comparaciones sin solapamiento en las sentencias assert ya no emitan este error, mientras que las comparaciones ordinarias conserven su comportamiento actual.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100