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:
Noam Postavsky 2018-03-10 18:12:55 -05:00
parent 85f586f3ce
commit b2790db049
8 changed files with 116 additions and 7 deletions

View file

@ -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))))