changelog shortlog graph tags branches changeset files file revisions raw help

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

changeset 138: 66691c807e97
parent: a067da6d51c1
child: 3cbdbf6b62bb
author: ellis <ellis@rwest.io>
date: Thu, 28 Dec 2023 01:18:31 -0500
permissions: -rw-r--r--
description: introspection
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,
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
4
 ;; packages, and files and extract information relevant to
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
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
16
 ;;   objects their slots, methods, sub/superclasses, etc (MOP).
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
17
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
18
 ;; - Source :: the source code which defines a symbol and its
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
19
 ;;   file/line location.
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
20
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
21
 ;;; Commentary:
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
22
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
23
 ;; Documentation is a tricky craft, good thingwe have a
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
24
 ;; self-documenting language :).
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
25
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
26
 ;;; Code:
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
27
 (defpackage :doc
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
28
   (:use :cl :std :organ :sb-mop :sb-introspect)
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
29
   (:export
138
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
30
    :definition-specifier
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
31
    :find-definitions
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
32
    ;; err
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
33
    :doc-error
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
34
    ;; symbol
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
35
    :do-symbol* :classify-symbol :symbol-classification-string))
137
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
36
 
a067da6d51c1 init doc system
ellis <ellis@rwest.io>
parents:
diff changeset
37
 (in-package :doc)
138
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
38
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
39
 (defparameter *definition-types*
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
40
   '(:variable defvar
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
41
     :constant defconstant
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
42
     :type deftype
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
43
     :symbol-macro define-symbol-macro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
44
     :macro defmacro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
45
     :compiler-macro define-compiler-macro
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
46
     :function defun
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
47
     :generic-function defgeneric
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
48
     :method defmethod
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
49
     :setf-expander define-setf-expander
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
50
     :structure defstruct
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
51
     :condition define-condition
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
52
     :class defclass
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
53
     :method-combination define-method-combination
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
54
     :package defpackage
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
55
     :transform :deftransform
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
56
     :optimizer :defoptimizer
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
57
     :vop :define-vop
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
58
     :source-transform :define-source-transform
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
59
     :ir1-convert :def-ir1-translator
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
60
     :declaration declaim
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
61
     :alien-type :define-alien-type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
62
   "Map SB-INTROSPECT definition type names to Slime-friendly forms")
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
63
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
64
 (defun definition-specifier (type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
65
   "Return a pretty specifier for NAME representing a definition of type TYPE."
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
66
   (getf *definition-types* type))
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
67
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
68
 (defun make-dspec (type name source-location)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
69
   (list* (definition-specifier type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
70
          name
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
71
          (sb-introspect::definition-source-description source-location)))
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
72
 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
73
 (defun find-definitions (name)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
74
   (loop for type in *definition-types* by #'cddr
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
75
         for defsrcs = (sb-introspect:find-definition-sources-by-name name type)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
76
         append (loop for defsrc in defsrcs 
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
77
                      collect (list (make-dspec type name defsrc)
66691c807e97 introspection
ellis <ellis@rwest.io>
parents: 137
diff changeset
78
                                    (sb-introspect:find-definition-sources-by-name name type)))))