git.fiddlerwoaroof.com
Raw Blame History
(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*))