Skip to content

Commit d6ac65e

Browse files
committed
Change subclasses command to display class hierarchy.
1 parent 676219e commit d6ac65e

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

deft-browse/deft-browse.dylan

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -210,34 +210,39 @@ define command inspect ($deft-commands)
210210
end;
211211

212212
define 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);
216216
end method;
217217

218218
define 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");
221221
end method;
222222

223223
define 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;
231236
end 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);
253261
end;

0 commit comments

Comments
 (0)