import rope.base.oi.soi from rope.base import pynames from rope.base.pynames import * class AssignedName(pynames.AssignedName): def __init__(self, lineno=None, module=None, pyobject=None): self.lineno = lineno self.module = module self.assignments = [] self.pyobject = _Inferred( self._get_inferred, pynames._get_concluded_data(module) ) self.pyobject.set(pyobject) @utils.prevent_recursion(lambda: None) def _get_inferred(self): if self.module is not None: return rope.base.oi.soi.infer_assigned_object(self) def get_object(self): return self.pyobject.get() def get_definition_location(self): """Returns a (module, lineno) tuple""" if self.lineno is None and self.assignments: try: self.lineno = self.assignments[0].get_lineno() except AttributeError: pass return (self.module, self.lineno) def invalidate(self): """Forget the `PyObject` this `PyName` holds""" self.pyobject.set(None) class ParameterName(pynames.ParameterName): def __init__(self, pyfunction, index): self.pyfunction = pyfunction self.index = index def get_object(self): result = self.pyfunction.get_parameter(self.index) if result is None: result = rope.base.pyobjects.get_unknown() return result def get_objects(self): """Returns the list of objects passed as this parameter""" return rope.base.oi.soi.get_passed_objects(self.pyfunction, self.index) def get_definition_location(self): return (self.pyfunction.get_module(), self.pyfunction.get_ast().lineno) _Inferred = pynames._Inferred