diff --git a/jedi/evaluate/pep0484.py b/jedi/evaluate/pep0484.py index 61236151..3d9fa739 100644 --- a/jedi/evaluate/pep0484.py +++ b/jedi/evaluate/pep0484.py @@ -219,6 +219,14 @@ _typing_module = None _typing_module_code_lines = None +class TypingModuleContext(ModuleContext): + """ + TODO this is currently used for recursion checks. We should just completely + refactor the typing module integration. + """ + pass + + def _get_typing_replacement_module(grammar): """ The idea is to return our jedi replacement for the PEP-0484 typing module @@ -263,7 +271,7 @@ def py__getitem__(context, typ, node): return context.eval_node(nodes[0]) module_node, code_lines = _get_typing_replacement_module(context.evaluator.latest_grammar) - typing = ModuleContext( + typing = TypingModuleContext( context.evaluator, module_node=module_node, path=None, diff --git a/jedi/evaluate/recursion.py b/jedi/evaluate/recursion.py index 5e961026..505dda54 100644 --- a/jedi/evaluate/recursion.py +++ b/jedi/evaluate/recursion.py @@ -116,7 +116,9 @@ class ExecutionRecursionDetector(object): self._parent_execution_funcs.append(funcdef) module = execution.get_root_context() - if module == self._evaluator.builtins_module: + + from jedi.evaluate.pep0484 import TypingModuleContext + if module == self._evaluator.builtins_module or isinstance(module, TypingModuleContext): # We have control over builtins so we know they are not recursing # like crazy. Therefore we just let them execute always, because # they usually just help a lot with getting good results.