utilities.print-tree
2022-11-07
This system provides simple facilities for printing tree structures.
Upstream URL
Author
Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
Maintainer
Jan Moringen <jmoringe@techfak.uni-bielefeld.de>
License
LLGPLv3
utilities.print-tree README
1Introduction
Theutilities.print-tree
system provides simple facilities forprinting tree structures in an easy to read way using either ASCIIor Unicode characters to render the parent-child relations. Onefocus is playing nicely with pretty printing.https://travis-ci.org/scymtym/utilities.print-tree.svgThe following example shows the result of printing the
utilities.print-tree
ASDF system without and with additional
details added to nodes:
utilities.print-tree ├─src │ ├─package │ └─print-tree └─README.orgNote how pretty-printing of the "Depends-on" entry works seamlesslywith tree printing:
utilities.print-tree │ Pathname /home/jmoringe/code/cl/utilities.print-tree/ │ Encoding UTF-8 │ Depends-on ((#<LOAD-OP > #<MODULE "utilities.print-tree" "src"> │ #<STATIC-FILE "utilities.print-tree" "README.org">) │ (PREPARE-OP #<SYSTEM "utilities.print-tree">) │ (COMPILE-OP #<SYSTEM "utilities.print-tree">)) ├─src │ │ Pathname /home/jmoringe/code/cl/utilities.print-tree/src/ │ │ Encoding UTF-8 │ │ Depends-on ((#<LOAD-OP > │ │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "package"> │ │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "print-tree">) │ │ (PREPARE-OP #<MODULE "utilities.print-tree" "src">) │ │ (COMPILE-OP #<MODULE "utilities.print-tree" "src">)) │ ├─package │ │ Pathname /home/jmoringe/code/cl/utilities.print-tree/src/package.lisp │ │ Encoding UTF-8 │ │ Depends-on ((PREPARE-OP │ │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "package">) │ │ (COMPILE-OP │ │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "package">)) │ └─print-tree │ Pathname /home/jmoringe/code/cl/utilities.print-tree/src/print-tree.lisp │ Encoding UTF-8 │ Depends-on ((PREPARE-OP │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "print-tree">) │ (COMPILE-OP │ #<CL-SOURCE-FILE "utilities.print-tree" "src" "print-tree">)) └─README.org Pathname /home/jmoringe/code/cl/utilities.print-tree/README.org Encoding UTF-8 Depends-on ((PREPARE-OP #<STATIC-FILE "utilities.print-tree" "README.org">) (COMPILE-OP #<STATIC-FILE "utilities.print-tree" "README.org">))
The following code produces this output:
(defmethod print-component ((target stream) (depth t) (component asdf:component))
(princ (asdf:component-name component) target))
(defmethod print-details ((target stream) (depth t) (component asdf:component))
(format target "Pathname ~A~@:_~
Encoding ~A~@:_~
Depends-on ~A"
(asdf:component-pathname component)
(asdf:component-encoding component)
(asdf:component-depends-on 'asdf:load-op component)))
(defmethod asdf:component-children ((component t))
'())
(labels ((do-it (details?)
(fresh-line)
(terpri)
(print-tree *standard-output* (asdf:find-system :utilities.print-tree)
(make-node-printer #'print-component
(when details? #'print-details)
#'asdf:component-children))))
(do-it nil)
(do-it t))
The full code of this example is available in file:examples/asdf.lisp.