no_implicit_optional icon indicating copy to clipboard operation
no_implicit_optional copied to clipboard

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

Open xiaoyanli-lyft opened this issue 2 years ago • 1 comments

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

xiaoyanli-lyft avatar Dec 07 '23 20:12 xiaoyanli-lyft

Thanks for the issue! Agree this is undesirable

hauntsaninja avatar Dec 07 '23 21:12 hauntsaninja