no-string-type-annotation

Replace quoted annotations when postponed annotation evaluation is enabled.

Message

Remove the quotes from this annotation; postponed evaluation is already enabled.

References

Valid examples

from a.b import Class

def foo() -> Class:
    return Class()
Show more
import typing
from a.b import Class

def foo() -> typing.Type[Class]:
    return Class
import typing
from a.b import Class
from c import func

def foo() -> typing.Optional[typing.Type[Class]]:
    return Class if func() else None
from a.b import Class

def foo(arg: Class) -> None:
    pass

foo(Class())
from a.b import Class

module_var: Class = Class()
from typing import Literal

def foo() -> Literal["a", "b"]:
    return "a"
import typing

def foo() -> typing.Optional[typing.Literal["a", "b"]]:
    return "a"
import typing

def foo() -> typing.Optional[typing.Literal["class", "function"]]:
    return "class"
from __future__ import annotations
from typing import Annotated

value: Annotated[int, "units"]

Invalid examples

from __future__ import annotations

from a.b import Class

def foo() -> "Class":
    return Class()

Suggested fix

from __future__ import annotations

from a.b import Class

def foo() -> Class:
    return Class()
Show more
from __future__ import annotations

from a.b import Class

async def foo() -> "Class":
    return await Class()

Suggested fix

from __future__ import annotations

from a.b import Class

async def foo() -> Class:
    return await Class()
from __future__ import annotations

import typing
from a.b import Class

def foo() -> typing.Type["Class"]:
    return Class

Suggested fix

from __future__ import annotations

import typing
from a.b import Class

def foo() -> typing.Type[Class]:
    return Class
from __future__ import annotations

import typing
from a.b import Class
from c import func

def foo() -> Optional[typing.Type["Class"]]:
    return Class if func() else None

Suggested fix

from __future__ import annotations

import typing
from a.b import Class
from c import func

def foo() -> Optional[typing.Type[Class]]:
    return Class if func() else None
from __future__ import annotations

from a.b import Class

def foo(arg: "Class") -> None:
    pass

foo(Class())

Suggested fix

from __future__ import annotations

from a.b import Class

def foo(arg: Class) -> None:
    pass

foo(Class())
from __future__ import annotations

from a.b import Class

module_var: "Class" = Class()

Suggested fix

from __future__ import annotations

from a.b import Class

module_var: Class = Class()
from __future__ import annotations

import typing
from typing_extensions import Literal
from a.b import Class

def foo() -> typing.Tuple[Literal["a", "b"], "Class"]:
    return Class()

Suggested fix

from __future__ import annotations

import typing
from typing_extensions import Literal
from a.b import Class

def foo() -> typing.Tuple[Literal["a", "b"], Class]:
    return Class()
from __future__ import annotations

value: b"\xff"