@@ -210,34 +210,39 @@ define command inspect ($deft-commands)
210210end ;
211211
212212define method print-class-subclasses
213- (project :: <project-object>, object)
213+ (project :: <project-object>, object, depth :: <integer> , max-depth :: <integer> )
214214 let id = environment-object-id(project, object);
215215 format-out("%s is not a class.\n " , id.id-name);
216216end method ;
217217
218218define method print-class-subclasses
219- (project :: <project-object>, object == #f )
219+ (project :: <project-object>, object == #f , depth :: <integer> , max-depth :: <integer> )
220220 format-out("Object not found.\n " );
221221end method ;
222222
223223define method print-class-subclasses
224- (project :: <project-object>, object :: <class-object>)
224+ (project :: <project-object>, object :: <class-object>, depth :: <integer> , max-depth :: <integer> )
225225 let id = environment-object-id(project, object);
226226 let subclasses = class-direct-subclasses(project, object);
227227 for (sc in subclasses)
228228 let sc-id = environment-object-id(project, sc);
229- format-out("\t %s\n " , sc-id.id-name);
229+ // use 2 column indent, starting from column 2
230+ let indent = make (<byte-string> , size: (depth + 1 ) * 2 );
231+ format-out("%s%s\n " , indent, sc-id.id-name);
232+ if (depth < max-depth)
233+ print-class-subclasses(project, sc, depth + 1 , max-depth);
234+ end if ;
230235 end for ;
231236end method ;
232237
233- define function subclasses-for-class (name :: <string> )
238+ define function subclasses-for-class (name :: <string> , max-depth :: <integer> )
234239 let project = dylan-current-project($deft-context);
235240 if (project)
236241 let library = project-library(project);
237242 let object = find-environment-object(project, name,
238243 library: library ,
239244 module: first (library-modules(project, library )) );
240- print-class-subclasses(project, object);
245+ print-class-subclasses(project, object, 0 , max-depth );
241246 else
242247 format-out("No open project found.\n " );
243248 end if
@@ -248,6 +253,9 @@ define command subclasses ($deft-commands)
248253 simple parameter dylan-class-name :: <string> ,
249254 help: "the dylan class" ,
250255 required?: #t ;
256+ named parameter depth :: <integer> ,
257+ help: "the hierarchy depth" ,
258+ required?: #f ;
251259 implementation
252- subclasses-for-class(dylan-class-name);
260+ subclasses-for-class(dylan-class-name, if (depth) depth else 0 end );
253261end ;
0 commit comments