Skip to content

Disable comparison overlap checks in assert statementsΒ #17896

Open
@JukkaL

Description

@JukkaL

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,
            ):

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions