From: Glenn Morris Date: Wed, 16 Oct 2013 01:33:16 +0000 (-0700) Subject: * files.el (hack-local-variables): Warn about misplaced lexical-binding. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1253 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=012e2f9fdaf39b5f913b5560be3986e2bc599186;p=emacs.git * files.el (hack-local-variables): Warn about misplaced lexical-binding. (hack-local-variables--warned-lexical): New. Fixes: debbugs:15616 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 50ef17cfef1..476c0593855 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-10-16 Glenn Morris + * 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. diff --git a/lisp/files.el b/lisp/files.el index ab62be295f0..cf3356014a1 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -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.