changeset 266: | 7f2f5fc23e3a |
parent: | 8116ba385ca6 |
child: | 571685ae64f1 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 05 Apr 2024 21:18:54 -0400 |
permissions: | -rw-r--r-- |
description: | quick refresh comments2 |
137 | 1 | ;;; lib/doc/pkg.lisp --- CL Documentation |
2 | ||
3 | ;; This package is designed to help us navigate our Lisp systems, |
|
139 | 4 | ;; packages, symbols, and files to extract information relevant to |
137 | 5 | ;; documentation. This is a rather broad category. Here are some of |
6 | ;; the categories of information we're interested in: |
|
7 | ||
8 | ;; - Comments :: like this one. |
|
9 | #| or this one |# |
|
10 | ||
11 | ;; - Docstrings :: typically store in symbol properties, documentation |
|
12 | ;; metaclass slot, etc. often found somewhere in the body of a form |
|
13 | ;; starting with DEF. |
|
14 | ||
15 | ;; - Object Structure :: for functions - their declared type, for |
|
266 | 16 | ;; objects their slots, methods, sub/superclasses, allocation info, |
17 | ;; etc. |
|
137 | 18 | |
19 | ;; - Source :: the source code which defines a symbol and its |
|
20 | ;; file/line location. |
|
21 | ||
22 | ;;; Commentary: |
|
23 | ||
139 | 24 | ;; Documentation is a tricky craft, good thing we have a |
137 | 25 | ;; self-documenting language :). |
26 | ||
139 | 27 | ;; The API consists of extractors for the above categories of |
28 | ;; information and a compiler (in comp.lisp) which can be used to |
|
265 | 29 | ;; generate documentation output. |
139 | 30 | |
31 | ;; This library DOES NOT implement export/publishing per se. We use |
|
32 | ;; the ORGAN system to generate ORG-DOCUMENT objects, which themselves |
|
33 | ;; implement the functionality needed to generate *.org files and |
|
34 | ;; translate to html,pdf,txt and other formats. |
|
35 | ||
137 | 36 | ;;; Code: |
145 | 37 | (eval-when (:compile-toplevel :load-toplevel) (require :sb-introspect)) |
38 | ||
137 | 39 | (defpackage :doc |
262 | 40 | (:use :cl :std :organ :sb-mop :sb-introspect :obj/id :log) |
263
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
41 | (:import-from :uiop :string-prefix-p) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
42 | (:import-from :asdf :component-name :component-children |
264 | 43 | :system :component-pathname :find-system :system-description |
44 | :system-depends-on) |
|
263
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
45 | (:import-from :sb-c :packed-info :symbol-hash :symbol-dbinfo :vop-p :package-external-symbol-count) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
46 | (:import-from :sb-kernel :symbol-package-id) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
47 | (:import-from :sb-ext :restrict-compiler-policy) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
48 | (:import-from :ql-dist :dist :find-dist :provided-systems :installed-systems) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
49 | (:import-from :sb-impl :describe-block :print-standard-describe-header :describe-object) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
50 | (:import-from :sb-int :condition) |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
51 | (:import-from :sb-alien :alien-type-p) |
137 | 52 | (:export |
138 | 53 | :definition-specifier |
54 | :find-definitions |
|
55 | ;; err |
|
263
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
56 | :doc-error |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
57 | ;; methods |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
58 | :doc-file :doc-files :doc-symbol :doc-symbols :doc-package :doc-packages :doc-dist |
264 | 59 | :doc-pathnames :doc-directories :doc-parse :doc-system :doc-dependencies :doc-dependents |
138 | 60 | ;; symbol |
263
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
61 | :do-symbol* :classify-symbol :symbol-classification-string |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
62 | :symbol-documentation |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
63 | ;; package |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
64 | :package-documentation |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
65 | ;; file |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
66 | :define-source-file* :*source-file-types* |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
67 | :file-heading :file-headline :file-header :read-file-header |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
68 | :+max-heading-level+ :+min-heading-level+ |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
69 | :file-documentation |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
70 | ;; system |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
71 | :system-documentation |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
72 | ;; dist |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
73 | :dist-documentation |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
74 | ;; image |
b7183bfd7107
add doc/readme.txt, more doc upgrades
Richard Westhaver <ellis@rwest.io>
parents:
262
diff
changeset
|
75 | :image-documentation)) |
137 | 76 | |
77 | (in-package :doc) |
|
138 | 78 | |
79 | (defparameter *definition-types* |
|
80 | '(:variable defvar |
|
81 | :constant defconstant |
|
82 | :type deftype |
|
83 | :symbol-macro define-symbol-macro |
|
84 | :macro defmacro |
|
85 | :compiler-macro define-compiler-macro |
|
86 | :function defun |
|
87 | :generic-function defgeneric |
|
88 | :method defmethod |
|
89 | :setf-expander define-setf-expander |
|
90 | :structure defstruct |
|
91 | :condition define-condition |
|
92 | :class defclass |
|
93 | :method-combination define-method-combination |
|
94 | :package defpackage |
|
95 | :transform :deftransform |
|
96 | :optimizer :defoptimizer |
|
97 | :vop :define-vop |
|
98 | :source-transform :define-source-transform |
|
99 | :ir1-convert :def-ir1-translator |
|
100 | :declaration declaim |
|
101 | :alien-type :define-alien-type) |
|
102 | "Map SB-INTROSPECT definition type names to Slime-friendly forms") |
|
103 | ||
104 | (defun definition-specifier (type) |
|
105 | "Return a pretty specifier for NAME representing a definition of type TYPE." |
|
106 | (getf *definition-types* type)) |
|
107 | ||
108 | (defun make-dspec (type name source-location) |
|
109 | (list* (definition-specifier type) |
|
110 | name |
|
111 | (sb-introspect::definition-source-description source-location))) |
|
112 | ||
113 | (defun find-definitions (name) |
|
262 | 114 | "Iterate over all type definitions returning two lists, DSPECs and DEFINITION-SOURCEs." |
115 | (let ((dspecs) (defs)) |
|
116 | (loop for type in *definition-types* by #'cddr |
|
117 | for defsrcs = (sb-introspect:find-definition-sources-by-name name type) |
|
118 | do (loop for defsrc in defsrcs |
|
119 | do (push (make-dspec type name defsrc) dspecs) |
|
120 | (dolist (d (sb-introspect:find-definition-sources-by-name name type)) (push d defs)))) |
|
121 | (values defs dspecs))) |