pynamesdef.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import rope.base.oi.soi
  2. from rope.base import pynames
  3. from rope.base.pynames import *
  4. class AssignedName(pynames.AssignedName):
  5. def __init__(self, lineno=None, module=None, pyobject=None):
  6. self.lineno = lineno
  7. self.module = module
  8. self.assignments = []
  9. self.pyobject = _Inferred(self._get_inferred,
  10. pynames._get_concluded_data(module))
  11. self.pyobject.set(pyobject)
  12. @utils.prevent_recursion(lambda: None)
  13. def _get_inferred(self):
  14. if self.module is not None:
  15. return rope.base.oi.soi.infer_assigned_object(self)
  16. def get_object(self):
  17. return self.pyobject.get()
  18. def get_definition_location(self):
  19. """Returns a (module, lineno) tuple"""
  20. if self.lineno is None and self.assignments:
  21. self.lineno = self.assignments[0].get_lineno()
  22. return (self.module, self.lineno)
  23. def invalidate(self):
  24. """Forget the `PyObject` this `PyName` holds"""
  25. self.pyobject.set(None)
  26. class ParameterName(pynames.ParameterName):
  27. def __init__(self, pyfunction, index):
  28. self.pyfunction = pyfunction
  29. self.index = index
  30. def get_object(self):
  31. result = self.pyfunction.get_parameter(self.index)
  32. if result is None:
  33. result = rope.base.pyobjects.get_unknown()
  34. return result
  35. def get_objects(self):
  36. """Returns the list of objects passed as this parameter"""
  37. return rope.base.oi.soi.get_passed_objects(
  38. self.pyfunction, self.index)
  39. def get_definition_location(self):
  40. return (self.pyfunction.get_module(), self.pyfunction.get_ast().lineno)
  41. _Inferred = pynames._Inferred