]> git.eshelyaron.com Git - emacs.git/commitdiff
* files.el (hack-local-variables): Warn about misplaced lexical-binding.
authorGlenn Morris <rgm@gnu.org>
Wed, 16 Oct 2013 01:33:16 +0000 (18:33 -0700)
committerGlenn Morris <rgm@gnu.org>
Wed, 16 Oct 2013 01:33:16 +0000 (18:33 -0700)
(hack-local-variables--warned-lexical): New.

Fixes: debbugs:15616
lisp/ChangeLog
lisp/files.el

index 50ef17cfef1632ff986088e98f44a4e5eb4e9544..476c0593855db63decb00165dd6865c529f3aa9d 100644 (file)
@@ -1,5 +1,9 @@
 2013-10-16  Glenn Morris  <rgm@gnu.org>
 
+       * files.el (hack-local-variables--warned-lexical): New.
+       (hack-local-variables):
+       Warn about misplaced lexical-binding.  (Bug#15616)
+
        * net/eww.el (eww-render): Always set eww-current-url,
        and update header line.  (Bug#15622)
        (eww-display-html): ... Rather than just doing it here.
index ab62be295f0d96a054848af2c67d50a6d5619a5a..cf3356014a17e0f3c4cdb21fb98f325685eb70b8 100644 (file)
@@ -3154,6 +3154,9 @@ DIR-NAME is the name of the associated directory.  Otherwise it is nil."
                   (assq-delete-all (car elt) file-local-variables-alist)))
           (push elt file-local-variables-alist)))))
 
+;; TODO?  Warn once per file rather than once per session?
+(defvar hack-local-variables--warned-lexical nil)
+
 (defun hack-local-variables (&optional mode-only)
   "Parse and put into effect this buffer's local variables spec.
 Uses `hack-local-variables-apply' to apply the variables.
@@ -3275,13 +3278,18 @@ local variables, but directory-local variables may still be applied."
                                     "-minor\\'"
                                     (setq val2 (downcase (symbol-name val)))))
                               (setq result (intern (concat val2 "-mode"))))
-                       (unless (eq var 'coding)
-                         (condition-case nil
-                             (push (cons (if (eq var 'eval)
-                                             'eval
-                                           (indirect-variable var))
-                                         val) result)
-                           (error nil)))))
+                       (cond ((eq var 'coding))
+                             ((eq var 'lexical-binding)
+                              (unless hack-local-variables--warned-lexical
+                                (setq hack-local-variables--warned-lexical t)
+                                (display-warning :warning
+                                                 "Specify `lexical-binding' on the first line, not at the end")))
+                             (t
+                              (ignore-errors
+                                (push (cons (if (eq var 'eval)
+                                                'eval
+                                              (indirect-variable var))
+                                            val) result))))))
                    (forward-line 1))))))))
       ;; Now we've read all the local variables.
       ;; If MODE-ONLY is non-nil, return whether the mode was specified.