Improve errors & warnings due to fancy quoted vars (Bug#32939)
Add some hints to the message for byte compiler free & unused variable warnings, and 'void-variable' errors where the variable has confusable quote characters in it. * lisp/help.el (uni-confusables), uni-confusables-regexp): New constants. (help-command-error-confusable-suggestions): New function, added to `command-error-function'. (help-uni-confusable-suggestions): New function. * lisp/emacs-lisp/bytecomp.el (byte-compile-variable-ref): * lisp/emacs-lisp/cconv.el (cconv--analyze-use): Use it. * lisp/emacs-lisp/lisp-mode.el (lisp--match-confusable-symbol-character): New function. (lisp-fdefs): Use it to fontify confusable characters with font-lock-warning-face when they occur in symbol names. * doc/lispref/modes.texi (Faces for Font Lock): * doc/lispref/objects.texi (Basic Char Syntax): Recommend backslash escaping of confusable characters, and mention new fontification. * etc/NEWS: Announce the new fontification behavior. * test/lisp/emacs-lisp/lisp-mode-tests.el (lisp-fontify-confusables): New test.
This commit is contained in:
parent
85f586f3ce
commit
b2790db049
8 changed files with 116 additions and 7 deletions
|
@ -3428,7 +3428,10 @@ for symbols generated by the byte compiler itself."
|
|||
(boundp var)
|
||||
(memq var byte-compile-bound-variables)
|
||||
(memq var byte-compile-free-references))
|
||||
(byte-compile-warn "reference to free variable `%S'" var)
|
||||
(let* ((varname (prin1-to-string var))
|
||||
(suggestions (help-uni-confusable-suggestions varname)))
|
||||
(byte-compile-warn "reference to free variable `%s'%s" varname
|
||||
(if suggestions (concat "\n " suggestions) "")))
|
||||
(push var byte-compile-free-references))
|
||||
(byte-compile-dynamic-variable-op 'byte-varref var))))
|
||||
|
||||
|
@ -3444,7 +3447,10 @@ for symbols generated by the byte compiler itself."
|
|||
(boundp var)
|
||||
(memq var byte-compile-bound-variables)
|
||||
(memq var byte-compile-free-assignments))
|
||||
(byte-compile-warn "assignment to free variable `%s'" var)
|
||||
(let* ((varname (prin1-to-string var))
|
||||
(suggestions (help-uni-confusable-suggestions varname)))
|
||||
(byte-compile-warn "assignment to free variable `%s'%s" varname
|
||||
(if suggestions (concat "\n " suggestions) "")))
|
||||
(push var byte-compile-free-assignments))
|
||||
(byte-compile-dynamic-variable-op 'byte-varset var))))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue