hauntsaninja / no_implicit_optional

A codemod to make your implicit optional type hints PEP 484 compliant.
MIT License
79 stars 8 forks source link

"Optional[ClassType]" = None was rewrite to Optional["Optional[ClassType]"] = None #19

Open xiaoyanli-lyft opened 10 months ago

xiaoyanli-lyft commented 10 months ago

Mypy does not care about double quotes, and treat them same. However, no_implicit_optional still add additional Optional, like below will be transform to

def example_function_double_quote(x: Optional["Optional[DummyClass]"]=None) -> None:

Can we fix this edge case?

from typing import Optional

class DummyClass:
    """A dummy class for illustration purposes."""

    def __init__(self, name: str):
        self.name = name

    def greet(self) -> str:
        """A dummy method that returns a greeting."""
        return f"Hello, {self.name}!"

def example_function_double_quote(x: "Optional[DummyClass]"=None) -> None:
    reveal_type(x)  

def example_function(x: Optional[DummyClass]=None) -> None:
    reveal_type(x)  

example_function(DummyClass("hello"))
example_function_double_quote(DummyClass("hello"))

and when run about code:

test.py:15: note: Revealed type is "Union[test.DummyClass, None]"
test.py:18: note: Revealed type is "Union[test.DummyClass, None]"
Success: no issues found in 1 source file
hauntsaninja commented 10 months ago

Thanks for the issue! Agree this is undesirable