Optionally include the namespace in c-ts-mode--declarator-identifier

This is an additional fix for bug#60397.

* lisp/progmodes/c-ts-mode.el:
(c-ts-mode--declarator-identifier): New parameter QUALIFIED.
(c-ts-mode--defun-name): Use qualified identifier.
This commit is contained in:
Yuan Fu 2023-01-07 16:03:37 -08:00
parent 7c356934fb
commit 614f8c431d
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -423,20 +423,29 @@ MODE is either `c' or `cpp'."
;;; Font-lock helpers ;;; Font-lock helpers
(defun c-ts-mode--declarator-identifier (node) (defun c-ts-mode--declarator-identifier (node &optional qualified)
"Return the identifier of the declarator node NODE." "Return the identifier of the declarator node NODE.
If QUALIFIED is non-nil, include the names space part of the
identifier and return a qualified_identifier."
(pcase (treesit-node-type node) (pcase (treesit-node-type node)
;; Recurse. ;; Recurse.
((or "attributed_declarator" "parenthesized_declarator") ((or "attributed_declarator" "parenthesized_declarator")
(c-ts-mode--declarator-identifier (treesit-node-child node 0 t))) (c-ts-mode--declarator-identifier (treesit-node-child node 0 t)
qualified))
((or "pointer_declarator" "reference_declarator") ((or "pointer_declarator" "reference_declarator")
(c-ts-mode--declarator-identifier (treesit-node-child node -1))) (c-ts-mode--declarator-identifier (treesit-node-child node -1)
qualified))
((or "function_declarator" "array_declarator" "init_declarator") ((or "function_declarator" "array_declarator" "init_declarator")
(c-ts-mode--declarator-identifier (c-ts-mode--declarator-identifier
(treesit-node-child-by-field-name node "declarator"))) (treesit-node-child-by-field-name node "declarator")
qualified))
("qualified_identifier" ("qualified_identifier"
(c-ts-mode--declarator-identifier (if qualified
(treesit-node-child-by-field-name node "name"))) node
(c-ts-mode--declarator-identifier
(treesit-node-child-by-field-name node "name")
qualified)))
;; Terminal case. ;; Terminal case.
((or "identifier" "field_identifier") ((or "identifier" "field_identifier")
node))) node)))
@ -538,7 +547,8 @@ Return nil if NODE is not a defun node or doesn't have a name."
(pcase (treesit-node-type node) (pcase (treesit-node-type node)
((or "function_definition" "declaration") ((or "function_definition" "declaration")
(c-ts-mode--declarator-identifier (c-ts-mode--declarator-identifier
(treesit-node-child-by-field-name node "declarator"))) (treesit-node-child-by-field-name node "declarator")
t))
((or "struct_specifier" "enum_specifier" ((or "struct_specifier" "enum_specifier"
"union_specifier" "class_specifier" "union_specifier" "class_specifier"
"namespace_definition") "namespace_definition")