From 49ed9c8e75a0b869f06606fc05fc38f5f207083e Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 8 May 2012 11:19:18 -0400 Subject: [PATCH] * lisp/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. * .dir-locals.el (log-edit-mode): Enable gnu-style checks. --- .dir-locals.el | 3 ++- ChangeLog | 4 ++++ lisp/ChangeLog | 7 +++++++ lisp/vc/log-edit.el | 46 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/.dir-locals.el b/.dir-locals.el index 4da890f92a..471f74da12 100644 --- a/.dir-locals.el +++ b/.dir-locals.el @@ -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") diff --git a/ChangeLog b/ChangeLog index c456f8d173..96ad5c2d18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-05-08 Stefan Monnier + + * .dir-locals.el (log-edit-mode): Enable gnu-style checks. + 2012-05-08 Glenn Morris * make-dist: No more doc/lispref/*.el. diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fae2f08b80..3d275acd46 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,12 @@ 2012-05-08 Stefan Monnier + * 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) diff --git a/lisp/vc/log-edit.el b/lisp/vc/log-edit.el index db70f41739..2abb1ec9c0 100644 --- a/lisp/vc/log-edit.el +++ b/lisp/vc/log-edit.el @@ -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)) -- 2.39.2