コード例 #1
0
ファイル: soi.py プロジェクト: Marslo/VimConfig
def _infer_returned(pyobject, args):
    if args:
        # HACK: Setting parameter objects manually
        # This is not thread safe and might cause problems if `args`
        # does not come from a good call site
        pyobject.get_scope().invalidate_data()
        pyobject._set_parameter_pyobjects(
            args.get_arguments(pyobject.get_param_names(special_args=False)))
    scope = pyobject.get_scope()
    if not scope._get_returned_asts():
        return
    maxtries = 3
    for returned_node in reversed(scope._get_returned_asts()[-maxtries:]):
        try:
            resulting_pyname = evaluate.eval_node(scope, returned_node)
            if resulting_pyname is None:
                continue
            pyobject = resulting_pyname.get_object()
            if pyobject == rope.base.pyobjects.get_unknown():
                continue
            if not scope._is_generator():
                return pyobject
            else:
                return rope.base.builtins.get_generator(pyobject)
        except rope.base.pyobjects.IsBeingInferredError:
            pass
コード例 #2
0
 def _evaluate_assign_value(self, node, nodes, type_hint=False):
     for subscript, levels in nodes:
         instance = evaluate.eval_node(self.scope, subscript.value)
         args_pynames = [evaluate.eval_node(self.scope,
                                            subscript.slice)]
         value = rope.base.oi.soi._infer_assignment(
             rope.base.pynames.AssignmentValue(node.value, levels,
                                               type_hint=type_hint),
             self.pymodule)
         args_pynames.append(rope.base.pynames.UnboundName(value))
         if instance is not None and value is not None:
             pyobject = instance.get_object()
             if '__setitem__' in pyobject:
                 pyfunction = pyobject['__setitem__'].get_object()
                 args = arguments.ObjectArguments([instance] + args_pynames)
                 self._call(pyfunction, args)
コード例 #3
0
def _infer_returned(pyobject, args):
    if args:
        # HACK: Setting parameter objects manually
        # This is not thread safe and might cause problems if `args`
        # does not come from a good call site
        pyobject.get_scope().invalidate_data()
        pyobject._set_parameter_pyobjects(
            args.get_arguments(pyobject.get_param_names(special_args=False)))
    scope = pyobject.get_scope()
    if not scope._get_returned_asts():
        return
    maxtries = 3
    for returned_node in reversed(scope._get_returned_asts()[-maxtries:]):
        try:
            resulting_pyname = evaluate.eval_node(scope, returned_node)
            if resulting_pyname is None:
                continue
            pyobject = resulting_pyname.get_object()
            if pyobject == rope.base.pyobjects.get_unknown():
                continue
            if not scope._is_generator():
                return pyobject
            else:
                return rope.base.builtins.get_generator(pyobject)
        except rope.base.pyobjects.IsBeingInferredError:
            pass
コード例 #4
0
ファイル: finderrors.py プロジェクト: climbus/rope
 def _Attribute(self, node):
     if not isinstance(node.ctx, ast.Store):
         scope = self.scope.get_inner_scope_for_line(node.lineno)
         pyname = evaluate.eval_node(scope, node.value)
         if pyname is not None and pyname.get_object() != pyobjects.get_unknown():
             if node.attr not in pyname.get_object():
                 self._add_error(node, "Unresolved attribute")
     ast.walk(node.value, self)
コード例 #5
0
ファイル: finderrors.py プロジェクト: ArthurChiao/vim_awesome
 def _Attribute(self, node):
     if not isinstance(node.ctx, ast.Store):
         scope = self.scope.get_inner_scope_for_line(node.lineno)
         pyname = evaluate.eval_node(scope, node.value)
         if pyname is not None and \
            pyname.get_object() != pyobjects.get_unknown():
             if node.attr not in pyname.get_object():
                 self._add_error(node, 'Unresolved attribute')
     ast.walk(node.value, self)
コード例 #6
0
 def _evaluate_node(self, pymodule, node):
     scope = pymodule.get_scope().get_inner_scope_for_line(node.lineno)
     expression = node
     if isinstance(expression, ast.Name) and isinstance(expression.ctx, ast.Store):
         start, end = patchedast.node_region(expression)
         text = pymodule.source_code[start:end]
         return evaluate.eval_str(scope, text)
     else:
         return evaluate.eval_node(scope, expression)
