]> code.delx.au - gnu-emacs/commitdiff
Handle setf methods in elisp font-locking.
authorTassilo Horn <tsdh@gnu.org>
Sat, 21 Mar 2015 07:52:34 +0000 (08:52 +0100)
committerTassilo Horn <tsdh@gnu.org>
Sat, 21 Mar 2015 07:52:34 +0000 (08:52 +0100)
* emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-1): Also
recognize (cl-)defmethod with (setf method) name.

lisp/ChangeLog
lisp/emacs-lisp/lisp-mode.el

index 025941f809ccfb033e845a6b0e077b9c9ebe6d42..1cfefaa39dfe7045cca54bbe30c2b84235737696 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-21  Tassilo Horn  <tsdh@gnu.org>
+
+       * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-1): Also
+       recognize (cl-)defmethod with (setf method) name.
+
 2015-03-20  Tassilo Horn  <tsdh@gnu.org>
 
        * emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-1): Fix
index a3bb1a709f68eca2ce01166d847a4f96163c7245..9c4194557ef798903d6f49f8de3930e4a8ce87d4 100644 (file)
               (eieio-tdefs '("defclass"))
               (eieio-kw '("with-slots"))
               ;; Common-Lisp constructs supported by cl-lib.
-              (cl-lib-fdefs '("defmacro" "defsubst" "defun"))
+              (cl-lib-fdefs '("defmacro" "defsubst" "defun" "defmethod"))
               (cl-lib-tdefs '("defstruct" "deftype"))
               (cl-lib-kw '("progv" "eval-when" "case" "ecase" "typecase"
                            "etypecase" "ccase" "ctypecase" "loop" "do" "do*"
       (,(concat "(" el-defs-re "\\_>"
                 ;; Any whitespace and defined object.
                 "[ \t']*"
-               ;; With cl-defstruct, the name may follow a paren,
-               ;; e.g. (cl-defstruct (foo-struct opts)...).
-                "\\(([ \t']*\\)?\\(\\(?:\\sw\\|\\s_\\)+\\)?")
+               "\\(([ \t']*\\)?" ;; An opening paren.
+                "\\(\\(setf\\)[ \t]+\\(?:\\sw\\|\\s_\\)+\\|\\(?:\\sw\\|\\s_\\)+\\)?")
        (1 font-lock-keyword-face)
        (3 (let ((type (get (intern-soft (match-string 1)) 'lisp-define-type)))
            (cond ((eq type 'var) font-lock-variable-name-face)
                  ((eq type 'type) font-lock-type-face)
                  ;; If match-string 2 is non-nil, we encountered a
-                 ;; form like (defalias (intern (concat s "-p"))).
-                 ((not (match-string 2)) font-lock-function-name-face)))
+                 ;; form like (defalias (intern (concat s "-p"))),
+                 ;; unless match-string 4 is also there.  Then its a
+                 ;; defmethod with (setf foo) as name.
+                 ((or (not (match-string 2))  ;; Normal defun.
+                      (and (match-string 2)   ;; Setf method.
+                           (match-string 4))) font-lock-function-name-face)))
          nil t))
       ;; Emacs Lisp autoload cookies.  Supports the slightly different
       ;; forms used by mh-e, calendar, etc.
             (cond ((eq type 'var) font-lock-variable-name-face)
                   ((eq type 'type) font-lock-type-face)
                   ((or (not (match-string 2))  ;; Normal defun.
-                      (and (match-string 2)   ;; Setf-expander.
+                      (and (match-string 2)   ;; Setf function.
                            (match-string 4))) font-lock-function-name-face)))
           nil t)))
     "Subdued level highlighting for Lisp modes.")