Disable comparison overlap checks in assert statements
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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,
):
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par retracer la manière dont les instructions assert sont vérifiées et dont le comparison-overlap error est produit ; utilisez comme référence l’exemple de filtrage dans mypy/plugins/default.py. Le travail est terminé lorsque les comparaisons sans chevauchement dans les instructions assert n’émettent plus cette erreur, tandis que les comparaisons ordinaires conservent leur comportement actuel.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100