mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2026-09-10 07:46:51 -04:00
Fix markdown-inline incremental parsing issue (bug#81019)
* lisp/treesit.el: (treesit--embed-languages-need-full-parse): New variable. (treesit--set-embed-ranges): Reparse full range if the langauge needs it.
This commit is contained in:
parent
a94a33827b
commit
9d1b0c2d7f
|
|
@ -680,6 +680,11 @@ If none are valid, return nil."
|
|||
|
||||
;;; Range API supplement
|
||||
|
||||
;; See bug#81019.
|
||||
(defvar treesit--embed-languages-need-full-parse '(markdown-inline)
|
||||
"Languages that requires a full parse when used as embedded languages.
|
||||
This variable is not intended for general use.")
|
||||
|
||||
(defvar treesit--range-verbose nil
|
||||
"If non-nil, print verbose debugging info for setting ranges.
|
||||
Useful when your multi-parser setup doesn't seem to work.")
|
||||
|
|
@ -1094,6 +1099,14 @@ RANGES is a list of (START . END) or just (START . END)."
|
|||
(when (and (null new-ranges) treesit--range-verbose)
|
||||
(message "Setting empty ranges to %s\nRanges for embedded parser :%s\nRanges for host parser: %s\nIntersection is empty"
|
||||
new-ranges-1 embed-parser host-parser))
|
||||
;; Due to some tree-sitter bug[1], we need to force a full reparse for
|
||||
;; some languages to get a correct parse tree.
|
||||
;; [1] https://github.com/tree-sitter/tree-sitter/issues/5636
|
||||
(when (memq (treesit-parser-language embed-parser)
|
||||
treesit--embed-languages-need-full-parse)
|
||||
(treesit-parser-set-included-ranges
|
||||
embed-parser `((,(point-min) . ,(point-min))))
|
||||
(treesit-parser-root-node embed-parser))
|
||||
;; When there's no range for the embedded language, set it's range
|
||||
;; to a dummy (1 . 1), otherwise it would be set to the whole
|
||||
;; buffer, which is not what we want.
|
||||
|
|
|
|||
Loading…
Reference in a new issue