unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "J.P." <jp@neverwas.me>
To: 72561@debbugs.gnu.org
Subject: bug#72561: 31.0.50; Scan error in ert--pp-with-indentation-and-newline
Date: Sat, 10 Aug 2024 06:48:11 -0700	[thread overview]
Message-ID: <87v808o5es.fsf@neverwas.me> (raw)

[-- Attachment #1: Type: text/plain, Size: 4872 bytes --]

Tags: patch

This apparently began after

  2f181d60323bd9e0196775828de633100479f4c2
  Author:     Stefan Monnier <monnier@iro.umontreal.ca>
  AuthorDate: Fri Jun 16 13:35:06 2023 -0400
  CommitDate: Sat Jun 17 17:24:38 2023 -0400

  pp.el (pp-fill): New default pp function
  
  1 file changed, 90 insertions(+), 1 deletion(-)
  lisp/emacs-lisp/pp.el | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++-

So I guess it also affects Emacs 30. To reproduce, put this in
test/lisp/emacs-lisp/ert-tests.el:

   (ert-deftest ert--pp-with-indentation-and-newline ()
     (should (equal '((:one "1" :three "3" :two "2")) '((:one "1")))))

Then run something like:

   $ make -C test \
     SELECTOR=ert--pp-with-indentation-and-newline \
     lisp/emacs-lisp/ert-tests.log

   Error: scan-error ("Containing expression ends prematurely" 221 221)
     forward-sexp-default-function(-1)
     forward-sexp(-1)
     calculate-lisp-indent((5 221 238 nil nil nil 4 nil nil (5 27 161 175
     lisp-indent-calc-next(#s(lisp-indent-state :stack (50 16 6 5 nil) :p
     indent-sexp()
     ert--pp-with-indentation-and-newline((ert-test-failed ((should (equa
     #f(compiled-function (event-type &rest event-args) #<bytecode 0x16b6
     #f(compiled-function () #<bytecode -0xb4ce749a56118cd>)()
     ert-run-or-rerun-test(#s(ert--stats :selector ert--pp-with-indentati
   
   Aborted: Ran 1 tests, 0 results as expected, 1 unexpected, -1 skipped
   
No idea if there's a deeper issue at play here, maybe something in
pp.el that a patch like the attached would just be papering over.


In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.43, cairo version 1.18.0) of 2024-08-09 built on localhost
Repository revision: 944e45db53cb173c5eadd4794081c133e8649d67
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12401002
System Description: Fedora Linux 40 (Workstation Edition)

Configured using:
 'configure --enable-check-lisp-object-type --enable-checking=yes,glyphs
 'CFLAGS=-O0 -g3'
 PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr compile comint ansi-osc ansi-color ring comp-run
bytecomp byte-compile comp-common rx emacsbug message mailcap yank-media
puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived
epg rfc6068 epg-config gnus-util text-property-search time-date subr-x
mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils
mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren
electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset
image regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo gtk
x-toolkit xinput2 x multi-tty move-toolbar make-network-process
native-compile emacs)

Memory information:
((conses 16 58857 9185) (symbols 48 6741 0) (strings 32 16558 3964)
 (string-bytes 1 477530) (vectors 16 11257)
 (vector-slots 8 135809 8706) (floats 8 21 4) (intervals 56 249 0)
 (buffers 984 11))

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Indent-failed-ERT-should-forms-with-Emacs-Lisp-synta.patch --]
[-- Type: text/x-patch, Size: 3790 bytes --]

From 2a65e655ae62c1ee74a15747c228b3c19a871f9e Mon Sep 17 00:00:00 2001
From: "F. Jason Park" <jp@neverwas.me>
Date: Fri, 9 Aug 2024 16:49:28 -0700
Subject: [PATCH] Indent failed ERT should forms with Emacs Lisp syntax

* lisp/emacs-lisp/ert.el (ert--pp-with-indentation-and-newline):
Use `emacs-lisp-mode-syntax-table' when indenting.
* test/lisp/emacs-lisp/ert-tests.el
(ert--pp-with-indentation-and-newline): New test.
---
 lisp/emacs-lisp/ert.el            |  3 +-
 test/lisp/emacs-lisp/ert-tests.el | 54 +++++++++++++++++++++++++++++++
 2 files changed, 56 insertions(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/ert.el b/lisp/emacs-lisp/ert.el
index 6a665c8181d..6f5a0093ba0 100644
--- a/lisp/emacs-lisp/ert.el
+++ b/lisp/emacs-lisp/ert.el
@@ -1323,7 +1323,8 @@ ert--pp-with-indentation-and-newline
     (unless (bolp) (insert "\n"))
     (save-excursion
       (goto-char begin)
-      (indent-sexp))))
+      (with-syntax-table emacs-lisp-mode-syntax-table
+        (indent-sexp)))))
 
 (defun ert--insert-infos (result)
   "Insert `ert-info' infos from RESULT into current buffer.
diff --git a/test/lisp/emacs-lisp/ert-tests.el b/test/lisp/emacs-lisp/ert-tests.el
index 1aff73d66f6..cdbeae2f2e5 100644
--- a/test/lisp/emacs-lisp/ert-tests.el
+++ b/test/lisp/emacs-lisp/ert-tests.el
@@ -876,6 +876,60 @@ ert-test-get-explainer
   (should (eq (ert--get-explainer 'string-equal) 'ert--explain-string-equal))
   (should (eq (ert--get-explainer 'string=) 'ert--explain-string-equal)))
 
+(ert-deftest ert--pp-with-indentation-and-newline ()
+  :tags '(:causes-redisplay)
+  (let ((failing-test (make-ert-test
+                       :name 'failing-test
+                       :body (lambda ()
+                               (should (equal '((:one "1" :three "3" :two "2"))
+                                              '((:one "1")))))))
+        (want-body "\
+Selector: <failing-test>
+Passed:  0
+Failed:  1 (1 unexpected)
+Skipped: 0
+Total:   1/1
+
+Started at:   @@TIMESTAMP@@
+Finished.
+Finished at:  @@TIMESTAMP@@
+
+F
+
+F failing-test
+    (ert-test-failed
+     ((should (equal '((:one \"1\" :three \"3\" :two \"2\")) '((:one \"1\"))))
+      :form (equal ((:one \"1\" :three \"3\" :two \"2\")) ((:one \"1\"))) :value
+      nil :explanation
+      (list-elt 0
+                (proper-lists-of-different-length 6 2
+                                                  (:one \"1\" :three \"3\"
+                                                        :two \"2\")
+                                                  (:one \"1\")
+                                                  first-mismatch-at 2))))
+\n\n")
+        (want-msg "Ran 1 tests, 0 results were as expected, 1 unexpected")
+        (buffer-name (generate-new-buffer-name " *ert-test-run-tests*")))
+    (cl-letf* ((ert-debug-on-error nil)
+               (ert--output-buffer-name buffer-name)
+               (messages nil)
+               ((symbol-function 'message)
+                (lambda (format-string &rest args)
+                  (push (apply #'format format-string args) messages)))
+               ((symbol-function 'ert--format-time-iso8601)
+                (lambda (_) "@@TIMESTAMP@@")))
+      (save-window-excursion
+        (unwind-protect
+            (let ((case-fold-search nil))
+              (ert-run-tests-interactively failing-test)
+              (should (equal (list want-msg) messages))
+              (should (equal (string-replace "\t" "        "
+                                             (with-current-buffer buffer-name
+                                               (buffer-string)))
+                             want-body)))
+          (when noninteractive
+            (kill-buffer buffer-name)))))))
+
 (provide 'ert-tests)
 
 ;;; ert-tests.el ends here
-- 
2.46.0


             reply	other threads:[~2024-08-10 13:48 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-10 13:48 J.P. [this message]
2024-08-15  8:33 ` bug#72561: 31.0.50; Scan error in ert--pp-with-indentation-and-newline Eli Zaretskii
2024-08-21 21:41 ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-22  0:28   ` J.P.
2024-08-22  1:21     ` J.P.
2024-08-22 13:43       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-08-23  1:02         ` J.P.
2024-08-23  6:31           ` Eli Zaretskii
2024-08-29  3:48             ` J.P.

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87v808o5es.fsf@neverwas.me \
    --to=jp@neverwas.me \
    --cc=72561@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).