]> git.eshelyaron.com Git - emacs.git/commitdiff
Query on the root node in tree-sitter font-lock
authorYuan Fu <casouri@gmail.com>
Mon, 31 Oct 2022 22:27:40 +0000 (15:27 -0700)
committerYuan Fu <casouri@gmail.com>
Tue, 1 Nov 2022 19:54:51 +0000 (12:54 -0700)
Rather than querying on the smallest node that spans START to END, we
query on the root node between START to END.

* lisp/progmodes/python.el (python--treesit-fontify-string): Accept
the string rather than the quote node.
(python--treesit-settings): Capture the string rather than the quote
node.
* lisp/treesit.el (treesit-font-lock-fontify-region): Query the root
node rather than the smallest node.

lisp/treesit.el

index 72c8186044f93632b1c033498831fafe724cf866..733d721f1099630ad035a24f19cc4d94659190a2 100644 (file)
@@ -635,17 +635,18 @@ If LOUDLY is non-nil, display some debugging information."
            (enable (nth 1 setting))
            (override (nth 3 setting))
            (language (treesit-query-language query)))
-      (when-let ((node (treesit-node-on start end language))
+      ;; Why root node rather than (treesit-node-on start end)?  If
+      ;; you insert an ending quote into a buffer, jit-lock only wants
+      ;; to fontify that single quote, and (treesit-node-on start end)
+      ;; will give you that quote node.  We want to capture the string
+      ;; and apply string face to it, but querying on the quote node
+      ;; will not give us the string node.
+      (when-let ((root (treesit-buffer-root-node language))
                  ;; Only activate if ENABLE flag is t.
                  (activate (eq t enable)))
         (ignore activate)
         (let ((captures (treesit-query-capture
-                         node query
-                         ;; Specifying the range is important.  More
-                         ;; often than not, NODE will be the root
-                         ;; node, and if we don't specify the range,
-                         ;; we are basically querying the whole file.
-                         start end))
+                         root query start end))
               (inhibit-point-motion-hooks t))
           (with-silent-modifications
             (dolist (capture captures)