Parsing a large file with treesit-parse-string and then printing the
returned node crashes Emacs, because with-temp-buffer kills the temp
buffer when treesit-parse-string returns, and print.c tries to access
the node's position in the killed buffer.
* lisp/treesit.el (treesit-parse-string): Don't use with-temp-buffer.
(cherry picked from commit
00360258caddc0d8cf29ba3d9971125a06f8959b)
(defun treesit-parse-string (string language)
"Parse STRING using a parser for LANGUAGE.
Return the root node of the syntax tree."
- (with-temp-buffer
- (insert string)
- (treesit-parser-root-node
- (treesit-parser-create language))))
+ ;; We can't use `with-temp-buffer' because it kills the buffer when
+ ;; returning from the form.
+ (let ((buf (generate-new-buffer " *treesit-parse-string*")))
+ (with-current-buffer buf
+ (insert string)
+ (treesit-parser-root-node
+ (treesit-parser-create language)))))
(defvar-local treesit-language-at-point-function nil
"A function that returns the language at point.