Package: emacs;
Reported by: Joe <jjbigorra <at> gmail.com>
Date: Wed, 20 Aug 2025 21:55:02 UTC
Severity: normal
Found in version 30.1
View this message in rfc822 format
From: Joe <jjbigorra <at> gmail.com> To: 79282 <at> debbugs.gnu.org Subject: bug#79282: 30.1; scheme-mode docstrings not highlighting with font-lock-doc-face Date: Wed, 20 Aug 2025 23:54:37 +0200
--- Dear Emacs Maintainers, I am writing to report an issue I've observed in scheme-mode, specifically concerning the highlighting of docstrings. In scheme-mode (which inherits from lisp-mode), docstrings are currently being displayed as regular strings, using `font-lock-string-face', instead of being highlighted with `font-lock-doc-face'. I expected docstrings in Scheme code, similar to those in Elisp or Common Lisp modes, should be highlighted distinctly using `font-lock-doc-face' for better readability and semantic distinction. I noticed in Elisp and Common Lisp this works perfectly, for all forms and variants (variables, defmethods, defun, etc.) The problem is, when defining functions or macros in scheme-mode with a docstring, the docstring string literal is treated identically to any other string literal in terms of font locking. I am a bit of a newbie when it comes to the lower levels of Emacs, and its modes, but I have looked into the source code of scheme-mode and it appears to contain the necessary functionality to correctly identify and highlight docstrings. For instance, I found lines such as : (put 'define* 'scheme-doc-string-elt 2) which seems to properly register docstring elements for font locking. This suggests that the mechanism for identifying docstrings is in place, but perhaps the application of font-lock-doc-face isn't occurring as intended, or there's an interaction issue with lisp-mode's inheritance. Example (for illustration and clarity purposes): (define (my-function arg) "This is a docstring for my-function." (+ arg 1)) In the example above, the string "This is a docstring for my-function." now appears with the font-lock-string-face , when it should instead be using font-lock-doc-face. I run Emacs on Guix btw. I would appreciate it if you could investigate this issue. Thank you for your time and dedication to maintaining the allmighty Emacs. Best regards, Josep Bigorra --- In GNU Emacs 30.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.43, cairo version 1.18.4) System Description: Guix System Configured using: 'configure CONFIG_SHELL=/gnu/store/nnx8iifrj6jfih4sivivq17cf65aa968-bash-minimal-5.2.37/bin/bash SHELL=/gnu/store/nnx8iifrj6jfih4sivivq17cf65aa968-bash-minimal-5.2.37/bin/bash --prefix=/gnu/store/mx2ca3l10v0vwj0izgrs2sqzpfqrshn9-emacs-pgtk-30.1 --enable-fast-install --with-pgtk --with-cairo --with-modules --with-native-compilation=aot 'CFLAGS=-g -O2 -Wno-error=incompatible-pointer-types' --disable-build-details' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB Important settings: value of $EMACSLOADPATH: /run/current-system/profile/share/emacs/site-lisp:/gnu/store/mx2ca3l10v0vwj0izgrs2sqzpfqrshn9-emacs-pgtk-30.1/share/emacs/30.1/lisp value of $LANG: nl_NL.UTF-8 locale-coding-system: utf-8-unix Major mode: Scheme Minor modes in effect: display-fill-column-indicator-mode: t smartparens-mode: t corfu-popupinfo-mode: t corfu-history-mode: t global-corfu-mode: t corfu-mode: t super-save-mode: t global-git-commit-mode: t server-mode: t ultra-scroll-mode: t pixel-scroll-precision-mode: t nerd-icons-completion-mode: t marginalia-mode: t vertico-mode: t keycast-mode: t spacious-padding-mode: t pulsar-global-mode: t pulsar-mode: t emms-mode-line-mode: t emms-playing-time-display-mode: t emms-playing-time-mode: t elmacro-mode: t diff-hl-margin-local-mode: t diff-hl-margin-mode: t global-diff-hl-mode: t diff-hl-mode: t arei-mode: t fancy-compilation-mode: t sly-symbol-completion-mode: t jinx-mode: t erc-track-mode: t erc-spelling-mode: t erc-ring-mode: t erc-notifications-mode: t erc-netsplit-mode: t erc-menu-mode: t erc-match-mode: t erc-list-mode: t erc-irccontrols-mode: t erc-move-to-prompt-mode: t erc-readonly-mode: t erc-imenu-mode: t erc-button-mode: t erc-fill-mode: t erc-stamp-mode: t erc-autojoin-mode: t erc-services-mode: t erc-networks-mode: t global-hl-line-mode: t recentf-mode: t windmove-mode: t delete-selection-mode: t global-auto-revert-mode: t save-place-mode: t savehist-mode: t which-key-mode: t elpaca-use-package-mode: t override-global-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t global-prettify-symbols-mode: t prettify-symbols-mode: t file-name-shadow-mode: t context-menu-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t minibuffer-regexp-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/joe/.emacs.d/elpaca/builds/compat/compat hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat /home/joe/.emacs.d/elpaca/builds/compat/compat-macs hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-macs /home/joe/.emacs.d/elpaca/builds/compat/compat-autoloads hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-autoloads /home/joe/.emacs.d/elpaca/builds/compat/compat-30 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-30 /home/joe/.emacs.d/elpaca/builds/compat/compat-29 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-29 /home/joe/.emacs.d/elpaca/builds/compat/compat-28 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-28 /home/joe/.emacs.d/elpaca/builds/compat/compat-27 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-27 /home/joe/.emacs.d/elpaca/builds/compat/compat-26 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-26 /home/joe/.emacs.d/elpaca/builds/compat/compat-25 hides /gnu/store/y118fz0hp27mkyzmgpg4p5jv98n5ibdh-emacs-compat-30.0.2.0/share/emacs/site-lisp/compat-30.0.2.0/compat-25 /home/joe/.emacs.d/elpaca/builds/transient/transient hides /gnu/store/mx2ca3l10v0vwj0izgrs2sqzpfqrshn9-emacs-pgtk-30.1/share/emacs/30.1/lisp/transient /home/joe/.emacs.d/elpaca/builds/ef-themes/theme-loaddefs hides /gnu/store/mx2ca3l10v0vwj0izgrs2sqzpfqrshn9-emacs-pgtk-30.1/share/emacs/30.1/lisp/theme-loaddefs /home/joe/.emacs.d/elpaca/builds/compat/compat hides /gnu/store/mx2ca3l10v0vwj0izgrs2sqzpfqrshn9-emacs-pgtk-30.1/share/emacs/30.1/lisp/emacs-lisp/compat Features: (shadow mail-extr emacsbug tramp-cmds tempel bug-reference magit-extras cl-print embark-org embark-consult embark dabbrev cape eglot external-completion jsonrpc ert debug backtrace vertico-sort make-mode org-indent org-auto-tangle ox-odt rng-loc rng-uri rng-parse rng-match rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox org-attach async oc-basic org-element org-persist org-id org-refile org-element-ast inline avl-tree ol-eww eww url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader range ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi geiser-mode geiser-xref geiser-compile mule-util consult magit-bookmark bookmark descr-text dired-subtree vc-hg vc-git vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs nerd-icons-dired disp-table ef-winter-theme ef-tritanopia-dark-theme ef-trio-dark-theme ef-symbiosis-theme ef-rosa-theme ef-owl-theme ef-night-theme ef-melissa-dark-theme ef-maris-dark-theme ef-elea-dark-theme ef-duo-dark-theme ef-dream-theme ef-deuteranopia-dark-theme ef-dark-theme ef-cherie-theme ef-bio-theme ef-autumn-theme ef-tritanopia-light-theme ef-trio-light-theme ef-summer-theme ef-spring-theme ef-reverie-theme ef-melissa-light-theme ef-maris-light-theme ef-light-theme ef-kassio-theme ef-frost-theme ef-elea-light-theme ef-eagle-theme ef-duo-light-theme ef-deuteranopia-light-theme ef-day-theme ef-cyprus-theme ef-arbutus-theme time welkomscherm aggressive-indent checkdoc flymake display-fill-column-indicator smartparens-config smartparens-javascript smartparens-rust smartparens-org smartparens-text smartparens-go smartparens-c smartparens advice loadhist corfu-popupinfo corfu-history kind-icon corfu move-text orderless mermaid-mode rainbow-mode super-save magit-submodule magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff git-commit log-edit message sendmail yank-media rfc822 mml mml-sec epa gnus-util mm-decode mailabbrev gmm-utils add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor server magit-mode benchmark magit-git magit-base magit-section cursor-sensor crm llama ultra-scroll pixel-scroll cua-base nerd-icons-completion marginalia vertico modusregel keycast svg-lib svg spacious-padding nerd-icons nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon nerd-icons-data-powerline nerd-icons-data-octicon nerd-icons-data-pomicon nerd-icons-data-ipsicon tekengrootte olivetti face-remap pulsar dracula-theme gruvbox-theme gruvbox autothemer solarized-theme solarized solarized-faces ef-themes ripgrep grep ob-mermaid ob-http ob-http-mode org-present emms-idapi-browser emms-idapi emms-idapi-musicbrainz mm-bodies mm-encode emms-librefm-stream emms-librefm-scrobbler emms-playlist-limit emms-i18n emms-history emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks emms-cue emms-mode-line-icon emms-player-xine emms-player-mpd emms-lyrics emms-url emms-streams emms-show-all emms-tag-editor emms-tag-tracktag emms-mark emms-mode-line emms-info-native emms-info-native-spc emms-info-native-mp3 emms-info-native-ogg emms-info-native-opus emms-info-native-flac emms-info-native-vorbis bindat emms-info-exiftool emms-info-tinytag emms-info-metaflac emms-info-opusinfo emms-info-ogginfo emms-info-mp3info emms-player-vlc emms-player-mplayer emms-mpris emms-browser emms-filters sort emms-playlist-sort emms-last-played emms-volume emms-volume-mpv emms-player-mpv emms-playing-time emms-player-simple emms-volume-sndioctl emms-volume-mixerctl emms-volume-pulse emms-volume-amixer emms-playlist-mode emms-source-playlist emms-source-file locate emms-cache emms-info emms-later-do emms-setup emms emms-compat smudge smudge-connect smudge-dbus smudge-remote smudge-device-select smudge-playlist smudge-track smudge-controller smudge-api oauth2 plstore epg rfc6068 epg-config simple-httpd fretboard hi-lock pandoc-mode pandoc-mode-utils hydra lv guix speed-type dom url-http url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm puny gptel-gemini gptel gptel-openai git-riddance prodigy elmacro page-break-lines f go-mode find-file ffap dired-open-with dired-hacks-utils dired-aux swagg s org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie executable ob-comint org-pcomplete org-list org-footnote org-faces org-entities noutline outline org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs cal-menu calendar cal-loaddefs org-compat org-macs yaml dash json-mode json-snatcher js c-ts-common treesit cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs request mailheader mail-utils diff-hl-margin diff-hl-dired dired dired-loaddefs diff-hl log-view pcvs-util vc-dir ewoc diff-mode track-changes geiser-guile tramp trampver tramp-integration files-x tramp-message tramp-compat xdg shell parse-time iso8601 tramp-loaddefs info-look transient geiser-debug geiser-repl geiser-image geiser-capf geiser-doc geiser-menu geiser-autodoc geiser-edit geiser-completion geiser-eval geiser-connection tq geiser-syntax geiser-impl help-fns radix-tree geiser-log geiser-popup view geiser-custom geiser-base geiser arei scheme arei-meta-commands arei-logging arei-macroexpansion arei-module arei-evaluation arei-debugger arei-stack arei-ui eros pulse color arei-spinner arei-completion arei-xref arei-eldoc arei-syntax arei-client sesman vc vc-dispatcher arei-nrepl queue package-lint let-alist finder finder-inf find-func lisp-mnt package url-handlers inheritenv rust-utils rust-prog-mode rust-mode rust-playpen rust-cargo rust-common rust-rustfmt rust-compile fancy-compilation compile text-property-search cus-start sly info sly-completion derived sly-buttons sly-messages sly-common apropos etags fileloop generator xref arc-mode archive-mode hyperspec thingatpt cape-autoloads helpful-autoloads elisp-refs-autoloads corfu-autoloads move-text-autoloads orderless-autoloads mermaid-mode-autoloads rainbow-mode-autoloads super-save-autoloads tempel-autoloads magit-autoloads pcase with-editor-autoloads embark-consult-autoloads embark-autoloads ultra-scroll-autoloads marginalia-autoloads vertico-autoloads keycast-autoloads modusregel-autoloads kind-icon-autoloads svg-lib-autoloads spacious-padding-autoloads nerd-icons-completion-autoloads tekengrootte-autoloads olivetti-autoloads pulsar-autoloads dracula-theme-autoloads gruvbox-theme-autoloads autothemer-autoloads everforest-autoloads everforest-theme solarized-theme-autoloads ef-themes-autoloads deadgrep-autoloads spinner-autoloads ripgrep-autoloads ob-mermaid-autoloads ob-http-autoloads org-auto-tangle-autoloads async-autoloads org-present-autoloads org-roam-ui-autoloads org-roam-autoloads emacsql-autoloads magit-section-autoloads llama-autoloads websocket-autoloads emms-autoloads smudge-autoloads simple-httpd-autoloads oauth2-autoloads fretboard-autoloads pandoc-mode-autoloads hydra-autoloads lv-autoloads guix-autoloads bui-autoloads edit-indirect-autoloads speed-type-autoloads gptel-autoloads dagboek-autoloads git-riddance-autoloads prodigy-autoloads osm-autoloads elmacro-autoloads f-autoloads go-mode-autoloads nerd-icons-dired-autoloads nerd-icons-autoloads dired-open-with-autoloads dired-subtree-autoloads dired-hacks-utils-autoloads swagg-autoloads yaml-autoloads json-mode-autoloads json-snatcher-autoloads flymake-collection-autoloads request-autoloads markdown-mode-autoloads diff-hl-autoloads fancy-compilation-autoloads geiser-guile-autoloads geiser-autoloads arei-autoloads eros-autoloads sesman-autoloads queue-autoloads docker-autoloads aio-autoloads s-autoloads tablist-autoloads transient-autoloads aggressive-indent-autoloads direnv-autoloads smartparens-autoloads yaml-mode-autoloads toml-mode-autoloads nix-ts-mode-autoloads typescript-mode-autoloads lua-mode-autoloads scala-ts-mode-autoloads haskell-mode-autoloads python-black-autoloads dash-autoloads reformatter-autoloads package-lint-autoloads inheritenv-autoloads rust-mode-autoloads welkomscherm-autoloads page-break-lines-autoloads consult-autoloads sly-autoloads sss/ui sss/theme sss/shell sss/search sss/org sss/music sss/misc jinx sss/maps sss/mail sss/macros sss/libs sss/go sss/erc erc-track erc-spelling flyspell ispell erc-ring erc-desktop-notifications notifications dbus xml erc-netsplit erc-menu erc-match erc-list erc-goodies erc-imenu imenu erc-pcomplete time-date pcomplete comint ansi-osc ansi-color ring erc-button browse-url erc-fill erc-stamp erc-join erc-services erc format-spec erc-backend erc-networks erc-common erc-compat compat erc-loaddefs sss/emacs-self hl-line recentf tree-widget comp comp-cstr warnings comp-run comp-common rx windmove delsel autorevert filenotify saveplace savehist which-key project sss/eglot edmacro kmacro sss/dired sss/dev sss/dashboard elpaca-menu-elpa cus-edit pp cus-load wid-edit sss/consult cl-extra help-mode sss/common-lisp elpaca-menu-melpa elpaca-menu-org sss/sss elpaca-use-package use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core elpaca-use-package-autoloads elpaca-log elpaca-ui url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util url-parse auth-source eieio eieio-core cl-macs icons password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars mailcap cl-seq elpaca elpaca-process cl-loaddefs cl-lib elpaca-autoloads compat-autoloads jinx-autoloads guix-emacs rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win touch-screen pgtk-dnd 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 dynamic-setting system-font-setting font-render-setting cairo gtk pgtk lcms2 multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 1963766 1295124) (symbols 48 104934 3) (strings 32 500698 60836) (string-bytes 1 12512495) (vectors 16 119041) (vector-slots 8 2150724 889033) (floats 8 9211 1588) (intervals 56 6836 5804) (buffers 992 42))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.