* lisp/vc/log-edit.el: Add GNU coding standards highlighting.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 8 May 2012 15:19:18 +0000 (11:19 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 8 May 2012 15:19:18 +0000 (11:19 -0400)
(log-edit-font-lock-gnu-style)
(log-edit-font-lock-gnu-keywords): New vars.
(log-edit-font-lock-keywords): New fun.
(log-edit-mode): Don't fold case in font-lock.
(log-edit-font-lock-keywords): Do not assume case-folding.
* .dir-locals.el (log-edit-mode): Enable gnu-style checks.

.dir-locals.el
ChangeLog
lisp/ChangeLog
lisp/vc/log-edit.el

index 4da890f..471f74d 100644 (file)
@@ -5,7 +5,8 @@
  ;; You must set bugtracker_debbugs_url in your bazaar.conf for this to work.
  ;; See admin/notes/bugtracker.
  (log-edit-mode . ((log-edit-rewrite-fixes
-                    "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1")))
+                    "[ \n](bug#\\([0-9]+\\))" . "debbugs:\\1")
+                   (log-edit-font-lock-gnu-style . t)))
  (change-log-mode . ((add-log-time-zone-rule . t)
                     (fill-column . 74)
                     (bug-reference-url-format . "http://debbugs.gnu.org/%s")
index c456f8d..96ad5c2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2012-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * .dir-locals.el (log-edit-mode): Enable gnu-style checks.
+
 2012-05-08  Glenn Morris  <rgm@gnu.org>
 
        * make-dist: No more doc/lispref/*.el.
index fae2f08..3d275ac 100644 (file)
@@ -1,5 +1,12 @@
 2012-05-08  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * vc/log-edit.el: Add GNU coding standards highlighting.
+       (log-edit-font-lock-gnu-style)
+       (log-edit-font-lock-gnu-keywords): New vars.
+       (log-edit-font-lock-keywords): New fun.
+       (log-edit-mode): Don't fold case in font-lock.
+       (log-edit-font-lock-keywords): Do not assume case-folding.
+
        * imenu.el: Misc cleanup.  Make docstrings out of comments.
        Use lexical-binding.
        (imenu--index-alist, imenu--last-menubar-index-alist)
index db70f41..2abb1ec 100644 (file)
@@ -349,7 +349,7 @@ automatically."
 (defvar log-edit-font-lock-keywords
   ;; Copied/inspired by message-font-lock-keywords.
   `((log-edit-match-to-eoh
-     (,(concat "^\\(\\([a-z]+\\):\\)" log-edit-header-contents-regexp)
+     (,(concat "^\\(\\([[:alpha:]]+\\):\\)" log-edit-header-contents-regexp)
       (progn (goto-char (match-beginning 0)) (match-end 0)) nil
       (1 (if (assoc (match-string 2) log-edit-headers-alist)
              'log-edit-header
@@ -360,6 +360,48 @@ automatically."
              'log-edit-header)
          nil lax)))))
 
+(defvar log-edit-font-lock-gnu-style nil
+  "If non-nil, highlight common failures to follow the GNU coding standards.")
+(put 'log-edit-font-lock-gnu-style 'safe-local-variable 'booleanp)
+
+(defconst log-edit-font-lock-gnu-keywords
+    ;; Use
+    ;;   * foo.el (bla, bli)
+    ;;   (blo, blu): Toto.
+    ;; Rather than
+    ;;   * foo.el (bla, bli,
+    ;;   blo, blu): Toto.
+  '(("^[ \t]*\\(?:\\* .*\\)?\\(([^\n)]*,\\s-*\\)$"
+     (1 '(face font-lock-warning-face
+          help-echo "Continue function lists with \")\\n(\".") t))
+    ;; Don't leave a lone word on a single line.
+    ;;("^\\s-*\\(\\S-*[^\n:)]\\)\\s-*$" (1 font-lock-warning-face t))
+    ;; Don't cut a sentence right after the first word (better to move
+    ;; the sentence on the next line, then).
+    ;;("[.:]\\s-+\\(\\sw+\\)\\s-*$" (1 font-lock-warning-face t))
+    ;; Change Log entries should use present tense.
+    ("):[ \t\n]*[[:alpha:]]+\\(ed\\)\\>"
+     (1 '(face font-lock-warning-face help-echo "Use present tense.") t))
+    ;; Change log entries start with a capital letter.
+    ("): [a-z]" (0 '(face font-lock-warning-face help-echo "Capitalize.") t))
+    ("[^[:upper:]]\\(\\. [[:upper:]]\\)"
+     (1 '(face font-lock-warning-face
+          help-echo "Use two spaces to end a sentence") t))
+    ("^("
+     (0 (let ((beg (max (point-min) (- (match-beginning 0) 2))))
+          (put-text-property beg (match-end 0) 'font-lock-multiline t)
+          (if (eq (char-syntax (char-after beg)) ?w)
+              '(face font-lock-warning-face
+                help-echo "Punctuate previous line.")))
+        t))
+    ))
+
+(defun log-edit-font-lock-keywords ()
+  (if log-edit-font-lock-gnu-style
+      (append log-edit-font-lock-keywords
+              log-edit-font-lock-gnu-keywords)
+    log-edit-font-lock-keywords))
+
 ;;;###autoload
 (defun log-edit (callback &optional setup params buffer mode &rest _ignore)
   "Setup a buffer to enter a log message.
@@ -416,7 +458,7 @@ commands (under C-x v for VC, for example).
 
 \\{log-edit-mode-map}"
   (set (make-local-variable 'font-lock-defaults)
-       '(log-edit-font-lock-keywords t t))
+       '(log-edit-font-lock-keywords t))
   (make-local-variable 'log-edit-comment-ring-index)
   (hack-dir-local-variables-non-file-buffer))