changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/doc/pkg.lisp

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
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
1
 ;;; lib/doc/pkg.lisp --- CL Documentation
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;; This package is designed to help us navigate our Lisp systems,
139
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
4
 ;; packages, symbols, and files to extract information relevant to
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
5
 ;; documentation. This is a rather broad category. Here are some of
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
6
 ;; the categories of information we're interested in:
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
8
 ;; - Comments :: like this one.
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
9
 #| or this one |#
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
10
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
11
 ;; - Docstrings :: typically store in symbol properties, documentation
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
12
 ;;   metaclass slot, etc. often found somewhere in the body of a form
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
13
 ;;   starting with DEF.
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
14
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
15
 ;; - Object Structure :: for functions - their declared type, for
266
7f2f5fc23e3a quick refresh comments2
Richard Westhaver <ellis@rwest.io>
parents: 265
diff changeset
16
 ;;   objects their slots, methods, sub/superclasses, allocation info,
7f2f5fc23e3a quick refresh comments2
Richard Westhaver <ellis@rwest.io>
parents: 265
diff changeset
17
 ;;   etc.
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
18
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
19
 ;; - Source :: the source code which defines a symbol and its
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
20
 ;;   file/line location.
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
21
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
22
 ;;; Commentary:
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
23
 
139
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
24
 ;; Documentation is a tricky craft, good thing we have a
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
25
 ;; self-documenting language :).
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
26
 
139
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
27
 ;; The API consists of extractors for the above categories of
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
28
 ;; information and a compiler (in comp.lisp) which can be used to
265
8116ba385ca6 quick refresh comments
Richard Westhaver <ellis@rwest.io>
parents: 264
diff changeset
29
 ;; generate documentation output.
139
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
30
 
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
31
 ;; This library DOES NOT implement export/publishing per se. We use
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
32
 ;; the ORGAN system to generate ORG-DOCUMENT objects, which themselves
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
33
 ;; implement the functionality needed to generate *.org files and
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
34
 ;; translate to html,pdf,txt and other formats.
3cbdbf6b62bb noodling around
ellis <ellis@rwest.io>
parents: 138
diff changeset
35
 
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
36
 ;;; Code:
145
baff44778a9c skel/core/vc impl
ellis <ellis@rwest.io>
parents: 139
diff changeset
37
 (eval-when (:compile-toplevel :load-toplevel) (require :sb-introspect))
baff44778a9c skel/core/vc impl
ellis <ellis@rwest.io>
parents: 139
diff changeset
38
 
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
39
 (defpackage :doc
262
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 263
diff changeset
43
    :system :component-pathname :find-system :system-description
Richard Westhaver <ellis@rwest.io>
parents: 263
diff changeset
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
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
52
   (:export
138
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
53
    :definition-specifier
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
54
    :find-definitions
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 263
diff changeset
59
    :doc-pathnames :doc-directories :doc-parse :doc-system :doc-dependencies :doc-dependents
138
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
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
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
76
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
77
 (in-package :doc)
138
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
78
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
79
 (defparameter *definition-types*
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
80
   '(:variable defvar
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
81
     :constant defconstant
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
82
     :type deftype
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
83
     :symbol-macro define-symbol-macro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
84
     :macro defmacro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
85
     :compiler-macro define-compiler-macro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
86
     :function defun
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
87
     :generic-function defgeneric
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
88
     :method defmethod
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
89
     :setf-expander define-setf-expander
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
90
     :structure defstruct
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
91
     :condition define-condition
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
92
     :class defclass
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
93
     :method-combination define-method-combination
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
94
     :package defpackage
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
95
     :transform :deftransform
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
96
     :optimizer :defoptimizer
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
97
     :vop :define-vop
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
98
     :source-transform :define-source-transform
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
99
     :ir1-convert :def-ir1-translator
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
100
     :declaration declaim
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
101
     :alien-type :define-alien-type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
102
   "Map SB-INTROSPECT definition type names to Slime-friendly forms")
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
103
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
104
 (defun definition-specifier (type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
105
   "Return a pretty specifier for NAME representing a definition of type TYPE."
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
106
   (getf *definition-types* type))
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
107
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
108
 (defun make-dspec (type name source-location)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
109
   (list* (definition-specifier type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
110
          name
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
111
          (sb-introspect::definition-source-description source-location)))
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
112
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
113
 (defun find-definitions (name)
262
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
114
   "Iterate over all type definitions returning two lists, DSPECs and DEFINITION-SOURCEs."
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
115
   (let ((dspecs) (defs))
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
116
     (loop for type in *definition-types* by #'cddr
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
117
           for defsrcs = (sb-introspect:find-definition-sources-by-name name type)
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
118
           do (loop for defsrc in defsrcs
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
119
                    do (push (make-dspec type name defsrc) dspecs)
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
120
                       (dolist (d (sb-introspect:find-definition-sources-by-name name type)) (push d defs))))
5673cd3f11e1 documentation system
Richard Westhaver <ellis@rwest.io>
parents: 145
diff changeset
121
     (values defs dspecs)))