comparison lisp/emacs-lisp/checkdoc.el @ 89943:4c90ffeb71c5

Revision: miles@gnu.org--gnu-2004/emacs--unicode--0--patch-15 Merge from emacs--cvs-trunk--0 Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-218 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-220 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-221 Restore deleted tagline in etc/TUTORIAL.ru * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-222 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-228 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-229 Remove TeX output files from the archive * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-230 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-247 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-248 src/lisp.h (CYCLE_CHECK): Macro moved from xfaces.c * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-249 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-256 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-258 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-263 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-264 Update from CVS: lispref/display.texi: emacs -> Emacs. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-265 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-274 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-275 Update from CVS: man/makefile.w32-in: Revert last change * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-276 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-295 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-296 Allow restarting an existing debugger session that's exited * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-297 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-299 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-300 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-327 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-328 Update from CVS: src/.gdbinit (xsymbol): Fix last change. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-329 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-344 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-345 Tweak source regexps so that building in place won't cause problems * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-346 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-351 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-352 Update from CVS: lisp/flymake.el: New file. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-353 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-361 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-362 Support " [...]" style defaults in minibuffer-electric-default-mode * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-363 (read-number): Use canonical format for default in prompt. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-364 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-367 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-368 Improve display-supports-face-attributes-p on non-ttys * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-369 Rewrite face-differs-from-default-p * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-370 Move `display-supports-face-attributes-p' entirely into C code * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-371 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-372 Simplify face-differs-from-default-p; don't consider :stipple. * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-373 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-374 (tty_supports_face_attributes_p): Ensure attributes differ from default * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-375 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-376 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-377 (Fdisplay_supports_face_attributes_p): Work around bootstrapping problem * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-378 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-380 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-381 Face merging cleanups * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-382 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-384 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-385 src/xfaces.c (push_named_merge_point): Return 0 if a cycle is detected * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-386 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-395 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-396 Tweak arch tagging to make build/install-in-place less annoying * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-397 Work around vc-arch problems when building eshell * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-398 Tweak permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-399 Tweak directory permissions * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-400 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-401 More build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-402 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-403 Yet more build-in-place tweaking of arch tagging * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-404 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-409 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-410 Make sure image types are initialized for lookup too * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-411 - miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-416 Update from CVS
author Miles Bader <miles@gnu.org>
date Mon, 28 Jun 2004 07:56:49 +0000
parents 68c22ea6027c 2849e4ae725f
children 566253900690
comparison
equal deleted inserted replaced
89942:9cb747ae49af 89943:4c90ffeb71c5
1244 (define-minor-mode checkdoc-minor-mode 1244 (define-minor-mode checkdoc-minor-mode
1245 "Toggle Checkdoc minor mode, a mode for checking Lisp doc strings. 1245 "Toggle Checkdoc minor mode, a mode for checking Lisp doc strings.
1246 With prefix ARG, turn Checkdoc minor mode on iff ARG is positive. 1246 With prefix ARG, turn Checkdoc minor mode on iff ARG is positive.
1247 1247
1248 In Checkdoc minor mode, the usual bindings for `eval-defun' which is 1248 In Checkdoc minor mode, the usual bindings for `eval-defun' which is
1249 bound to \\<checkdoc-minor-mode-map> \\[checkdoc-eval-defun] and `checkdoc-eval-current-buffer' are overridden to include 1249 bound to \\<checkdoc-minor-mode-map>\\[checkdoc-eval-defun] and `checkdoc-eval-current-buffer' are overridden to include
1250 checking of documentation strings. 1250 checking of documentation strings.
1251 1251
1252 \\{checkdoc-minor-mode-map}" 1252 \\{checkdoc-minor-mode-map}"
1253 nil " CDoc" nil 1253 nil " CDoc" nil
1254 :group 'checkdoc) 1254 :group 'checkdoc)
2577 ret))) 2577 ret)))
2578 2578
2579 ;;; Warning management 2579 ;;; Warning management
2580 ;; 2580 ;;
2581 (defvar checkdoc-output-font-lock-keywords 2581 (defvar checkdoc-output-font-lock-keywords
2582 '(("\\(\\w+\\.el\\): \\(\\w+\\)" 2582 '(("^\\*\\*\\* \\(.+\\.el\\): \\([^ \n]+\\)"
2583 (1 font-lock-function-name-face) 2583 (1 font-lock-function-name-face)
2584 (2 font-lock-comment-face)) 2584 (2 font-lock-comment-face)))
2585 ("^\\(\\w+\\.el\\):" 1 font-lock-function-name-face)
2586 (":\\([0-9]+\\):" 1 font-lock-constant-face))
2587 "Keywords used to highlight a checkdoc diagnostic buffer.") 2585 "Keywords used to highlight a checkdoc diagnostic buffer.")
2588 2586
2589 (defvar checkdoc-output-mode-map nil 2587 (defvar checkdoc-output-error-regex-alist
2590 "Keymap used in `checkdoc-output-mode'.") 2588 '(("^\\(.+\\.el\\):\\([0-9]+\\): " 1 2)))
2591 2589
2592 (defvar checkdoc-pending-errors nil 2590 (defvar checkdoc-pending-errors nil
2593 "Non-nil when there are errors that have not been displayed yet.") 2591 "Non-nil when there are errors that have not been displayed yet.")
2594 2592
2595 (if checkdoc-output-mode-map 2593 (define-derived-mode checkdoc-output-mode compilation-mode "Checkdoc"
2596 nil 2594 "Set up the major mode for the buffer containing the list of errors."
2597 (setq checkdoc-output-mode-map (make-sparse-keymap)) 2595 (set (make-local-variable 'compilation-error-regexp-alist)
2598 (if (not (string-match "XEmacs" emacs-version)) 2596 checkdoc-output-error-regex-alist)
2599 (define-key checkdoc-output-mode-map [mouse-2] 2597 (set (make-local-variable 'compilation-mode-font-lock-keywords)
2600 'checkdoc-find-error)) 2598 checkdoc-output-font-lock-keywords))
2601 (define-key checkdoc-output-mode-map "\C-c\C-c" 'checkdoc-find-error)
2602 (define-key checkdoc-output-mode-map "\C-m" 'checkdoc-find-error))
2603
2604 (defun checkdoc-output-mode ()
2605 "Create and setup the buffer used to maintain checkdoc warnings.
2606 \\<checkdoc-output-mode-map>\\[checkdoc-find-error] - Go to this error location."
2607 (if (get-buffer checkdoc-diagnostic-buffer)
2608 (get-buffer checkdoc-diagnostic-buffer)
2609 (save-excursion
2610 (set-buffer (get-buffer-create checkdoc-diagnostic-buffer))
2611 (kill-all-local-variables)
2612 (setq mode-name "Checkdoc"
2613 major-mode 'checkdoc-output-mode)
2614 (set (make-local-variable 'font-lock-defaults)
2615 '((checkdoc-output-font-lock-keywords) t t ((?- . "w") (?_ . "w"))))
2616 (use-local-map checkdoc-output-mode-map)
2617 (run-hooks 'checkdoc-output-mode-hook)
2618 (current-buffer))))
2619
2620 (defalias 'checkdoc-find-error-mouse 'checkdoc-find-error)
2621 (defun checkdoc-find-error (&optional event)
2622 "In a checkdoc diagnostic buffer, find the error under point."
2623 (interactive (list last-input-event))
2624 (if event (posn-set-point (event-end e)))
2625 (beginning-of-line)
2626 (if (looking-at "\\(\\(\\w+\\|\\s_\\)+\\.el\\):\\([0-9]+\\):")
2627 (let ((l (string-to-int (match-string 3)))
2628 (f (match-string 1)))
2629 (if (not (get-file-buffer f))
2630 (error "Can't find buffer %s" f))
2631 (switch-to-buffer-other-window (get-file-buffer f))
2632 (goto-line l))))
2633 2599
2634 (defun checkdoc-buffer-label () 2600 (defun checkdoc-buffer-label ()
2635 "The name to use for a checkdoc buffer in the error list." 2601 "The name to use for a checkdoc buffer in the error list."
2636 (if (buffer-file-name) 2602 (if (buffer-file-name)
2637 (file-name-nondirectory (buffer-file-name)) 2603 (file-relative-name (buffer-file-name))
2638 (concat "#<buffer "(buffer-name) ">"))) 2604 (concat "#<buffer "(buffer-name) ">")))
2639 2605
2640 (defun checkdoc-start-section (check-type) 2606 (defun checkdoc-start-section (check-type)
2641 "Initialize the checkdoc diagnostic buffer for a pass. 2607 "Initialize the checkdoc diagnostic buffer for a pass.
2642 Create the header so that the string CHECK-TYPE is displayed as the 2608 Create the header so that the string CHECK-TYPE is displayed as the
2643 function called to create the messages." 2609 function called to create the messages."
2644 (checkdoc-output-to-error-buffer 2610 (let ((dir default-directory)
2645 "\n\n\C-l\n*** " 2611 (label (checkdoc-buffer-label)))
2646 (checkdoc-buffer-label) ": " check-type " V " checkdoc-version)) 2612 (with-current-buffer (get-buffer-create checkdoc-diagnostic-buffer)
2613 (checkdoc-output-mode)
2614 (setq default-directory dir)
2615 (goto-char (point-max))
2616 (insert "\n\n\C-l\n*** " label ": " check-type " V " checkdoc-version))))
2647 2617
2648 (defun checkdoc-error (point msg) 2618 (defun checkdoc-error (point msg)
2649 "Store POINT and MSG as errors in the checkdoc diagnostic buffer." 2619 "Store POINT and MSG as errors in the checkdoc diagnostic buffer."
2650 (setq checkdoc-pending-errors t) 2620 (setq checkdoc-pending-errors t)
2651 (checkdoc-output-to-error-buffer 2621 (let ((text (list "\n" (checkdoc-buffer-label) ":"
2652 "\n" (checkdoc-buffer-label) ":" 2622 (int-to-string
2653 (int-to-string (count-lines (point-min) (or point (point-min)))) ": " 2623 (count-lines (point-min) (or point (point-min))))
2654 msg)) 2624 ": " msg)))
2655 2625 (with-current-buffer (get-buffer checkdoc-diagnostic-buffer)
2656 (defun checkdoc-output-to-error-buffer (&rest text) 2626 (goto-char (point-max))
2657 "Place TEXT into the checkdoc diagnostic buffer." 2627 (apply 'insert text))))
2658 (save-excursion
2659 (set-buffer (checkdoc-output-mode))
2660 (goto-char (point-max))
2661 (apply 'insert text)))
2662 2628
2663 (defun checkdoc-show-diagnostics () 2629 (defun checkdoc-show-diagnostics ()
2664 "Display the checkdoc diagnostic buffer in a temporary window." 2630 "Display the checkdoc diagnostic buffer in a temporary window."
2665 (if checkdoc-pending-errors 2631 (if checkdoc-pending-errors
2666 (let ((b (get-buffer checkdoc-diagnostic-buffer))) 2632 (let ((b (get-buffer checkdoc-diagnostic-buffer)))