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