Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vulture does not detect code usage by case clauses in pattern matching #276

Open
exoriente opened this issue Mar 15, 2022 · 3 comments
Open

Comments

@exoriente
Copy link

Hi,

I'm running into a issue with pattern matching and vulture. In my case the property of a class is only used during pattern matching. Vulture doesn't pick up on it and considers it dead code. I've whitelisted the properties for now, but it would be great if vulture could be improved to cover this new scenario.

Pseudo code example:

@dataclass
class MyClass
    my_field: MyType
    
    @property
    my_test(self) -> bool:
        return my_field == my_constant

def do_something(x: Object) -> None:
    match x:
        case MyClass(my_test=True):
            do_stuff(x)
        case MyClass(my_test=False):
            do_other_stuff(x)

In this example, vulture seems to flag my_test as dead code.

@jendrikseipp
Copy link
Owner

Thanks for the report! We haven't added explicit support for the match statement, yet, so there could be room for improvement.

But in your code, I think my_test is really unused. Shouldn't the my_test={True,False} kwarg be called my_field?

@exoriente
Copy link
Author

Nope. It is used. The syntax decided for pattern matching is a bit counterintuitive.

In this example:

    case MyClass(my_test=True):

is more or less equivalent to:

    if is_instance(x, MyClass):
        if x.my_test == True:

I also had to get used to this. It seems like you're making a new MyClass object to compare against, but it works a bit differently. Helpful intro here, in case you're curious.

@jendrikseipp
Copy link
Owner

jendrikseipp commented Mar 15, 2022

Thanks for the explanation! Yes, then probably Vulture could be changed so that this case is detected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants