From cdb96bff47dad3c3a5deb8fff42c0d323de0578c Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 29 Jul 2018 00:10:54 +0200 Subject: [PATCH] Avoid recursion issues for the typing module --- jedi/evaluate/pep0484.py | 10 +++++++++- jedi/evaluate/recursion.py | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) 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.