summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/cconv.el
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2018-03-10 18:12:55 -0500
committerNoam Postavsky <npostavs@gmail.com>2019-11-28 18:10:07 -0500
commitb2790db049da98b541d07bac21ca7d7c220d3be0 (patch)
tree61aba17be4946bf84dc0dd57b1d7157b88725c83 /lisp/emacs-lisp/cconv.el
parent85f586f3ce5c6d9598d345440fd57e0fc9b8d98b (diff)
downloademacs-b2790db049da98b541d07bac21ca7d7c220d3be0.tar.gz
emacs-b2790db049da98b541d07bac21ca7d7c220d3be0.tar.bz2
emacs-b2790db049da98b541d07bac21ca7d7c220d3be0.zip
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.
Diffstat (limited to 'lisp/emacs-lisp/cconv.el')
-rw-r--r--lisp/emacs-lisp/cconv.el6
1 files changed, 4 insertions, 2 deletions
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index 58ca9d5f57e..09af7cb9104 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -591,8 +591,10 @@ FORM is the parent form that binds this var."
(eq ?_ (aref (symbol-name var) 0))
;; As a special exception, ignore "ignore".
(eq var 'ignored))
- (byte-compile-warn "Unused lexical %s `%S'"
- varkind var)))
+ (let ((suggestions (help-uni-confusable-suggestions (symbol-name var))))
+ (byte-compile-warn "Unused lexical %s `%S'%s"
+ varkind var
+ (if suggestions (concat "\n " suggestions) "")))))
;; If it's unused, there's no point converting it into a cons-cell, even if
;; it's captured and mutated.
(`(,binder ,_ t t ,_)