def _simple_complete(self, path, dot, like): if not path and not dot: scope = self._parser.user_scope() if not scope.is_scope(): # Might be a flow (if/while/etc). scope = scope.get_parent_scope() names_dicts = global_names_dict_generator( self._evaluator, self._evaluator.wrap(scope), self._pos ) completion_names = [] for names_dict, pos in names_dicts: names = list(chain.from_iterable(names_dict.values())) if not names: continue completion_names += filter_definition_names(names, self._parser.user_stmt(), pos) elif self._get_under_cursor_stmt(path) is None: return [] else: scopes = list(self._prepare_goto(path, True)) completion_names = [] debug.dbg('possible completion scopes: %s', scopes) for s in scopes: names = [] for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) completion_names += filter_definition_names(names, self._parser.user_stmt()) return completion_names
def _simple_complete(self, path, dot, like): if not path and not dot: scope = self._parser.user_scope() if not scope.is_scope(): # Might be a flow (if/while/etc). scope = scope.get_parent_scope() names_dicts = global_names_dict_generator( self._evaluator, self._evaluator.wrap(scope), self._pos) completion_names = [] for names_dict, pos in names_dicts: names = list(chain.from_iterable(names_dict.values())) if not names: continue completion_names += filter_definition_names( names, self._parser.user_stmt(), pos) elif self._get_under_cursor_stmt(path) is None: return [] else: scopes = list(self._prepare_goto(path, True)) completion_names = [] debug.dbg('possible completion scopes: %s', scopes) for s in scopes: names = [] for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) completion_names += filter_definition_names( names, self._parser.user_stmt()) return completion_names
def completion_names(self, evaluator, only_modules=False): """ :param only_modules: Indicates wheter it's possible to import a definition that is not defined in a module. """ from jedi.evaluate import finder names = [] if self.import_path: # flask if self.str_import_path == ('flask', 'ext'): # List Flask extensions like ``flask_foo`` for mod in self._get_module_names(): modname = str(mod) if modname.startswith('flask_'): extname = modname[len('flask_'):] names.append(self._generate_name(extname)) # Now the old style: ``flaskext.foo`` for dir in self.sys_path_with_modifications(): flaskext = os.path.join(dir, 'flaskext') if os.path.isdir(flaskext): names += self._get_module_names([flaskext]) for scope in self.follow(): # Non-modules are not completable. if not scope.type == 'file_input': # not a module continue # namespace packages if isinstance(scope, tree.Module) and scope.path.endswith('__init__.py'): paths = scope.py__path__(self.sys_path_with_modifications()) names += self._get_module_names(paths) if only_modules: # In the case of an import like `from x.` we don't need to # add all the variables. if ('os',) == self.str_import_path and not self.level: # os.path is a hardcoded exception, because it's a # ``sys.modules`` modification. names.append(self._generate_name('path')) continue for names_dict in scope.names_dicts(search_global=False): _names = list(chain.from_iterable(names_dict.values())) if not _names: continue _names = finder.filter_definition_names(_names, scope) names += _names else: # Empty import path=completion after import if not self.level: names += self._get_module_names() if self.file_path is not None: path = os.path.abspath(self.file_path) for i in range(self.level - 1): path = os.path.dirname(path) names += self._get_module_names([path]) return names
def defined_names(evaluator, scope): """ List sub-definitions (e.g., methods in class). :type scope: Scope :rtype: list of Definition """ dct = scope.names_dict names = list(chain.from_iterable(dct.values())) names = filter_definition_names(names, scope) return [Definition(evaluator, d) for d in sorted(names, key=lambda s: s.start_pos)]
def _trailer_completions(self, atom_expr): scopes = self._evaluator.eval_element(atom_expr) completion_names = [] debug.dbg('trailer completion scopes: %s', scopes) for s in scopes: names = [] for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) completion_names += filter_definition_names( names, self._module.get_statement_for_position(self._position)) return completion_names
def _trailer_completions(self, atom_expr): scopes = self._evaluator.eval_element(atom_expr) completion_names = [] debug.dbg('trailer completion scopes: %s', scopes) for s in scopes: names = [] for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) completion_names += filter_definition_names( names, self._module.get_statement_for_position(self._position) ) return completion_names
def _global_completions(self): scope = get_user_scope(self._module, self._position) if not scope.is_scope(): # Might be a flow (if/while/etc). scope = scope.get_parent_scope() scope = self._evaluator.wrap(scope) debug.dbg('global completion scope: %s', scope) names_dicts = global_names_dict_generator(self._evaluator, scope, self._position) completion_names = [] for names_dict, pos in names_dicts: names = list(chain.from_iterable(names_dict.values())) if not names: continue completion_names += filter_definition_names( names, self._module.get_statement_for_position(self._position), pos) return completion_names
def _global_completions(self): scope = get_user_scope(self._module, self._position) if not scope.is_scope(): # Might be a flow (if/while/etc). scope = scope.get_parent_scope() scope = self._evaluator.wrap(scope) debug.dbg('global completion scope: %s', scope) names_dicts = global_names_dict_generator( self._evaluator, scope, self._position ) completion_names = [] for names_dict, pos in names_dicts: names = list(chain.from_iterable(names_dict.values())) if not names: continue completion_names += filter_definition_names( names, self._module.get_statement_for_position(self._position), pos ) return completion_names
def names_in_module(self, module_name): try: _import_module(module_name) except Exception as e: pp.pprint(e) return [] imp = Importer( self._script._evaluator, [FakeName('.'.join(module_name))], self._module, 0) try: scope_set = imp.follow() except Exception as e: # print('Error "{}" in {}, ignoring...'.format(e, module_name)) return [] all_names = [] for s in scope_set: names = [] for names_dict in s.names_dicts(search_global=False): names += chain.from_iterable(names_dict.values()) all_names += finder.filter_definition_names(names, self._module) return all_names