]> git.eshelyaron.com Git - emacs.git/commitdiff
Silence macro expansion during completion at point
authorJens Schmidt <jschmidt4gnu@vodafonemail.de>
Fri, 29 Sep 2023 20:04:43 +0000 (22:04 +0200)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 5 Oct 2023 18:00:36 +0000 (14:00 -0400)
* lisp/emacs-lisp/macroexp.el (macroexp-inhibit-compiler-macros): Add
variable.
(macroexp--compiler-macro): Inspect that new variable and, if it is
non-nil, return the input form unchanged.
* lisp/progmodes/elisp-mode.el (elisp--local-variables): Silence
messages.  Avoid compiler macros.  (Bug#58148)

lisp/emacs-lisp/macroexp.el
lisp/progmodes/elisp-mode.el

index 3ef924a5c736c75d54c7bd164c6de98934ccb115..6eb670d6dc1830d8eb0f885b032bac4c40c9a9f4 100644 (file)
@@ -105,13 +105,21 @@ each clause."
        (macroexp--all-forms clause skip)
       clause)))
 
+(defvar macroexp-inhibit-compiler-macros nil
+  "Inhibit application of compiler macros if non-nil.")
+
 (defun macroexp--compiler-macro (handler form)
-  (condition-case-unless-debug err
-      (apply handler form (cdr form))
-    (error
-     (message "Warning: Optimization failure for %S: Handler: %S\n%S"
-              (car form) handler err)
-     form)))
+  "Apply compiler macro HANDLER to FORM and return the result.
+Unless `macroexp-inhibit-compiler-macros' is non-nil, in which
+case return FORM unchanged."
+  (if macroexp-inhibit-compiler-macros
+      form
+    (condition-case-unless-debug err
+        (apply handler form (cdr form))
+      (error
+       (message "Warning: Optimization failure for %S: Handler: %S\n%S"
+                (car form) handler err)
+       form))))
 
 (defun macroexp--funcall-if-compiled (_form)
   "Pseudo function used internally by macroexp to delay warnings.
index 664299df288c82611ab47c8542fece2198facd3c..ff90a744ea3519292e3d1c1d165214af6bd977f5 100644 (file)
@@ -460,7 +460,11 @@ use of `macroexpand-all' as a way to find the \"underlying raw code\".")
                    (message "Ignoring macroexpansion error: %S" err) form))))
              (sexp
               (unwind-protect
-                  (let ((warning-minimum-log-level :emergency))
+                  ;; Silence any macro expansion errors when
+                  ;; attempting completion at point (bug#58148).
+                  (let ((inhibit-message t)
+                        (macroexp-inhibit-compiler-macros t)
+                        (warning-minimum-log-level :emergency))
                     (advice-add 'macroexpand-1 :around macroexpand-advice)
                     (macroexpand-all sexp elisp--local-macroenv))
                 (advice-remove 'macroexpand-1 macroexpand-advice)))