GNU bug report logs -
#77733
31.0.50; Issue with treesit-range-settings and multiple grammars
Previous Next
Reported by: Roman Rudakov <rrudakov <at> fastmail.com>
Date: Fri, 11 Apr 2025 09:55:02 UTC
Severity: normal
Fixed in version 31.0.50
Done: Juri Linkov <juri <at> linkov.net>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 77733 in the body.
You can then email your comments to 77733 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#77733
; Package
emacs
.
(Fri, 11 Apr 2025 09:55:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Roman Rudakov <rrudakov <at> fastmail.com>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Fri, 11 Apr 2025 09:55:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
The easiest way to reproduce this issue is to install clojure-ts-mode
from NonGNU ELPA. inline-markdown is used to highlight Markdown syntax
in docstrings, and it functions correctly when the Markdown is
valid. However, if the Markdown syntax within a docstring is incorrect
(for example, unbalanced backticks), the syntax highlighting breaks
even beyond the docstring.
We use the following range setting for inline markdown:
(treesit-range-rules
:embed 'markdown-inline
:host 'clojure
(clojure-ts--docstring-query '@capture))
The query captures docstrings correctly.
Steps to reproduce starting from 'emacs -Q':
1. Evaluate in the *scratch* buffer:
(package-initialize)
(package-install 'clojure-ts-mode)
(require 'clojure-ts-mode)
2. Open attached file bug.clj
3. Remove one of backticks from the first docstring.
Expected result: syntax highlighting of the Clojure code is not
affected.
Actual result: part of the Clojure code is highlighted with the face
defined for markdown code_span query. Image attached.
P.S. There is a possibility that an issue within clojure-ts-mode is
the cause. Any advice on how to resolve this would be
appreciated. Thank you in advance.
[bug.clj (text/plain, attachment)]
[Screenshot 2025-04-11 at 11.49.09.png (image/png, attachment)]
[Message part 4 (text/plain, inline)]
In GNU Emacs 31.0.50 (build 1, aarch64-apple-darwin24.3.0, NS
appkit-2575.40 Version 15.3.2 (Build 24D81)) of 2025-04-03 built on
macbookpro.home
Windowing system distributor 'Apple', version 10.3.2575
System Description: macOS 15.4
Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
--infodir=/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/info/emacs
--prefix=/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50
--with-native-compilation=aot --with-xml2 --with-gnutls
--without-compress-install --without-dbus --without-imagemagick
--with-modules --with-rsvg --with-webp --without-pop --with-ns
--disable-ns-self-contained 'CFLAGS=-O2 -DFD_SETSIZE=10000
-DDARWIN_UNLIMITED_SELECT -I/opt/homebrew/opt/sqlite/include
-I/opt/homebrew/opt/gcc/include
-I/opt/homebrew/opt/libgccjit/include'
'LDFLAGS=-L/opt/homebrew/opt/sqlite/lib -L/opt/homebrew/lib/gcc/14
-I/opt/homebrew/opt/gcc/include
-I/opt/homebrew/opt/libgccjit/include''
Configured features:
ACL GIF GLIB GMP GNUTLS JPEG LCMS2 LIBXML2 MODULES NATIVE_COMP NOTIFY
KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER WEBP XIM ZLIB
Important settings:
value of $LANG: en_US.UTF-8
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
idle-highlight-mode: t
subword-mode: t
yas-minor-mode: t
hl-todo-mode: t
flymake-mode: t
server-mode: t
pdf-occur-global-minor-mode: t
mu4e-column-faces-mode: t
mu4e-modeline-mode: t
auto-insert-mode: t
electric-pair-mode: t
org-roam-db-autosync-mode: t
outline-minor-mode: t
minions-mode: t
repeat-mode: t
save-place-mode: t
minibuffer-electric-default-mode: t
savehist-mode: t
recentf-mode: t
global-auto-revert-mode: t
global-hl-line-mode: t
apheleia-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tab-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
window-divider-mode: t
minibuffer-regexp-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
hs-minor-mode: t
Load-path shadows:
/Users/rrudakov/.config/emacs/elpa/ef-themes-1.9.0/theme-loaddefs
hides
/Users/rrudakov/.config/emacs/elpa/modus-themes-4.6.0/theme-loaddefs
/Users/rrudakov/.config/emacs/elpa/magit-4.3.2/magit-autorevert hides
/Users/rrudakov/.config/emacs/elpa/magit-section-4.3.2/magit-autorevert
/Users/rrudakov/.config/emacs/elpa/password-store-20231201.954/password-store
hides /opt/homebrew/share/emacs/site-lisp/pass/password-store
/Users/rrudakov/.config/emacs/elpa/transient-0.8.7/transient hides
/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/emacs/31.0.50/lisp/transient
/Users/rrudakov/.config/emacs/elpa/ef-themes-1.9.0/theme-loaddefs
hides
/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/emacs/31.0.50/lisp/theme-loaddefs
Features:
(shadow sort face-remap mail-extr emacsbug idle-highlight-mode
cap-words
superword subword hideshow yasnippet ef-maris-dark-theme ef-themes
cus-start hl-todo checkdoc lisp-mnt flymake server github org-git
ghub-graphql treepy gsexp ghub url-http url-gw nsm url-auth
google-translate-smooth-ui google-translate-core-ui facemenu color
popup
google-translate-core google-translate-backend use-package-ensure
pdf-occur tablist tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local cedet pdf-isearch
let-alist pdf-misc pdf-tools pdf-view jka-compr pdf-cache pdf-info tq
pdf-util pdf-macs image-mode exif ob-restclient restclient
mu4e-column-faces mu4e-icalendar gnus-icalendar icalendar mu4e
mu4e-org
mu4e-notification notifications mu4e-main smtpmail mu4e-view
mu4e-mime-parts mu4e-headers mu4e-thread mu4e-actions mu4e-compose
mu4e-draft gnus-msg mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
mu4e-helpers mu4e-config mu4e-window bookmark ido mu4e-obsolete
yaml-ts-mode dockerfile-ts-mode rust-ts-mode typescript-ts-mode js
c-ts-common imenu cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs vlf-setup vlf vlf-base vlf-tune
autoinsert rg files-x vc vc-dispatcher rg-info-hack rg-menu transient
edmacro kmacro rg-ibuffer rg-result wgrep-rg wgrep rg-history
rg-header
ibuf-ext ibuffer ibuffer-loaddefs grep compile elec-pair
emacsql-sqlite-builtin org-roam-migrate org-roam-log org-roam-mode
org-roam-capture org-roam-id org-roam-node crm org-roam-db
org-roam-utils org-roam-compat org-roam org-capture emacsql-sqlite
emacsql emacsql-compiler magit-section cursor-sensor llama comp
comp-cstr dash async ob-async ob-plantuml ob-ditaa ob-clojure
ob-haskell
ob-sqlite ob-shell shell ob-sql ob-python python project org-clock
appt
diary-lib diary-loaddefs org-duration comp-run comp-common flyspell
ispell oc-basic bibtex disp-table ol-info ol-gnus nnselect gnus-art
mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum
shr-tag-pre-highlight language-detection shr pixel-fill kinsoku
url-file
svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud
nnimap nnmail mail-source utf7 nnoo parse-time iso8601 gnus-spec
gnus-int gnus-range message sendmail yank-media puny dired
dired-loaddefs rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util
mail-utils range mm-util mail-prsvr ox-gfm ox-md 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 ox-html table ox-ascii
ox-publish ox org-attach org-agenda org-element org-persist org-id
org-element-ast inline avl-tree generator org-refile org ob ob-tangle
ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie treesit
shortdoc text-property-search derived executable ob-comint
org-pcomplete
pcomplete org-list org-footnote org-faces org-entities time-date
noutline outline org-version ob-emacs-lisp ob-core ob-eval org-cycle
org-table org-keys oc org-loaddefs thingatpt find-func cal-menu
calendar
cal-loaddefs ol org-fold org-fold-core org-compat org-macs format-spec
exec-path-from-shell minions compat warnings repeat hippie-exp comint
ansi-osc ansi-color ring advice saveplace minibuf-eldef savehist
recentf
tree-widget cl-extra help-mode autorevert filenotify use-package-core
hl-line finder-inf add-node-modules-path-autoloads alert-autoloads
apheleia-autoloads easy-mmode auctex-autoloads tex-site
buttercup-autoloads clj-refactor-autoloads cider-autoloads
clojure-mode-autoloads clojure-ts-mode-autoloads csv-mode-autoloads
debbugs-autoloads dired-git-info-autoloads dired-subtree-autoloads
dired-hacks-utils-autoloads dtrt-indent-autoloads
edit-indirect-autoloads ef-themes-autoloads eldev-autoloads
elfeed-autoloads emacs-everywhere-autoloads emmet-mode-autoloads
exec-path-from-shell-autoloads expand-region-autoloads
flymake-kondor-autoloads flyspell-correct-autoloads ghub-autoloads
git-link-autoloads gitignore-templates-autoloads gntp-autoloads
google-c-style-autoloads google-translate-autoloads
groovy-mode-autoloads haskell-mode-autoloads hl-todo-autoloads
hydra-autoloads idle-highlight-mode-autoloads inflections-autoloads
log4e-autoloads logview-autoloads datetime-autoloads extmap-autoloads
lua-mode-autoloads lv-autoloads magit-autoloads pcase
markdown-mode-autoloads minions-autoloads modus-themes-autoloads
mu4e-column-faces-autoloads multiple-cursors-autoloads
nginx-mode-autoloads nov-autoloads esxml-autoloads kv-autoloads
ob-async-autoloads async-autoloads ob-restclient-autoloads
org-roam-autoloads magit-section-autoloads llama-autoloads
emacsql-autoloads org-tree-slide-autoloads ox-jira-autoloads
ox-slack-autoloads ox-gfm-autoloads paredit-autoloads
parseedn-autoloads
parseclj-autoloads password-store-otp-autoloads
password-store-autoloads
pdf-tools-autoloads pip-requirements-autoloads pkgbuild-mode-autoloads
plantuml-mode-autoloads dash-autoloads popup-autoloads
pyvenv-autoloads
queue-autoloads rainbow-mode-autoloads restclient-autoloads
rg-autoloads
s-autoloads sesman-autoloads shr-tag-pre-highlight-autoloads
language-detection-autoloads sly-autoloads spinner-autoloads
sql-indent-autoloads ssh-config-mode-autoloads rx tablist-autoloads
telega-autoloads transient-autoloads treepy-autoloads
vimrc-mode-autoloads visual-fill-column-autoloads vlf-autoloads
web-mode-autoloads wgrep-autoloads info with-editor-autoloads
yasnippet-autoloads package browse-url xdg url url-proxy url-privacy
url-expand url-methods url-history url-cookie generate-lisp-file
url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv
bytecomp byte-compile url-vars cus-edit pp cus-load icons wid-edit
cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric
uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel
term/ns-win ns-win ucs-normalize mule-util term/common-win 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 kqueue cocoa ns lcms2
multi-tty make-network-process tty-child-frames native-compile emacs)
Memory information:
((conses 16 843676 75192) (symbols 48 51547 9)
(strings 32 250596 10331) (string-bytes 1 7688571)
(vectors 16 272263) (vector-slots 8 2464124 53642)
(floats 8 91522 160) (intervals 56 1156 3) (buffers 992 19))
--
Best regards, Roman
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#77733
; Package
emacs
.
(Mon, 14 Apr 2025 18:08:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 77733 <at> debbugs.gnu.org (full text, mbox):
> 3. Remove one of backticks from the first docstring.
>
> Expected result: syntax highlighting of the Clojure code is not affected.
>
> Actual result: part of the Clojure code is highlighted with the face
> defined for markdown code_span query. Image attached.
>
> P.S. There is a possibility that an issue within clojure-ts-mode is the
> cause. Any advice on how to resolve this would be appreciated. Thank you in
> advance.
Since the expected result is that syntax highlighting of the Clojure code
should not be affected, then the solution would be to create isolated
local parsers:
@@ -345,6 +345,7 @@
(treesit-range-rules
:embed 'markdown-inline
:host 'clojure
+ :local t
(clojure-ts--docstring-query '@capture)))
(defun clojure-ts--font-lock-settings (markdown-available)
@@ -1380,7 +1381,6 @@
(let ((use-markdown-inline (and clojure-ts-use-markdown-inline
(treesit-ready-p 'markdown-inline t))))
(when use-markdown-inline
- (treesit-parser-create 'markdown-inline)
(setq-local treesit-range-settings clojure-ts--treesit-range-settings))
(when (treesit-ready-p 'clojure)
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#77733
; Package
emacs
.
(Mon, 14 Apr 2025 18:37:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 77733 <at> debbugs.gnu.org (full text, mbox):
Juri Linkov <juri <at> linkov.net> writes:
>> 3. Remove one of backticks from the first docstring.
>>
>> Expected result: syntax highlighting of the Clojure code is not
>> affected.
>>
>> Actual result: part of the Clojure code is highlighted with the
>> face
>> defined for markdown code_span query. Image attached.
>>
>> P.S. There is a possibility that an issue within clojure-ts-mode is
>> the
>> cause. Any advice on how to resolve this would be
>> appreciated. Thank you in
>> advance.
>
> Since the expected result is that syntax highlighting of the Clojure
> code
> should not be affected, then the solution would be to create
> isolated
> local parsers:
>
> @@ -345,6 +345,7 @@
> (treesit-range-rules
> :embed 'markdown-inline
> :host 'clojure
> + :local t
> (clojure-ts--docstring-query '@capture)))
>
> (defun clojure-ts--font-lock-settings (markdown-available)
> @@ -1380,7 +1381,6 @@
> (let ((use-markdown-inline (and clojure-ts-use-markdown-inline
> (treesit-ready-p 'markdown-inline
> t))))
> (when use-markdown-inline
> - (treesit-parser-create 'markdown-inline)
> (setq-local treesit-range-settings
> clojure-ts--treesit-range-settings))
>
> (when (treesit-ready-p 'clojure)
Amazing! I tried to use ':local t' in the range function, but I didn't
try removing '(treesit-parser-create 'markdown-inline)' line, which
apparently solves the problem.
Thank you very much for helping, Juri! This bug can be closed.
--
Best regards, Roman
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#77733
; Package
emacs
.
(Tue, 15 Apr 2025 17:39:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 77733 <at> debbugs.gnu.org (full text, mbox):
close 77733 31.0.50
thanks
>> (when use-markdown-inline
>> - (treesit-parser-create 'markdown-inline)
>> (setq-local treesit-range-settings
>> clojure-ts--treesit-range-settings))
>>
>> (when (treesit-ready-p 'clojure)
> Amazing! I tried to use ':local t' in the range function, but I didn't try
> removing '(treesit-parser-create 'markdown-inline)' line, which apparently
> solves the problem.
>
> Thank you very much for helping, Juri! This bug can be closed.
So now closing.
bug marked as fixed in version 31.0.50, send any further explanations to
77733 <at> debbugs.gnu.org and Roman Rudakov <rrudakov <at> fastmail.com>
Request was from
Juri Linkov <juri <at> linkov.net>
to
control <at> debbugs.gnu.org
.
(Tue, 15 Apr 2025 17:39:05 GMT)
Full text and
rfc822 format available.
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Wed, 14 May 2025 11:25:00 GMT)
Full text and
rfc822 format available.
This bug report was last modified 35 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.