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.
(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.
(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.
(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.
'("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'.
((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.