From ec76d57679bc39ad3f3e49bf0e067d34daebf761 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 7 Jan 2015 01:49:38 +0100 Subject: [PATCH] Start using names_dicts for completion as well. --- jedi/api/__init__.py | 17 ++--------------- jedi/evaluate/compiled/__init__.py | 8 +++++--- jedi/evaluate/representation.py | 12 ++++++++++-- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 07de6b1f..ddaba7de 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -242,23 +242,10 @@ class Script(object): for s in scopes: if s.isinstance(er.Function): 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: names = [] - for _, new_names in s.scope_names_generator(): - names += new_names + for names_dict in s.names_dicts(search_global=False): + names += chain.from_iterable(names_dict.values()) for c in names: completions.append((c, s)) diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index 55f74acf..2cd0bdad 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -256,6 +256,9 @@ class LazyNamesDict(object): def __init__(self, compiled_obj): self._compiled_obj = compiled_obj + def __iter__(self): + return (v[0].value for v in self.values()) + @memoize_method def __getitem__(self, name): try: @@ -266,10 +269,9 @@ class LazyNamesDict(object): def values(self): obj = self._compiled_obj.obj - names = dir(obj) values = [] - for name in names: + for name in dir(obj): try: values.append(self[name]) except KeyError: @@ -487,7 +489,7 @@ def _create_from_name(module, parent, name): builtin = Builtin(_builtins) magic_function_class = CompiledObject(type(load_module), parent=builtin) 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() none_obj = builtin.get_by_name('None') false_obj = builtin.get_by_name('False') diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index ab58f3aa..80fed2d5 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -309,6 +309,9 @@ class LazyInstanceDict(object): return [get_instance_el(self._evaluator, self._instance, var, True) for var in self._dct[name]] + def values(self): + return [self[key] for key in self._dct] + class InstanceName(pr.Name): def __init__(self, origin_name, parent): @@ -466,8 +469,12 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)): @memoize_default(default=()) def py__bases__(self, evaluator): - args = param.Arguments(self._evaluator, self.base.get_super_arglist() or ()) - return list(chain.from_iterable(args.eval_args())) + arglist = self.base.get_super_arglist() + if arglist: + args = param.Arguments(self._evaluator, arglist) + return list(chain.from_iterable(args.eval_args())) + else: + return [compiled.object_obj] def py__call__(self, evaluator, params): return [Instance(evaluator, self, params)] @@ -508,6 +515,7 @@ class Class(use_metaclass(CachedMetaClass, Wrapper)): yield self.names_dict else: for scope in self.py__mro__(self._evaluator): + print(scope) yield scope.names_dict def is_class(self):