Function: c-ts-mode--fontify-DEFUN
c-ts-mode--fontify-DEFUN is a byte-compiled function defined in
c-ts-mode.el.gz.
Signature
(c-ts-mode--fontify-DEFUN NODE OVERRIDE START END &rest _)
Documentation
Correctly fontify calls to the DEFUN macro in Emacs sources.
For NODE, OVERRIDE, START, and END, see
treesit-font-lock-rules. The captured NODE is a
call_expression node, where DEFUN is the function.
This function corrects the fontification of the colon in
"doc:", and of the parameter list.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/c-ts-mode.el.gz
(defun c-ts-mode--fontify-DEFUN (node override start end &rest _)
"Correctly fontify calls to the DEFUN macro in Emacs sources.
For NODE, OVERRIDE, START, and END, see
`treesit-font-lock-rules'. The captured NODE is a
call_expression node, where DEFUN is the function.
This function corrects the fontification of the colon in
\"doc:\", and of the parameter list."
(let* ((parent (treesit-node-parent node))
;; ARG-LIST-1 and 2 are like this:
;;
;; DEFUN (ARG-LIST-1)
;; (ARG-LIST-2)
(arg-list-1 (treesit-node-children
(treesit-node-child-by-field-name
node "arguments")))
;; ARG-LIST-2 is the
(arg-list-2 (treesit-node-children
(treesit-node-child-by-field-name
parent "arguments") t)))
;; Fix the colon.
(dolist (node arg-list-1)
(when (equal (treesit-node-text node t) ":")
(treesit-fontify-with-override
(treesit-node-start node) (treesit-node-end node)
'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
(treesit-node-start type) (treesit-node-end type)
'font-lock-type-face override start end))
(when arg
(treesit-fontify-with-override
(treesit-node-start arg) (treesit-node-end arg)
'default override start end))))))