]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/elisp-mode.el (elisp--local-variables-1):
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 15 Oct 2014 01:56:56 +0000 (21:56 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 15 Oct 2014 01:56:56 +0000 (21:56 -0400)
Handle quoted expressions.

Fixes: debbugs:18688
lisp/ChangeLog
lisp/progmodes/elisp-mode.el

index 055ec17160e4cb9238e2942893098b10edfa0600..f092ec6b5396c4fcfbdeb0502f4fb526d37c88ef 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-15  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * progmodes/elisp-mode.el (elisp--local-variables-1):
+       Handle quoted expressions (bug#18688).
+
 2014-10-14  Jérémy Compostella  <jeremy.compostella@intel.com>
            Michael Albinus  <michael.albinus@gmx.de>
 
index f3143bd76ee194ba4f6eb6f50893df832c6e4a18..900e859b54a5662684d07dae06c7906af4fbf8b8 100644 (file)
@@ -255,18 +255,27 @@ Blank lines separate paragraphs.  Semicolons start comments.
                        (dolist (binding bindings)
                          (push (or (car-safe binding) binding) vars))
                        (elisp--local-variables-1 vars (car (last body)))))
-                    (`(lambda ,_) (setq sexp nil))
+                    (`(lambda ,_args)
+                     ;; FIXME: Look for the witness inside `args'.
+                     (setq sexp nil))
                     (`(lambda ,args . ,body)
                      (elisp--local-variables-1
-                      (append args vars) (car (last body))))
+                      (append (remq '&optional (remq '&rest args)) vars)
+                      (car (last body))))
                     (`(condition-case ,_ ,e) (elisp--local-variables-1 vars e))
                     (`(condition-case ,v ,_ . ,catches)
                      (elisp--local-variables-1
                       (cons v vars) (cdr (car (last catches)))))
+                    (`(quote . ,_)
+                     ;; FIXME: Look for the witness inside sexp.
+                     (setq sexp nil))
+                    ;; FIXME: Handle `cond'.
                     (`(,_ . ,_)
                      (elisp--local-variables-1 vars (car (last sexp))))
                     (`elisp--witness--lisp (or vars '(nil)))
                     (_ nil)))
+          ;; We didn't find the witness in the last element so we try to
+          ;; backtrack to the last-but-one.
           (setq sexp (ignore-errors (butlast sexp)))))
     res))