1
0
forked from VimPlug/jedi

Start using names_dicts for completion as well.

This commit is contained in:
Dave Halter
2015-01-07 01:49:38 +01:00
parent 494a3e3307
commit ec76d57679
3 changed files with 17 additions and 20 deletions

View File

@@ -242,23 +242,10 @@ class Script(object):
for s in scopes: for s in scopes:
if s.isinstance(er.Function): if s.isinstance(er.Function):
names = s.get_magic_function_names() names = s.get_magic_function_names()
elif isinstance(s, imports.ImportWrapper):
under = like + self._user_context.get_path_after_cursor()
if under == 'import':
current_line = self._user_context.get_position_line()
if not current_line.endswith('import import'):
continue
"""
a = s.import_stmt.alias
if a and a.start_pos <= self._pos <= a.end_pos:
continue
"""
# TODO what to do with this?
names = s.get_defined_names(on_import_stmt=True)
else: else:
names = [] names = []
for _, new_names in s.scope_names_generator(): for names_dict in s.names_dicts(search_global=False):
names += new_names names += chain.from_iterable(names_dict.values())
for c in names: for c in names:
completions.append((c, s)) completions.append((c, s))

View File

@@ -256,6 +256,9 @@ class LazyNamesDict(object):
def __init__(self, compiled_obj): def __init__(self, compiled_obj):
self._compiled_obj = compiled_obj self._compiled_obj = compiled_obj
def __iter__(self):
return (v[0].value for v in self.values())
@memoize_method @memoize_method
def __getitem__(self, name): def __getitem__(self, name):
try: try:
@@ -266,10 +269,9 @@ class LazyNamesDict(object):
def values(self): def values(self):
obj = self._compiled_obj.obj obj = self._compiled_obj.obj
names = dir(obj)
values = [] values = []
for name in names: for name in dir(obj):
try: try:
values.append(self[name]) values.append(self[name])
except KeyError: except KeyError:
@@ -487,7 +489,7 @@ def _create_from_name(module, parent, name):
builtin = Builtin(_builtins) builtin = Builtin(_builtins)
magic_function_class = CompiledObject(type(load_module), parent=builtin) magic_function_class = CompiledObject(type(load_module), parent=builtin)
generator_obj = CompiledObject(_a_generator(1.0)) generator_obj = CompiledObject(_a_generator(1.0))
type_names = [] # Need this, because it's return in get_defined_names. type_names = [] # Need this, because its part of the result of get_defined_names.
type_names = builtin.get_by_name('type').get_defined_names() type_names = builtin.get_by_name('type').get_defined_names()
none_obj = builtin.get_by_name('None') none_obj = builtin.get_by_name('None')
false_obj = builtin.get_by_name('False') false_obj = builtin.get_by_name('False')

View File

@@ -309,6 +309,9 @@ class LazyInstanceDict(object):
return [get_instance_el(self._evaluator, self._instance, var, True) return [get_instance_el(self._evaluator, self._instance, var, True)
for var in self._dct[name]] for var in self._dct[name]]
def values(self):
return [self[key] for key in self._dct]
class InstanceName(pr.Name): class InstanceName(pr.Name):
def __init__(self, origin_name, parent): def __init__(self, origin_name, parent):
@@ -466,8 +469,12 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)):
@memoize_default(default=()) @memoize_default(default=())
def py__bases__(self, evaluator): def py__bases__(self, evaluator):
args = param.Arguments(self._evaluator, self.base.get_super_arglist() or ()) arglist = self.base.get_super_arglist()
if arglist:
args = param.Arguments(self._evaluator, arglist)
return list(chain.from_iterable(args.eval_args())) return list(chain.from_iterable(args.eval_args()))
else:
return [compiled.object_obj]
def py__call__(self, evaluator, params): def py__call__(self, evaluator, params):
return [Instance(evaluator, self, params)] return [Instance(evaluator, self, params)]
@@ -508,6 +515,7 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)):
yield self.names_dict yield self.names_dict
else: else:
for scope in self.py__mro__(self._evaluator): for scope in self.py__mro__(self._evaluator):
print(scope)
yield scope.names_dict yield scope.names_dict
def is_class(self): def is_class(self):