Subject: bug#79257: 31.0.50; flymake's ruby-backend test fails with ruby 3.4.5

From: john muhl <[email-masked]>
Date: Sat, 16 Aug 2025 15:17:28 -0500

The test passes with Ruby 3.3.8:

$ ruby --version
ruby 3.3.8 (2025-04-09 revision b200bad6cd) [x86_64-linux-gnu]

$ make -C test lisp/progmodes/flymake-tests.log
make: Entering directory '/root/emacs/test'
  GEN      lisp/progmodes/flymake-tests.log
make: Leaving directory '/root/emacs/test'

$ cat test/lisp/progmodes/flymake-tests.log
Running 10 tests (2025-08-16 20:14:31+0000, selector `(not (or (tag :unstable) (tag :nativecomp)))')
   passed   1/10  different-diagnostic-types (1.064348 sec)
   passed   2/10  dummy-backends (1.001868 sec)
   passed   3/10  eob-region-and-trailing-newline (0.000263 sec)
   passed   4/10  foreign-diagnostics (2.039984 sec)
   passed   5/10  included-c-header-files (2.038547 sec)
   passed   6/10  perl-backend (1.013309 sec)
   passed   7/10  recurrent-backend (1.002002 sec)
   passed   8/10  ruby-backend (1.015112 sec)
   passed   9/10  warning-predicate-function-gcc (1.017387 sec)
   passed  10/10  warning-predicate-rx-gcc (1.019503 sec)

Ran 10 tests, 10 results as expected, 0 unexpected (2025-08-16 20:14:42+0000, 11.213646 sec)

Then fails with 3.4.5:

$ ruby --version
ruby 3.4.5 (2025-07-16 revision 20cda200d3) +PRISM [x86_64-linux]

$ make -C test lisp/progmodes/flymake-tests.log
make[1]: Entering directory '/root/emacs/test'
  GEN      lisp/progmodes/flymake-tests.log
Running 10 tests (2025-08-16 20:09:51+0000, selector `(not (or (tag :unstable) (tag :nativecomp)))')
   passed   1/10  different-diagnostic-types (1.066408 sec)
   passed   2/10  dummy-backends (1.001843 sec)
   passed   3/10  eob-region-and-trailing-newline (0.000216 sec)
   passed   4/10  foreign-diagnostics (2.041202 sec)
   passed   5/10  included-c-header-files (2.038718 sec)
   passed   6/10  perl-backend (1.014080 sec)
   passed   7/10  recurrent-backend (1.002050 sec)
Test ruby-backend backtrace:
  signal(ert-test-failed (((should (eq 'flymake-error (face-at-point))
  ert-fail(((should (eq 'flymake-error (face-at-point))) :form (eq fly
  (if (unwind-protect (setq value-41 (apply fn-39 args-40)) (setq form
  (let (form-description-43) (if (unwind-protect (setq value-41 (apply
  (let ((value-41 'ert-form-evaluation-aborted-42)) (let (form-descrip
  (let* ((fn-39 #'eq) (args-40 (condition-case err (list 'flymake-erro
  #f(lambda () [t] (flymake-goto-next-error) (let* ((fn-34 #'eq) (args
  funcall(#f(lambda () [t] (flymake-goto-next-error) (let* ((fn-34 #'e
  (save-excursion (if sev-pred-supplied-p (progn (setq flymake-proc-di
  (save-current-buffer (set-buffer buffer) (save-excursion (if sev-pre
  (unwind-protect (save-current-buffer (set-buffer buffer) (save-excur
  (let* ((file (expand-file-name file flymake-tests-data-directory)) (
  (progn (let ((--cl-keys-- --cl-rest--)) (while --cl-keys-- (cond ((m
  (let* ((sev-pred-supplied-p (plist-member --cl-rest-- ':severity-pre
  flymake-tests--call-with-fixture(#f(lambda () [t] (flymake-goto-next
  (let* ((process-environment (cons (format "HOME=%s" tempdir) process
  (progn (let* ((process-environment (cons (format "HOME=%s" tempdir) 
  (unwind-protect (progn (let* ((process-environment (cons (format "HO
  (let* ((coding-system-for-write nil) (temp-file (file-name-as-direct
  #f(lambda () [ruby-mode-hook t] (let* ((fn-29 #'executable-find) (ar
  #f(compiled-function () #<bytecode 0xf2de8ace0c80c71>)()
  handler-bind-1(#f(compiled-function () #<bytecode 0xf2de8ace0c80c71>
  ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
  ert-run-test(#s(ert-test :name ruby-backend :documentation "Test the
  ert-run-or-rerun-test(#s(ert--stats :selector ... :tests ... :test-m
  ert-run-tests((not (or (tag :unstable) (tag :nativecomp))) #f(compil
  ert-run-tests-batch((not (or (tag :unstable) (tag :nativecomp))))
  ert-run-tests-batch-and-exit((not (or (tag :unstable) (tag :nativeco
  eval((ert-run-tests-batch-and-exit '(not (or (tag :unstable) (tag :n
  command-line-1(("-L" ":." "-l" "ert" "--eval" "(setq treesit-extra-l
  command-line()
  normal-top-level()
Test ruby-backend condition:
    (ert-test-failed
     ((should (eq 'flymake-error (face-at-point))) :form
      (eq flymake-error flymake-warning) :value nil))
   FAILED   8/10  ruby-backend (1.013506 sec) at lisp/progmodes/flymake-tests.el:123
   passed   9/10  warning-predicate-function-gcc (1.017136 sec)
   passed  10/10  warning-predicate-rx-gcc (1.019550 sec)

Ran 10 tests, 9 results as expected, 1 unexpected (2025-08-16 20:10:02+0000, 11.275721 sec)

1 unexpected results:
   FAILED  ruby-backend