Example #1
0
File: __init__.py Project: ABob/vim
    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
Example #2
0
    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
Example #4
0
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)]
Example #5
0
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
Example #10
0
  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