Now classes have links to their subclasses, so how about to add Module#descendents?
class X end class Y < X end class Z < Y end p X.descendents #=> [X, Y, Z] module A end module B include A end module C include A end p A.descendents #=> [A, C, B]
One of my own use cases is to implement AspectJ like pointcut which matches all subclasses of the given class.
- Should the return value of Module#descendents include self?
- Should the return value of Module#descendents include singleton classes?
I attach a patch, where the return value includes both self and singleton classes.