Fix byte-compiler warning for failed uses of lexical vars
* lisp/emacs-lisp/bytecomp.el (byte-compile-form): Fix byte-compiler warning for failed uses of lexical vars. (Bug#44980) * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp--define-warning-file-test): Don't prefix tests with 'warn'. (bytecomp/error-lexical-var-with-add-hook\.el) (bytecomp/error-lexical-var-with-remove-hook\.el) (bytecomp/error-lexical-var-with-run-hook-with-args-until-failure\.el) (bytecomp/error-lexical-var-with-run-hook-with-args-until-success\.el) (bytecomp/error-lexical-var-with-run-hook-with-args\.el) (bytecomp/error-lexical-var-with-symbol-value\.el): New tests. * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-symbol-value.el: * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args.el: * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-success.el: * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-run-hook-with-args-until-failure.el: * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-remove-hook.el: * test/lisp/emacs-lisp/bytecomp-resources/error-lexical-var-with-add-hook.el: New files.
This commit is contained in:
parent
8a27b0cad7
commit
ace6eba036
8 changed files with 45 additions and 4 deletions
|
@ -3203,7 +3203,7 @@ for symbols generated by the byte compiler itself."
|
||||||
run-hook-with-args-until-failure))
|
run-hook-with-args-until-failure))
|
||||||
(pcase (cdr form)
|
(pcase (cdr form)
|
||||||
(`(',var . ,_)
|
(`(',var . ,_)
|
||||||
(when (assq var byte-compile-lexical-variables)
|
(when (memq var byte-compile-lexical-variables)
|
||||||
(byte-compile-report-error
|
(byte-compile-report-error
|
||||||
(format-message "%s cannot use lexical var `%s'" fn var))))))
|
(format-message "%s cannot use lexical var `%s'" fn var))))))
|
||||||
;; Warn about using obsolete hooks.
|
;; Warn about using obsolete hooks.
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(add-hook 'foo #'next-line)
|
||||||
|
foo)
|
|
@ -0,0 +1,4 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(remove-hook 'foo #'next-line)
|
||||||
|
foo)
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(run-hook-with-args-until-failure 'foo))
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(run-hook-with-args-until-success 'foo #'next-line))
|
|
@ -0,0 +1,3 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(run-hook-with-args 'foo))
|
|
@ -0,0 +1,4 @@
|
||||||
|
;;; -*- lexical-binding: t; -*-
|
||||||
|
(let ((foo nil))
|
||||||
|
(add-hook 'foo #'next-line)
|
||||||
|
foo)
|
|
@ -548,7 +548,7 @@ Subtests signal errors if something goes wrong."
|
||||||
(should (equal (funcall 'def) -1)))
|
(should (equal (funcall 'def) -1)))
|
||||||
|
|
||||||
(defmacro bytecomp--define-warning-file-test (file re-warning &optional reverse)
|
(defmacro bytecomp--define-warning-file-test (file re-warning &optional reverse)
|
||||||
`(ert-deftest ,(intern (format "bytecomp-warn/%s" file)) ()
|
`(ert-deftest ,(intern (format "bytecomp/%s" file)) ()
|
||||||
:expected-result ,(if reverse :failed :passed)
|
:expected-result ,(if reverse :failed :passed)
|
||||||
(with-current-buffer (get-buffer-create "*Compile-Log*")
|
(with-current-buffer (get-buffer-create "*Compile-Log*")
|
||||||
(let ((inhibit-read-only t)) (erase-buffer))
|
(let ((inhibit-read-only t)) (erase-buffer))
|
||||||
|
@ -556,9 +556,29 @@ Subtests signal errors if something goes wrong."
|
||||||
(ert-info ((buffer-string) :prefix "buffer: ")
|
(ert-info ((buffer-string) :prefix "buffer: ")
|
||||||
(should (re-search-forward ,re-warning))))))
|
(should (re-search-forward ,re-warning))))))
|
||||||
|
|
||||||
(bytecomp--define-warning-file-test "warn-free-setq.el" "free.*foo")
|
(bytecomp--define-warning-file-test "error-lexical-var-with-add-hook.el"
|
||||||
|
"add-hook.*lexical var")
|
||||||
|
|
||||||
(bytecomp--define-warning-file-test "warn-free-variable-reference.el" "free.*bar")
|
(bytecomp--define-warning-file-test "error-lexical-var-with-remove-hook.el"
|
||||||
|
"remove-hook.*lexical var")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "error-lexical-var-with-run-hook-with-args-until-failure.el"
|
||||||
|
"args-until-failure.*lexical var")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "error-lexical-var-with-run-hook-with-args-until-success.el"
|
||||||
|
"args-until-success.*lexical var")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "error-lexical-var-with-run-hook-with-args.el"
|
||||||
|
"args.*lexical var")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "error-lexical-var-with-symbol-value.el"
|
||||||
|
"symbol-value.*lexical var")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "warn-free-setq.el"
|
||||||
|
"free.*foo")
|
||||||
|
|
||||||
|
(bytecomp--define-warning-file-test "warn-free-variable-reference.el"
|
||||||
|
"free.*bar")
|
||||||
|
|
||||||
(bytecomp--define-warning-file-test "warn-obsolete-defun.el"
|
(bytecomp--define-warning-file-test "warn-obsolete-defun.el"
|
||||||
"foo-obsolete.*obsolete function.*99.99")
|
"foo-obsolete.*obsolete function.*99.99")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue