Fontify C++ function definitions in c-ts-mode (bug#60529)

* lisp/progmodes/c-ts-mode.el (c-ts-mode--declarator-identifier):
Teach the code how to extract the declarator of a node of type
"qualified_identifier".
(c-ts-mode--fontify-declarator): Consider the case where the
identifier in a function declarator is buried inside
"qualifier_identifier" nodes.
This commit is contained in:
Daniel Martín 2023-01-03 22:08:13 +01:00 committed by Yuan Fu
parent 0d98fac6bb
commit c786afcbb9
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -430,6 +430,9 @@ MODE is either `c' or `cpp'."
((or "function_declarator" "array_declarator" "init_declarator")
(c-ts-mode--declarator-identifier
(treesit-node-child-by-field-name node "declarator")))
("qualified_identifier"
(c-ts-mode--declarator-identifier
(treesit-node-child-by-field-name node "name")))
;; Terminal case.
((or "identifier" "field_identifier")
node)))
@ -439,7 +442,14 @@ MODE is either `c' or `cpp'."
For NODE, OVERRIDE, START, END, and ARGS, see
`treesit-font-lock-rules'."
(let* ((identifier (c-ts-mode--declarator-identifier node))
(face (pcase (treesit-node-type (treesit-node-parent identifier))
(qualified-root
(treesit-parent-while (treesit-node-parent identifier)
(lambda (node)
(equal (treesit-node-type node)
"qualified_identifier"))))
(face (pcase (treesit-node-type (treesit-node-parent
(or qualified-root
identifier)))
("function_declarator" 'font-lock-function-name-face)
(_ 'font-lock-variable-name-face))))
(treesit-fontify-with-override