From ba0768bab6c7981c62eb61df99fcb0d827b4d885 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 29 Nov 2017 00:24:28 +0100 Subject: [PATCH] Refactor a bit more and remove the parent_context parameter from create_from_access --- jedi/evaluate/compiled/__init__.py | 54 ++++++++++++------------------ jedi/evaluate/compiled/mixed.py | 2 +- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index b432aad4..5d3a03d3 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -493,7 +493,7 @@ def _create_from_name(evaluator, compiled_object, name): pass access = compiled_object.access.getattr(name, default=None) - return _create_cached_compiled_object( + return create_cached_compiled_object( evaluator, access, parent_context=compiled_object, faked=faked ) @@ -520,11 +520,7 @@ _SPECIAL_OBJECTS = { def get_special_object(evaluator, identifier): obj = _SPECIAL_OBJECTS[identifier] - if identifier == 'BUILTINS': - parent_context = None - else: - parent_context = create(evaluator, _builtins) - return create(evaluator, obj, parent_context=parent_context) + return create(evaluator, obj) def _normalize_create_args(func): @@ -534,43 +530,37 @@ def _normalize_create_args(func): return wrapper -def create(evaluator, obj, parent_context=None): - if inspect.ismodule(obj): - if parent_context is not None: - # Modules don't have parents, be careful with caching: recurse. - return create(evaluator, obj) - +def create(evaluator, obj): return create_from_access( - evaluator, create_access(evaluator, obj), parent_context + evaluator, create_access(evaluator, obj) ) @evaluator_function_cache() -def create_from_access(evaluator, access, parent_context=None): +def create_from_access(evaluator, access): """ Returns a CompiledObject and tries to find fake modules. """ - if parent_context is None: - access_tuples = access.get_access_path_tuples() - if access_tuples: - string_names, accesses = zip(*access_tuples) - try: - tree_nodes = fake.get_faked_tree_nodes(evaluator.latest_grammar, string_names) - except fake.FakeDoesNotExist: - pass - else: - for access2, tree_node in zip(accesses, tree_nodes): - parent_context = _create_cached_compiled_object( - evaluator, access2, parent_context, faked=tree_node - ) - return parent_context + access_tuples = access.get_access_path_tuples() + if access_tuples: + string_names, accesses = zip(*access_tuples) + try: + tree_nodes = fake.get_faked_tree_nodes(evaluator.latest_grammar, string_names) + except fake.FakeDoesNotExist: + pass + else: + parent_context = None + for access2, tree_node in zip(accesses, tree_nodes): + parent_context = create_cached_compiled_object( + evaluator, access2, parent_context, faked=tree_node + ) + return parent_context - parent_context = create(evaluator, _builtins) - return _create_cached_compiled_object(evaluator, access, parent_context) - return _create_cached_compiled_object(evaluator, access, parent_context) + parent_context = create(evaluator, _builtins) + return create_cached_compiled_object(evaluator, access, parent_context) @_normalize_create_args @evaluator_function_cache() -def _create_cached_compiled_object(evaluator, access, parent_context, faked): +def create_cached_compiled_object(evaluator, access, parent_context, faked): return CompiledObject(evaluator, access, parent_context, faked) diff --git a/jedi/evaluate/compiled/mixed.py b/jedi/evaluate/compiled/mixed.py index 23e4d4bd..897f4193 100644 --- a/jedi/evaluate/compiled/mixed.py +++ b/jedi/evaluate/compiled/mixed.py @@ -197,7 +197,7 @@ def _find_syntax_node_name(evaluator, access): def _create(evaluator, access, parent_context=None, *args): tree_node, path = _find_syntax_node_name(evaluator, access) - compiled_object = compiled.create_from_access( + compiled_object = compiled.create_cached_compiled_object( evaluator, access, parent_context=parent_context.compiled_object) if tree_node is None: return compiled_object