Skip to content

dmypy suggest generates syntax error in annotation in some cases #18934

Open
@asottile-sentry

Description

@asottile-sentry

Bug Report

sometimes dmypy puts a : for some annotations instead of a . and is inconsistent with some types from typing

To Reproduce

class C: pass

def f1():
    return [C()]

def f2():
    return [1]

def f3():
    return (C(),)

def f4():
    return (1,)
[mypy]
check_untyped_defs = true

Expected Behavior

$ dmypy run .
...
$ dmypy suggest t.f1
() -> List[t.C]
$ dmypy suggest t.f2
() -> List[int]
$ dmypy suggest t.f3
() -> Tuple[t.C]
$ dmypy suggest t.f4
() -> Tuple[int]

Actual Behavior

$ dmypy run .
...
$ dmypy suggest t.f1
() -> typing:List[t.C]
$ dmypy suggest t.f2
() -> typing.List[int]
$ dmypy suggest t.f3
() -> Tuple[t.C]
$ dmypy suggest t.f4
() -> Tuple[int]

two separate oddities here:

  • the first produces typing:List (with a colon) instead of typing.List (the colon appears to come from here --
    delim = "." if "." not in obj else ":"
    )
    • I guess the colon is supposed to help with differentiating mod.Class.NestedClass vs mod.submod.Class ? though it seems to make no sense for List here
  • typing.List and Tuple should either both be fully qualified or neither

Your Environment

  • Mypy version used: 1.15.0
  • Mypy command-line flags: see above
  • Mypy configuration options from mypy.ini (and other config files): see above
  • Python version used: 3.13.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions