Subject: bug#76372: 31.0.50; False () in ert-font-lock macro signatures

From: Vladimir Kazanov <[email-masked]>
Date: Tue, 18 Feb 2025 19:41:08 +0000

Hi Basil,

Thanks for taking a look at ert-font-lock! I am on vacation right now
so only have time for a brief review of the patch.

So here are a couple of comments/questions for the patch:

-      (when (not (listp actual-face))
-        (setq actual-face (list actual-face)))
-      (when (not (listp expected-face))
-        (setq expected-face (list expected-face)))
+      (setq actual-face (ensure-list actual-face))
+      (setq expected-face (ensure-list expected-face))

This is cool!

-     (insert ,str)
      (,mode)
+     (insert ,str)

Not saying this is wrong but looks like something that might change
things subtly. Do tests pass?

> -  (skip-unless (featurep 'php-mode))
> +  (skip-unless (fboundp 'php-mode))

What difference does it make? featurep vs fboundp?

> -    "Test reading correct assertions from a file"
> +  "Test reading correct assertions from a file"

Similar to other docstrings, this asks for a period in the end.

Otherwise, great to see my rusty Elisp and non-native English cleaned up a bit.

Thanks
Vlad

On Mon, 17 Feb 2025 at 20:38, Basil L. Contovounesios
<[email-masked]> wrote:
>
> 0. emacs -Q
> 1. C-h f ert-font-lock-deftest RET
>
> *Help* now reports the macro's calling convention as:
>
>   (ert-font-lock-deftest NAME () [DOCSTRING] ...)
>
> but the second () argument is not actually supported by the macro, whose
> arglist reads:
>
>   (name &rest docstring-keys-mode-and-str)
>
> Here, ert-font-lock--parse-macro-args expects
> docstring-keys-mode-and-str to start with an (optional) string,
> not the empty arglist '().
>
> The symptom of this mismatch is that calls to ert-font-lock-deftest are
> misindented (malindented? :) and misfontified.  For example, in
> ert-font-lock-tests.el:
>
>   (ert-font-lock-deftest test-macro-test--correct-highlighting
>       emacs-lisp-mode
>     "
>   (defun fun ())
>   ;; ^ font-lock-keyword-face
>   ;;      ^ font-lock-function-name-face")
>
> Here, the string literal has font-lock-doc-face instead of
> font-lock-string-face.
>
>   (ert-font-lock-deftest test-macro-test--docstring
>       "A test with a docstring."
>     emacs-lisp-mode
>     "
>   (defun fun ())
>   ;; ^ font-lock-keyword-face"
>     )
>
> Here, both strings have font-lock-string-face, whereas the first should
> have font-lock-doc-face.
>
> Finally, if a test actually followed ert-font-lock-deftest's docstring
> in including an empty arglist (), then ert-describe-test would claim
> that it is not documented.
>
> The attached patch tries to address these issues.
> WDYT?
>
> Thanks,
> --
> Basil
>
>
> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
>  version 1.18.2, Xaw3d scroll bars) of 2025-02-16 built on tais
> Repository revision: fc189cb83cf7284344a737e75b3ee56487b1c386
> Repository branch: master
> Windowing system distributor 'The X.Org Foundation', version 11.0.12101015
> System Description: Debian GNU/Linux trixie/sid
>
> Configured using:
>  'configure 'CFLAGS=-Og -ggdb3' -C --prefix=/home/blc/.local
>  --enable-checking=structs --without-native-compilation
>  --with-file-notification --with-x-toolkit=lucid --with-x'
>
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
> LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY
> INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
> TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM XINERAMA XINPUT2
> XPM XRANDR LUCID ZLIB
>
> Important settings:
>   value of $LANG: en_IE.UTF-8
>   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 emacsbug message mailcap yank-media puny dired
> dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
> epg-config gnus-util time-date mm-decode mm-bodies mm-encode mail-parse
> rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
> ietf-drums mm-util mail-prsvr mail-utils cl-extra shortdoc
> text-property-search comp-common rx ert-font-lock pcase ert-x subr-x ert
> map pp ewoc debug backtrace find-func thingatpt help-fns byte-opt gv
> bytecomp byte-compile radix-tree help-mode cl-loaddefs cl-lib 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 x-toolkit xinput2 x multi-tty move-toolbar
> make-network-process tty-child-frames emacs)
>
> Memory information:
> ((conses 16 75191 9165) (symbols 48 7566 0) (strings 32 22214 1377)
>  (string-bytes 1 522717) (vectors 16 13949)
>  (vector-slots 8 148704 7756) (floats 8 87 2) (intervals 56 318 7)
>  (buffers 992 11))

-- 
Regards,

Vladimir Kazanov