1
0
forked from VimPlug/jedi

Further improvements to the interpreter refactoring.

This commit is contained in:
Dave Halter
2016-05-19 01:41:06 +02:00
parent 1bb8d32084
commit a08ad2d53d
3 changed files with 18 additions and 6 deletions

View File

@@ -18,13 +18,17 @@ from jedi.evaluate import iterable
from jedi.evaluate.compiled import mixed from jedi.evaluate.compiled import mixed
def add_namespaces_to_parser(evaluator, namespaces, parser_module): def add_namespaces_to_parser(evaluator, namespace_dicts, parser_module):
for namespace in namespaces: for dct in namespace_dicts:
for key, value in namespace.items(): namespace = compiled.CompiledObject(evaluator, type('namespace', (), dct))
for key, value in dct.items():
# Name lookups in an ast tree work by checking names_dict. # Name lookups in an ast tree work by checking names_dict.
# Therefore we just add fake names to that and we're done. # Therefore we just add fake names to that and we're done.
arr = parser_module.names_dict.setdefault(key, []) arr = parser_module.names_dict.setdefault(key, [])
arr.append(LazyName(evaluator, parser_module, key, value)) name = mixed.MixedName(evaluator, namespace, key)
arr.append(name)
#arr.append(LazyName(evaluator, parser_module, key, value))
class LazyName(helpers.FakeName): class LazyName(helpers.FakeName):

View File

@@ -56,7 +56,15 @@ class MixedName(compiled.CompiledName):
@parent.setter @parent.setter
def parent(self, value): def parent(self, value):
pass # Just ignore this, FakeName tries to overwrite the parent attribute. pass # Just ignore this, Name tries to overwrite the parent attribute.
@property
def start_pos(self):
if isinstance(self.parent, MixedObject):
return self.parent.node_name.start_pos
# This means a start_pos that doesn't exist (compiled objects).
return (0, 0)
class LazyMixedNamesDict(compiled.LazyNamesDict): class LazyMixedNamesDict(compiled.LazyNamesDict):

View File

@@ -47,7 +47,7 @@ def test_nested_resolve():
cls = get_completion('X', locals()) cls = get_completion('X', locals())
func = get_completion('X.x', locals()) func = get_completion('X.x', locals())
assert func.start_pos == (func.start_pos[0] + 1, 8) assert func.start_pos == (cls.start_pos[0] + 1, 12)
def test_side_effect_completion(): def test_side_effect_completion():