diff options
-rw-r--r-- | lisp/progmodes/c-ts-mode.el | 28 | ||||
-rw-r--r-- | lisp/progmodes/js.el | 2 | ||||
-rw-r--r-- | lisp/progmodes/python.el | 2 | ||||
-rw-r--r-- | lisp/treesit.el | 42 |
4 files changed, 39 insertions, 35 deletions
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index a8189a0f3da..1bd093cfa2d 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -360,12 +360,11 @@ For NODE, OVERRIDE, START, END, and ARGS, see override start end args)) ((or "identifier" "field_identifier") (treesit-fontify-with-override - (max (treesit-node-start node) start) - (min (treesit-node-end node) end) + (treesit-node-start node) (treesit-node-end node) (pcase (treesit-node-type (treesit-node-parent node)) ("function_declarator" 'font-lock-function-name-face) (_ 'font-lock-variable-name-face)) - override)))) + override start end)))) (defun c-ts-mode--fontify-variable (node override start end &rest _) "Fontify an identifier node. @@ -375,10 +374,8 @@ OVERRIDE, START, END, and ARGS, see `treesit-font-lock-rules'." (treesit-node-parent node)) "call_expression")) (treesit-fontify-with-override - (max (treesit-node-start node) start) - (min (treesit-node-end node) end) - 'font-lock-variable-name-face - override))) + (treesit-node-start node) (treesit-node-end node) + 'font-lock-variable-name-face override start end))) (defun c-ts-mode--fontify-defun (node override start end &rest _) "Correctly fontify the DEFUN macro. @@ -405,21 +402,19 @@ This function corrects the fontification on the colon in (when (equal (treesit-node-text node t) ":") (treesit-fontify-with-override (treesit-node-start node) (treesit-node-end node) - 'default override))) + 'default override start end))) ;; Fix the parameter list. (while arg-list-2 (let ((type (and arg-list-2 (pop arg-list-2))) (arg (and arg-list-2 (pop arg-list-2)))) (when type (treesit-fontify-with-override - (max start (treesit-node-start type)) - (min end (treesit-node-end type)) - 'font-lock-type-face override)) + (treesit-node-start type) (treesit-node-end type) + 'font-lock-type-face override start end)) (when arg (treesit-fontify-with-override - (max start (treesit-node-start arg)) - (min end (treesit-node-end arg)) - 'default override)))))) + (treesit-node-start arg) (treesit-node-end arg) + 'default override start end)))))) (defun c-ts-fontify-error (node override start end &rest _) "Fontify the error nodes. @@ -428,8 +423,7 @@ For NODE, OVERRIDE, START, and END, see (let ((parent (treesit-node-parent node)) (child (treesit-node-child node 0))) (treesit-fontify-with-override - (max start (treesit-node-start node)) - (min end (treesit-node-end node)) + (treesit-node-start node) (treesit-node-end node) (cond ;; This matches the case MACRO(struct a, b, c) ;; where struct is seen as error. @@ -439,7 +433,7 @@ For NODE, OVERRIDE, START, and END, see '("struct" "long" "short" "enum" "union"))) 'font-lock-keyword-face) (t 'font-lock-warning-face)) - override))) + override start end))) (defun c-ts-mode--imenu-1 (node) "Helper for `c-ts-mode--imenu'. diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el index 389096147ac..90ab7cc924b 100644 --- a/lisp/progmodes/js.el +++ b/lisp/progmodes/js.el @@ -3647,7 +3647,7 @@ OVERRIDE is the override flag described in (setq font-beg (max start font-beg)) (when (< font-beg end) (treesit-fontify-with-override - font-beg font-end 'font-lock-string-face override))) + font-beg font-end 'font-lock-string-face override start end))) (setq font-beg (treesit-node-end child) child (treesit-node-next-sibling child))))) diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index 4fc5d24e2fb..ebee703499a 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -1069,7 +1069,7 @@ fontified." (when (eq (char-after string-beg) ?f) (cl-incf string-beg)) (treesit-fontify-with-override - (max start string-beg) (min end string-end) face override))) + string-beg string-end face override start end))) (defvar python--treesit-settings (treesit-font-lock-rules diff --git a/lisp/treesit.el b/lisp/treesit.el index f3c03daf7e0..eee6eee0c7f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -774,25 +774,35 @@ signals the `treesit-font-lock-error' error if that happens." ((memq feature remove-list) nil) (t current-value)))))) -(defun treesit-fontify-with-override (start end face override) +(defun treesit-fontify-with-override + (start end face override &optional bound-start bound-end) "Apply FACE to the region between START and END. OVERRIDE can be nil, t, `append', `prepend', or `keep'. -See `treesit-font-lock-rules' for their semantic." - (pcase override - ('nil (unless (text-property-not-all - start end 'face nil) - (put-text-property start end 'face face))) - ('t (put-text-property start end 'face face)) - ('append (font-lock-append-text-property +See `treesit-font-lock-rules' for their semantic. + +If BOUND-START and BOUND-END are non-nil, only fontify the region +in between them." + (when (or (null bound-start) (null bound-end) + (and bound-start bound-end + (<= bound-start end) + (>= bound-end start))) + (when (and bound-start bound-end) + (setq start (max bound-start start) + end (min bound-end end))) + (pcase override + ('nil (unless (text-property-not-all start end 'face nil) + (put-text-property start end 'face face))) + ('t (put-text-property start end 'face face)) + ('append (font-lock-append-text-property + start end 'face face)) + ('prepend (font-lock-prepend-text-property + start end 'face face)) + ('keep (font-lock-fillin-text-property start end 'face face)) - ('prepend (font-lock-prepend-text-property - start end 'face face)) - ('keep (font-lock-fillin-text-property - start end 'face face)) - (_ (signal 'treesit-font-lock-error - (list - "Unrecognized value of :override option" - override))))) + (_ (signal 'treesit-font-lock-error + (list + "Unrecognized value of :override option" + override)))))) (defun treesit--set-nonsticky (start end sym &optional remove) "Set `rear-nonsticky' property between START and END. |