Skip to content

New semantic analyzer: infinite loop in daemon with decorators, nested classes #7073

Closed
@msullivan

Description

@msullivan

Minimized from an example reported by a user at dropbox.

[case testInfiniteLoop]
# Only happens with new analyzer???
# flags: --new-semantic-analyzer
[file a.py]
from b import f
from typing import Callable, TypeVar

F = TypeVar('F', bound=Callable)
def dec(x: F) -> F: return x

@dec
def foo(self):
    class A:
        @classmethod
        def asdf(cls, x: 'A') -> None: pass

@dec
def bar(self):
    class B:
        @classmethod
        def asdf(cls, x: 'B') -> None: pass
    f()

[file b.py]
def f() -> int: pass
[file b.py.2]
def f() -> str: pass
[builtins fixtures/classmethod.pyi]
[out]
==

The issue seems to be that if a nested class isn't reprocessed and the toplevel gets reprocessed, it disappears from the symbol table and triggers its dependencies. If the toplevel depends on the nested class, then this can cause ping-ponging where the two nested classes alternate disappearing and reappearing.

The decorator and the method referencing the class are there because the create the needed dependencies.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions