From c84464e0a8e3d5086af8bf2ff8f510a503f13374 Mon Sep 17 00:00:00 2001 From: Vincenzo Pupillo Date: Sun, 28 Jan 2024 21:17:51 +0100 Subject: [PATCH] Remove local-parser from global-parser list when fontify region The list of global parsers used by treesit-font-lock-fontify-region also contains local parsers (parsers embedded with the :local attribute). As a result, the font-lock range of local parsers overlaps with others. * lisp/treesit.el (treesit-font-lock-fontify-region): Drop local parsers from the global-parsers list. --- lisp/treesit.el | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lisp/treesit.el b/lisp/treesit.el index 96222ed81cb..47f06c37793 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1233,7 +1233,20 @@ treesit-font-lock-fontify-region (treesit-update-ranges start end) (font-lock-unfontify-region start end) (let* ((local-parsers (treesit-local-parsers-on start end)) - (global-parsers (treesit-parser-list)) + (global-parsers (cl-remove-if + (lambda (parser) + (let ((range-settings treesit-range-settings) + (finded nil)) + (while (and range-settings (not finded)) + (let* ((range-setting (pop range-settings)) + (language (nth 1 range-setting)) + (local (nth 2 range-setting))) + (setq finded + (and + local + (eq (treesit-parser-language parser) language))))) + finded)) + (treesit-parser-list))) (root-nodes (mapcar #'treesit-parser-root-node (append local-parsers global-parsers)))) -- 2.43.0