bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#64017: Wrong conversion from Emacs to Tree-sitter S-expression synta


From: Mattias Engdegård
Subject: bug#64017: Wrong conversion from Emacs to Tree-sitter S-expression syntax
Date: Mon, 12 Jun 2023 16:14:01 +0200

`treesit-pattern-expand` converts a query pattern into tree-sitter S-expression 
syntax, as a string. The conversion mainly converts certain keywords but the 
main problem is that it prints strings in Emacs syntax which differs from that 
of tree-sitter.

As a consequence, :match regexps cannot contain newlines:

(treesit-query-capture
 'java
 '(((identifier) @font-lock-constant-face
    (:match "hello\n" @font-lock-constant-face))))

signals a syntax error.

As far as I can tell the tree-sitter string syntax allows for the escape 
sequences:

\n = LF
\r = CR
\t = TAB
\0 = NUL  (only a single 0 -- no octal escapes!)
\X = the character X itself

Unescape newlines result in a syntax error as seen in the example above. NULs 
don't seem to go well either.

At the very least, the conversion should avoid literal newlines and NULs in the 
result (and probably CR and TAB). This cannot be done with a straight 
prin1-to-string.

(By the way, why is the conversion written in C? Was Lisp too slow?)

Ideally we should not need to expose the tree-sitter s-exp query syntax at all. 
Surely Emacs s-exps should be preferable in every case?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]