+(cl:defpackage #:sod-exports
+ (:use #:common-lisp))
+
+(cl:in-package #:sod-exports)
+
(defun symbolicate (&rest things)
(intern (apply #'concatenate 'string (mapcar #'string things))))
(declare (ignore head tail))
nil))
-(defmethod form-list-exports ((head (eql 'export)) tail)
+(defmethod form-list-exports ((head (eql 'cl:export)) tail)
(let ((symbols (car tail)))
(if (and (consp symbols)
(eq (car symbols) 'quote))
(if (atom thing) (list thing) thing))
(incomprehensible-form head tail))))
-(defmethod form-list-exports ((head (eql 'definst)) tail)
+(defmethod form-list-exports ((head (eql 'sod:definst)) tail)
(destructuring-bind (code (streamvar &key export) args &body body) tail
(declare (ignore streamvar body))
(and export
(symbolicate 'inst- arg))
args)))))
-(defmethod form-list-exports ((head (eql 'define-tagged-type)) tail)
+(defmethod form-list-exports ((head (eql 'sod::define-tagged-type)) tail)
(destructuring-bind (kind what) tail
(declare (ignore what))
(list kind
(symbolicate 'c- kind '-type)
(symbolicate 'make- kind '-type))))
-(defmethod form-list-exports ((head (eql 'macrolet)) tail)
+(defmethod form-list-exports ((head (eql 'cl:macrolet)) tail)
(mapcan #'form-exports (cdr tail)))
-(defmethod form-list-exports ((head (eql 'eval-when)) tail)
+(defmethod form-list-exports ((head (eql 'cl:eval-when)) tail)
(mapcan #'form-exports (cdr tail)))
-(defmethod form-list-exports ((head (eql 'progn)) tail)
+(defmethod form-list-exports ((head (eql 'cl:progn)) tail)
(mapcan #'form-exports tail))
(defgeneric form-exports (form)
(defun find-symbol-homes (paths package)
(let* ((symbols (list-exported-symbols package))
- (exports-alist (mapcan #'list-exports paths))
+ (exports-alist (let ((*package* package))
+ (mapcan #'list-exports paths)))
(homes (make-hash-table :test #'equal)))
(dolist (assoc exports-alist)
(let ((home (car assoc)))
(analyse-generic-functions package)
(terpri))
+(export 'report-project-symbols)
(defun report-project-symbols ()
(labels ((components (comp)
(slot-value comp 'asdf::components))
(report-symbols (mapcar #'file-name parser-files) "SOD-PARSER")
(report-symbols (mapcar #'file-name (list optparse)) "OPTPARSE")
(report-symbols (mapcar #'file-name (list utilities)) "SOD-UTILITIES"))))
+
+#+interactive
+(with-open-file (*standard-output* #p"doc/SYMBOLS" :direction :output
+ :if-exists :supersede :if-does-not-exist :create)
+ (report-project-symbols))