1
0
forked from VimPlug/jedi

Refactor a bit more and remove the parent_context parameter from create_from_access

This commit is contained in:
Dave Halter
2017-11-29 00:24:28 +01:00
parent 187a523e05
commit ba0768bab6
2 changed files with 23 additions and 33 deletions
+22 -32
View File
@@ -493,7 +493,7 @@ def _create_from_name(evaluator, compiled_object, name):
pass pass
access = compiled_object.access.getattr(name, default=None) 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 evaluator, access, parent_context=compiled_object, faked=faked
) )
@@ -520,11 +520,7 @@ _SPECIAL_OBJECTS = {
def get_special_object(evaluator, identifier): def get_special_object(evaluator, identifier):
obj = _SPECIAL_OBJECTS[identifier] obj = _SPECIAL_OBJECTS[identifier]
if identifier == 'BUILTINS': return create(evaluator, obj)
parent_context = None
else:
parent_context = create(evaluator, _builtins)
return create(evaluator, obj, parent_context=parent_context)
def _normalize_create_args(func): def _normalize_create_args(func):
@@ -534,43 +530,37 @@ def _normalize_create_args(func):
return wrapper return wrapper
def create(evaluator, obj, parent_context=None): def create(evaluator, obj):
if inspect.ismodule(obj):
if parent_context is not None:
# Modules don't have parents, be careful with caching: recurse.
return create(evaluator, obj)
return create_from_access( return create_from_access(
evaluator, create_access(evaluator, obj), parent_context evaluator, create_access(evaluator, obj)
) )
@evaluator_function_cache() @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. Returns a CompiledObject and tries to find fake modules.
""" """
if parent_context is None: access_tuples = access.get_access_path_tuples()
access_tuples = access.get_access_path_tuples() if access_tuples:
if access_tuples: string_names, accesses = zip(*access_tuples)
string_names, accesses = zip(*access_tuples) try:
try: tree_nodes = fake.get_faked_tree_nodes(evaluator.latest_grammar, string_names)
tree_nodes = fake.get_faked_tree_nodes(evaluator.latest_grammar, string_names) except fake.FakeDoesNotExist:
except fake.FakeDoesNotExist: pass
pass else:
else: parent_context = None
for access2, tree_node in zip(accesses, tree_nodes): for access2, tree_node in zip(accesses, tree_nodes):
parent_context = _create_cached_compiled_object( parent_context = create_cached_compiled_object(
evaluator, access2, parent_context, faked=tree_node evaluator, access2, parent_context, faked=tree_node
) )
return parent_context return parent_context
parent_context = create(evaluator, _builtins) parent_context = create(evaluator, _builtins)
return _create_cached_compiled_object(evaluator, access, parent_context) return create_cached_compiled_object(evaluator, access, parent_context)
return _create_cached_compiled_object(evaluator, access, parent_context)
@_normalize_create_args @_normalize_create_args
@evaluator_function_cache() @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) return CompiledObject(evaluator, access, parent_context, faked)
+1 -1
View File
@@ -197,7 +197,7 @@ def _find_syntax_node_name(evaluator, access):
def _create(evaluator, access, parent_context=None, *args): def _create(evaluator, access, parent_context=None, *args):
tree_node, path = _find_syntax_node_name(evaluator, access) 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) evaluator, access, parent_context=parent_context.compiled_object)
if tree_node is None: if tree_node is None:
return compiled_object return compiled_object