From: Eric M. Ludlam Date: Sat, 5 Sep 1998 13:46:23 +0000 (+0000) Subject: (checkdoc-buffer-label): New function. X-Git-Tag: emacs-20.4~1757 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=84f473b019cc929576d6e4ea27461765d9210fe7;p=emacs.git (checkdoc-buffer-label): New function. (checkdoc-start-section, checkdoc-error): Use `checkdoc-buffer-label'. (checkdoc-this-string-valid-engine): Permit ? as terminating punctuation for first line sentence breaking. (checkdoc-this-string-valid): When converting a comment into a doc string, make sure " chars are \". (checkdoc-sentencespace-region-engine): Only do double space check if based on the variable `sentence-end-double-space' --- diff --git a/lisp/emacs-lisp/checkdoc.el b/lisp/emacs-lisp/checkdoc.el index 3432d680441..3d4e5957c38 100644 --- a/lisp/emacs-lisp/checkdoc.el +++ b/lisp/emacs-lisp/checkdoc.el @@ -3,7 +3,7 @@ ;;; Copyright (C) 1997, 1998 Free Software Foundation ;; Author: Eric M. Ludlam -;; Version: 0.6.1 +;; Version: 0.6.2 ;; Keywords: docs, maint, lisp ;; This file is part of GNU Emacs. @@ -1309,7 +1309,7 @@ See the style guide in the Emacs Lisp manual for more details." checkdoc-force-docstrings-flag) ;or we always complain (not (checkdoc-char= (following-char) ?\"))) ; no doc string ;; Sometimes old code has comments where the documentation should - ;; be. Lets see if we can find the comment, and offer to turn it + ;; be. Let's see if we can find the comment, and offer to turn it ;; into documentation for them. (let ((have-comment nil)) (condition-case nil @@ -1328,23 +1328,28 @@ See the style guide in the Emacs Lisp manual for more details." ;; Our point is at the beginning of the comment! ;; Insert a quote, then remove the comment chars. (insert "\"") - (while (looking-at comment-start) + (let ((docstring-start-point (point))) (while (looking-at comment-start) - (delete-char 1)) - (if (looking-at "[ \t]+") - (delete-region (match-beginning 0) (match-end 0))) - (forward-line 1) + (while (looking-at comment-start) + (delete-char 1)) + (if (looking-at "[ \t]+") + (delete-region (match-beginning 0) (match-end 0))) + (forward-line 1) + (beginning-of-line) + (skip-chars-forward " \t") + (if (looking-at comment-start) + (progn + (beginning-of-line) + (zap-to-char 1 ?\;)))) (beginning-of-line) - (skip-chars-forward " \t") - (if (looking-at comment-start) - (progn - (beginning-of-line) - (zap-to-char 1 ?\;)))) - (beginning-of-line) - (forward-char -1) - (insert "\"") - (if (eq checkdoc-autofix-flag 'automatic-then-never) - (setq checkdoc-autofix-flag 'never))) + (forward-char -1) + (insert "\"") + (forward-char -1) + ;; quote any double-quote characters in the comment. + (while (search-backward "\"" docstring-start-point t) + (insert "\\")) + (if (eq checkdoc-autofix-flag 'automatic-then-never) + (setq checkdoc-autofix-flag 'never)))) (checkdoc-create-error "You should convert this comment to documentation" (point) (save-excursion (end-of-line) (point)))) @@ -1428,7 +1433,7 @@ regexp short cuts work. FP is the function defun information." (not (checkdoc-char= (preceding-char) ?\\))) ;; We might have to add a period in this case (forward-char -1) - (if (looking-at "[.!]") + (if (looking-at "[.!?]") nil (forward-char 1) (if (checkdoc-autofix-ask-replace @@ -1438,7 +1443,7 @@ regexp short cuts work. FP is the function defun information." (checkdoc-create-error "First sentence should end with punctuation" (point) (1+ (point)))))) - ((looking-at "[\\!;:.)]") + ((looking-at "[\\!?;:.)]") ;; These are ok nil) ((and checkdoc-permit-comma-termination-flag (looking-at ",")) @@ -1477,7 +1482,7 @@ may require more formatting") (p (point))) (forward-line 1) (beginning-of-line) - (if (and (re-search-forward "[.!:\"]\\([ \t\n]+\\|\"\\)" + (if (and (re-search-forward "[.!?:\"]\\([ \t\n]+\\|\"\\)" (save-excursion (end-of-line) (point)) @@ -1673,12 +1678,12 @@ function,command,variable,option or symbol." ms1)))))) ;; and see if the user wants to capitalize it. (if (save-excursion (re-search-forward - (concat "\\<\\(" (car args) - ;; Require whitespace OR - ;; ITEMth OR - ;; ITEMs - "\\)\\(\\>\\|th\\>\\|s\\>\\)") - e t)) + (concat "\\<\\(" (car args) + ;; Require whitespace OR + ;; ITEMth OR + ;; ITEMs + "\\)\\(\\>\\|th\\>\\|s\\>\\)") + e t)) (if (checkdoc-autofix-ask-replace (match-beginning 1) (match-end 1) (format @@ -1977,6 +1982,9 @@ If the offending word is in a piece of quoted text, then it is skipped." (goto-char b) (forward-char -1) (looking-at "`\\|\"\\|\\.\\|\\\\"))) + ;; surrounded by /, as in a URL or filename: /emacs/ + (not (and (= ?/ (char-after e)) + (= ?/ (char-before b)))) (not (checkdoc-in-example-string-p begin end))) (if (checkdoc-autofix-ask-replace b e (format "Text %s should be capitalized. Fix? " @@ -2002,42 +2010,43 @@ If the offending word is in a piece of quoted text, then it is skipped." (defun checkdoc-sentencespace-region-engine (begin end) "Make sure all sentences have double spaces between BEGIN and END." - (save-excursion - (let ((case-fold-search nil) - (errtxt nil) bb be - (old-syntax-table (syntax-table))) - (unwind-protect - (progn - (set-syntax-table checkdoc-syntax-table) - (goto-char begin) - (while (re-search-forward "[^.0-9]\\(\\. \\)[^ \n]" end t) - (let ((b (match-beginning 1)) - (e (match-end 1))) - (if (and (not (checkdoc-in-sample-code-p begin end)) - (not (checkdoc-in-example-string-p begin end)) - (not (save-excursion - (goto-char (match-beginning 1)) - (forward-sexp -1) - ;; piece of an abbreviation - (looking-at "\\([a-z]\\|[ie]\\.?g\\)\\.") - ))) - (if (checkdoc-autofix-ask-replace - b e "There should be two spaces after a period. Fix? " - ". ") - nil - (if errtxt - ;; If there is already an error, then generate - ;; the warning output if applicable - (if checkdoc-generate-compile-warnings-flag - (checkdoc-create-error - "There should be two spaces after a period" - b e)) - (setq errtxt - "There should be two spaces after a period" - bb b be e))))))) - (set-syntax-table old-syntax-table)) - (if errtxt (checkdoc-create-error errtxt bb be))))) - + (if sentence-end-double-space + (save-excursion + (let ((case-fold-search nil) + (errtxt nil) bb be + (old-syntax-table (syntax-table))) + (unwind-protect + (progn + (set-syntax-table checkdoc-syntax-table) + (goto-char begin) + (while (re-search-forward "[^.0-9]\\(\\. \\)[^ \n]" end t) + (let ((b (match-beginning 1)) + (e (match-end 1))) + (if (and (not (checkdoc-in-sample-code-p begin end)) + (not (checkdoc-in-example-string-p begin end)) + (not (save-excursion + (goto-char (match-beginning 1)) + (forward-sexp -1) + ;; piece of an abbreviation + (looking-at "\\([a-z]\\|[ie]\\.?g\\)\\.") + ))) + (if (checkdoc-autofix-ask-replace + b e + "There should be two spaces after a period. Fix? " + ". ") + nil + (if errtxt + ;; If there is already an error, then generate + ;; the warning output if applicable + (if checkdoc-generate-compile-warnings-flag + (checkdoc-create-error + "There should be two spaces after a period" + b e)) + (setq errtxt + "There should be two spaces after a period" + bb b be e))))))) + (set-syntax-table old-syntax-table)) + (if errtxt (checkdoc-create-error errtxt bb be)))))) ;;; Ispell engine ;; @@ -2637,21 +2646,25 @@ This function will not modify `match-data'." (switch-to-buffer-other-window (get-buffer f)) (goto-line l)))) +(defun checkdoc-buffer-label () + "The name to use for a checkdoc buffer in the error list." + (if (buffer-file-name) + (file-name-nondirectory (buffer-file-name)) + (concat "#"))) + (defun checkdoc-start-section (check-type) "Initialize the checkdoc diagnostic buffer for a pass. Create the header so that the string CHECK-TYPE is displayed as the function called to create the messages." (checkdoc-output-to-error-buffer "\n\n\C-l\n*** " - (file-name-nondirectory (buffer-file-name)) ": " check-type - " V " checkdoc-version)) + (checkdoc-buffer-label) ": " check-type " V " checkdoc-version)) (defun checkdoc-error (point msg) "Store POINT and MSG as errors in the checkdoc diagnostic buffer." (setq checkdoc-pending-errors t) (checkdoc-output-to-error-buffer - "\n" - (file-name-nondirectory (buffer-file-name)) ":" + "\n" (checkdoc-buffer-label) ":" (int-to-string (count-lines (point-min) (or point 1))) ": " msg))