mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
e63f37a4a9
- The first sentence should fit on the first line in full. This is even the case when that causes the line to get a bit long. If it gets very long, then it should be made shorter. - Even even the second sentence would fit on the first line, if it just provides some details, then it shouldn't be done. - Symbols are quoted like `so'. - There is no clear rule on how to (not) quote non-atomic s-expressions, but quoting like '(this) is definitely weird. - It is a good idea to remember that \" becomes " and to take that in mind when adjusting the automatic filling by hand. - Use the imperative form. - Arguments are written in all uppercase.
86 lines
2.7 KiB
EmacsLisp
86 lines
2.7 KiB
EmacsLisp
;;; rstdoc.el --- help generate documentation from docstrings -*-lexical-binding: t-*-
|
|
|
|
;; Copyright (C) 2018 David Bremner
|
|
|
|
;; Author: David Bremner <david@tethera.net>
|
|
;; Created: 26 May 2018
|
|
;; Keywords: emacs lisp, documentation
|
|
;; Homepage: https://notmuchmail.org
|
|
|
|
;; This file is not part of GNU Emacs.
|
|
|
|
;; rstdoc.el is free software: you can redistribute it and/or modify it
|
|
;; under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
;;
|
|
;; rstdoc.el is distributed in the hope that it will be useful, but
|
|
;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
;; General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with rstdoc.el. If not, see <https://www.gnu.org/licenses/>.
|
|
;;
|
|
|
|
;;; Commentary:
|
|
;;
|
|
|
|
;; Rstdoc provides a facility to extract all of the docstrings defined in
|
|
;; an elisp source file. Usage:
|
|
;;
|
|
;; emacs -Q --batch -L . -l rstdoc -f rstdoc-batch-extract foo.el foo.rsti
|
|
|
|
;;; Code:
|
|
|
|
(provide 'rstdoc)
|
|
|
|
(defun rstdoc-batch-extract ()
|
|
"Extract docstrings to and from the files on the command line."
|
|
(apply #'rstdoc-extract command-line-args-left))
|
|
|
|
(defun rstdoc-extract (in-file out-file)
|
|
"Write docstrings from IN-FILE to OUT-FILE."
|
|
(load-file in-file)
|
|
(let* ((definitions (cdr (assoc (expand-file-name in-file) load-history)))
|
|
(doc-hash (make-hash-table :test 'eq)))
|
|
(mapc
|
|
(lambda (elt)
|
|
(let ((pair
|
|
(pcase elt
|
|
(`(defun . ,name) (cons name (documentation name)))
|
|
(`(,_ . ,_) nil)
|
|
(sym (cons sym (get sym 'variable-documentation))))))
|
|
(when (and pair (cdr pair))
|
|
(puthash (car pair) (cdr pair) doc-hash))))
|
|
definitions)
|
|
(with-temp-buffer
|
|
(maphash
|
|
(lambda (key val)
|
|
(rstdoc--insert-docstring key val))
|
|
doc-hash)
|
|
(write-region (point-min) (point-max) out-file))))
|
|
|
|
(defun rstdoc--insert-docstring (symbol docstring)
|
|
(insert (format "\n.. |docstring::%s| replace::\n" symbol))
|
|
(insert (replace-regexp-in-string "^" " "
|
|
(rstdoc--rst-quote-string docstring)))
|
|
(insert "\n"))
|
|
|
|
(defvar rst--escape-alist
|
|
'( ("\\\\='" . "\\\\'")
|
|
("\\([^\\]\\)'" . "\\1`")
|
|
("^[[:space:]\t]*$" . "|br|")
|
|
("^[[:space:]\t]" . "|indent| "))
|
|
"List of (regex . replacement) pairs.")
|
|
|
|
(defun rstdoc--rst-quote-string (str)
|
|
(with-temp-buffer
|
|
(insert str)
|
|
(dolist (pair rst--escape-alist)
|
|
(goto-char (point-min))
|
|
(while (re-search-forward (car pair) nil t)
|
|
(replace-match (cdr pair))))
|
|
(buffer-substring (point-min) (point-max))))
|
|
|
|
;;; rstdoc.el ends here
|