(defpackage #:tempores.package-grapher
(:use #:cl))
(in-package #:tempores.package-grapher)
(defun get-dependencies (package)
(let ((source-package-name package)
(package (find-package package)))
(remove-duplicates
(stable-sort
(loop for x being the symbols in package
unless (eq package (symbol-package x))
collect (list source-package-name
(alexandria:make-keyword (package-name (symbol-package x)))))
#'string<
:key #'cadr)
:test 'equal)))
(defun get-all-dependencies (packages)
(stable-sort
(loop for package in packages
nconc (get-dependencies package))
#'string<
:key #'cadr))
(defun make-graph-conns (conns)
(format nil "~:{~4t~(\"~a\" -> \"~a\"~%~)~}" conns))
(defun make-graph (conns)
(format nil "digraph {~%~a~%}~%" (make-graph-conns conns)))
(defun graph-packages (packages)
(make-graph (get-all-dependencies packages)))
(defun graph-tempores-packages ()
(graph-packages tempores.packages:*tempores-packages*))
|