コード例 #7
0
ファイル: wildcards.py プロジェクト: 0Chuzz/python-mode
 def _evaluate_node(self, pymodule, node):
     scope = pymodule.get_scope().get_inner_scope_for_line(node.lineno)
     expression = node
     if isinstance(expression, ast.Name) and \
        isinstance(expression.ctx, ast.Store):
         start, end = patchedast.node_region(expression)
         text = pymodule.source_code[start:end]
         return evaluate.eval_str(scope, text)
     else:
         return evaluate.eval_node(scope, expression)
コード例 #8
0
ファイル: soa.py プロジェクト: 0Chuzz/python-mode
 def _Assign(self, node):
     for child in rope.base.ast.get_child_nodes(node):
         rope.base.ast.walk(child, self)
     visitor = _SOAAssignVisitor()
     nodes = []
     for child in node.targets:
         rope.base.ast.walk(child, visitor)
         nodes.extend(visitor.nodes)
     for subscript, levels in nodes:
         instance = evaluate.eval_node(self.scope, subscript.value)
         args_pynames = []
         args_pynames.append(evaluate.eval_node(self.scope,
                                                subscript.slice.value))
         value = rope.base.oi.soi._infer_assignment(
             rope.base.pynames.AssignmentValue(node.value, levels), self.pymodule)
         args_pynames.append(rope.base.pynames.UnboundName(value))
         if instance is not None and value is not None:
             pyobject = instance.get_object()
             if '__setitem__' in pyobject:
                 pyfunction = pyobject['__setitem__'].get_object()
                 args = arguments.ObjectArguments([instance] + args_pynames)
                 self._call(pyfunction, args)
コード例 #9
0
ファイル: soa.py プロジェクト: calpe20/PYTHONIZANDO
 def _Assign(self, node):
     for child in rope.base.ast.get_child_nodes(node):
         rope.base.ast.walk(child, self)
     visitor = _SOAAssignVisitor()
     nodes = []
     for child in node.targets:
         rope.base.ast.walk(child, visitor)
         nodes.extend(visitor.nodes)
     for subscript, levels in nodes:
         instance = evaluate.eval_node(self.scope, subscript.value)
         args_pynames = []
         args_pynames.append(
             evaluate.eval_node(self.scope, subscript.slice.value))
         value = rope.base.oi.soi._infer_assignment(
             rope.base.pynames.AssignmentValue(node.value, levels),
             self.pymodule)
         args_pynames.append(rope.base.pynames.UnboundName(value))
         if instance is not None and value is not None:
             pyobject = instance.get_object()
             if '__setitem__' in pyobject:
                 pyfunction = pyobject['__setitem__'].get_object()
                 args = arguments.ObjectArguments([instance] + args_pynames)
                 self._call(pyfunction, args)
コード例 #10
0
ファイル: soi.py プロジェクト: Marslo/VimConfig
def _follow_pyname(assignment, pymodule, lineno=None):
    assign_node = assignment.ast_node
    if lineno is None:
        lineno = _get_lineno_for_node(assign_node)
    holding_scope = pymodule.get_scope().get_inner_scope_for_line(lineno)
    pyname = evaluate.eval_node(holding_scope, assign_node)
    if pyname is not None:
        result = pyname.get_object()
        if isinstance(result.get_type(), rope.base.builtins.Property) and \
           holding_scope.get_kind() == 'Class':
            arg = rope.base.pynames.UnboundName(
                rope.base.pyobjects.PyObject(holding_scope.pyobject))
            return pyname, result.get_type().get_property_object(
                arguments.ObjectArguments([arg]))
        return pyname, result
コード例 #11
0
def _follow_pyname(assignment, pymodule, lineno=None):
    assign_node = assignment.ast_node
    if lineno is None:
        lineno = _get_lineno_for_node(assign_node)
    holding_scope = pymodule.get_scope().get_inner_scope_for_line(lineno)
    pyname = evaluate.eval_node(holding_scope, assign_node)
    if pyname is not None:
        result = pyname.get_object()
        if isinstance(result.get_type(), rope.base.builtins.Property) and \
           holding_scope.get_kind() == 'Class':
            arg = rope.base.pynames.UnboundName(
                rope.base.pyobjects.PyObject(holding_scope.pyobject))
            return pyname, result.get_type().get_property_object(
                arguments.ObjectArguments([arg]))
        return pyname, result