示例#1
0
文件: __init__.py 项目: Axure/jedi
    def _prepare_goto(self, goto_path, is_completion=False):
        """
        Base for completions/goto. Basically it returns the resolved scopes
        under cursor.
        """
        debug.dbg('start: %s in %s', goto_path, self._parser.user_scope())

        user_stmt = self._parser.user_stmt_with_whitespace()
        if not user_stmt and len(goto_path.split('\n')) > 1:
            # If the user_stmt is not defined and the goto_path is multi line,
            # something's strange. Most probably the backwards tokenizer
            # matched to much.
            return []

        if isinstance(user_stmt, pr.Import):
            i, _ = helpers.get_on_import_stmt(self._evaluator, self._user_context,
                                              user_stmt, is_completion)
            if i is None:
                return []
            scopes = [i]
        else:
            # just parse one statement, take it and evaluate it
            eval_stmt = self._get_under_cursor_stmt(goto_path)
            if eval_stmt is None:
                return []

            module = self._parser.module()
            names, level, _, _ = helpers.check_error_statements(module, self._pos)
            if names:
                i = imports.get_importer(self._evaluator, names, module, level)
                return i.follow(self._evaluator)

            scopes = self._evaluator.eval_element(eval_stmt)

        return scopes
示例#2
0
文件: __init__.py 项目: aroba12/jedi
    def _prepare_goto(self, goto_path, is_completion=False):
        """
        Base for completions/goto. Basically it returns the resolved scopes
        under cursor.
        """
        debug.dbg('start: %s in %s', goto_path, self._parser.user_scope())

        user_stmt = self._parser.user_stmt_with_whitespace()
        if not user_stmt and len(goto_path.split('\n')) > 1:
            # If the user_stmt is not defined and the goto_path is multi line,
            # something's strange. Most probably the backwards tokenizer
            # matched to much.
            return []

        if isinstance(user_stmt, pr.Import):
            scopes = [
                helpers.get_on_import_stmt(self._evaluator, self._user_context,
                                           user_stmt, is_completion)[0]
            ]
        else:
            # just parse one statement, take it and evaluate it
            eval_stmt = self._get_under_cursor_stmt(goto_path)
            if eval_stmt is None:
                return []

            module = self._parser.module()
            names, level, _, _ = helpers.check_error_statements(
                module, self._pos)
            if names:
                i = imports.get_importer(self._evaluator, names, module, level)
                return i.follow(self._evaluator)

            scopes = self._evaluator.eval_statement(eval_stmt)

        return scopes
示例#3
0
 def _follow_statements_imports(self):
     # imports completion is very complicated and needs to be treated
     # separately in Completion.
     if self._definition.isinstance(
             pr.Import) and self._definition.alias is None:
         i = imports.ImportPath(self._evaluator, self._definition, True)
         import_path = i.import_path + (unicode(self._name), )
         return imports.get_importer(self._evaluator, import_path,
                                     i._importer.module).follow(
                                         self._evaluator)
     return super(Completion, self)._follow_statements_imports()
示例#4
0
 def _follow_statements_imports(self):
     # imports completion is very complicated and needs to be treated
     # separately in Completion.
     if self._definition.isinstance(pr.Import) and self._definition.alias is None:
         i = imports.ImportWrapper(self._evaluator, self._definition, True)
         import_path = i.import_path + (unicode(self._name),)
         try:
             return imports.get_importer(self._evaluator, import_path,
                                         i._importer.module).follow(self._evaluator)
         except imports.ModuleNotFound:
             pass
     return super(Completion, self)._follow_statements_imports()
示例#5
0
文件: __init__.py 项目: aroba12/jedi
        def get_completions(user_stmt, bs):
            # TODO this closure is ugly. it also doesn't work with
            # simple_complete (used for Interpreter), somehow redo.
            module = self._parser.module()
            names, level, only_modules, unfinished_dotted = \
                helpers.check_error_statements(module, self._pos)
            completion_names = []
            if names is not None:
                imp_names = [n for n in names if n.end_pos < self._pos]
                i = imports.get_importer(self._evaluator, imp_names, module,
                                         level)
                completion_names = i.completion_names(self._evaluator,
                                                      only_modules)

            # TODO this paragraph is necessary, but not sure it works.
            context = self._user_context.get_context()
            if not next(context).startswith('.'):  # skip the path
                if next(context) == 'from':
                    # completion is just "import" if before stands from ..
                    if unfinished_dotted:
                        return completion_names
                    else:
                        return keywords.keyword_names('import')

            if isinstance(user_stmt, pr.Import):
                module = self._parser.module()
                completion_names += imports.completion_names(
                    self._evaluator, user_stmt, self._pos)
                return completion_names

            if names is None and not isinstance(user_stmt, pr.Import):
                if not path and not dot:
                    # add keywords
                    completion_names += keywords.keyword_names(all=True)
                    # TODO delete? We should search for valid parser
                    # transformations.
                completion_names += self._simple_complete(path, dot, like)
            return completion_names
示例#6
0
文件: __init__.py 项目: Axure/jedi
        def get_completions(user_stmt, bs):
            # TODO this closure is ugly. it also doesn't work with
            # simple_complete (used for Interpreter), somehow redo.
            module = self._parser.module()
            names, level, only_modules, unfinished_dotted = \
                helpers.check_error_statements(module, self._pos)
            completion_names = []
            if names is not None:
                imp_names = [n for n in names if n.end_pos < self._pos]
                i = imports.get_importer(self._evaluator, imp_names, module, level)
                completion_names = i.completion_names(self._evaluator, only_modules)

            # TODO this paragraph is necessary, but not sure it works.
            context = self._user_context.get_context()
            if not next(context).startswith('.'):  # skip the path
                if next(context) == 'from':
                    # completion is just "import" if before stands from ..
                    if unfinished_dotted:
                        return completion_names
                    else:
                        return keywords.keyword_names('import')

            if isinstance(user_stmt, pr.Import):
                module = self._parser.module()
                completion_names += imports.completion_names(self._evaluator,
                                                             user_stmt, self._pos)
                return completion_names

            if names is None and not isinstance(user_stmt, pr.Import):
                if not path and not dot:
                    # add keywords
                    completion_names += keywords.keyword_names(all=True)
                    # TODO delete? We should search for valid parser
                    # transformations.
                completion_names += self._simple_complete(path, dot, like)
            return completion_names