From: Stefan Monnier Date: Sat, 11 Mar 2017 16:35:14 +0000 (-0500) Subject: Highlight useless backslashes in Elisp strings X-Git-Tag: emacs-26.0.90~594 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4086d850dc02c95615095adddd1e798377f03cec;p=emacs.git Highlight useless backslashes in Elisp strings * lisp/emacs-lisp/lisp-mode.el (lisp-el-font-lock-keywords-2): Put warning face on backslashes that have no effect. --- diff --git a/lisp/emacs-lisp/lisp-mode.el b/lisp/emacs-lisp/lisp-mode.el index d720e0bc573..3ed0d062e34 100644 --- a/lisp/emacs-lisp/lisp-mode.el +++ b/lisp/emacs-lisp/lisp-mode.el @@ -411,6 +411,15 @@ This will generate compile-time constants from BINDINGS." ;; Words inside \\[] tend to be for `substitute-command-keys'. (,(concat "\\\\\\\\\\[\\(" lisp-mode-symbol-regexp "\\)\\]") (1 font-lock-constant-face prepend)) + ;; Ineffective backslashes (typically in need of doubling). + ("\\(?:[^\\]\\|^\\)\\(?:\\\\\\\\\\)*\\(\\(\\\\\\)\\([^\"\\]\\)\\)" + (2 (and (nth 3 (syntax-ppss)) + (equal (ignore-errors + (car (read-from-string + (format "\"%s\"" (match-string 1))))) + (match-string 3)) + font-lock-warning-face) + prepend)) ;; Words inside ‘’ and `' tend to be symbol names. (,(concat "[`‘]\\(\\(?:\\sw\\|\\s_\\|\\\\.\\)" lisp-mode-symbol-regexp "\\)['’]")