feat(cpp): improve function.call to support any level of nesting for qualified identifiers

This commit is contained in:
John Drouhard 2023-04-08 13:21:09 -05:00 committed by Stephan Seitz
parent f7e8b7420c
commit dad0864fa3
2 changed files with 80 additions and 43 deletions

View file

@ -49,58 +49,93 @@
(destructor_name (destructor_name
(identifier) @method) (identifier) @method)
; functions
(function_declarator (function_declarator
declarator: (qualified_identifier (qualified_identifier
name: (identifier) @function)) (identifier) @function))
(function_declarator (function_declarator
declarator: (qualified_identifier (qualified_identifier
name: (qualified_identifier (qualified_identifier
name: (identifier) @function))) (identifier) @function)))
(function_declarator (function_declarator
declarator: (template_function (qualified_identifier
name: (identifier) @function)) (qualified_identifier
(qualified_identifier
(identifier) @function))))
((qualified_identifier
(qualified_identifier
(qualified_identifier
(qualified_identifier
(identifier) @function)))) @_parent
(#has-ancestor? @_parent function_declarator))
(function_declarator (function_declarator
declarator: (template_method (template_function
name: (field_identifier) @method)) (identifier) @function))
((function_declarator
declarator: (qualified_identifier
name: (identifier) @constructor))
(#lua-match? @constructor "^[A-Z]"))
(operator_name) @function (operator_name) @function
"operator" @function "operator" @function
"static_assert" @function.builtin "static_assert" @function.builtin
(call_expression (call_expression
function: (qualified_identifier (qualified_identifier
name: (identifier) @function.call)) (identifier) @function.call))
(call_expression (call_expression
function: (qualified_identifier (qualified_identifier
name: (qualified_identifier (qualified_identifier
name: (identifier) @function.call))) (identifier) @function.call)))
(call_expression (call_expression
function: (qualified_identifier
(qualified_identifier
(qualified_identifier (qualified_identifier
name: (qualified_identifier (identifier) @function.call))))
name: (qualified_identifier ((qualified_identifier
name: (identifier) @function.call)))) (qualified_identifier
(call_expression (qualified_identifier
function: (template_function
name: (identifier) @function.call))
(call_expression
function: (qualified_identifier
name: (template_function
name: (identifier) @function.call)))
(call_expression
function:
(qualified_identifier (qualified_identifier
name: (qualified_identifier (identifier) @function.call)))) @_parent
name: (template_function (#has-ancestor? @_parent call_expression))
name: (identifier) @function.call))))
(call_expression (call_expression
function: (field_expression (template_function
field: (field_identifier) @method.call)) (identifier) @function.call))
(call_expression
(qualified_identifier
(template_function
(identifier) @function.call)))
(call_expression
(qualified_identifier
(qualified_identifier
(template_function
(identifier) @function.call))))
(call_expression
(qualified_identifier
(qualified_identifier
(qualified_identifier
(template_function
(identifier) @function.call)))))
((qualified_identifier
(qualified_identifier
(qualified_identifier
(qualified_identifier
(template_function
(identifier) @function.call))))) @_parent
(#has-ancestor? @_parent call_expression))
; methods
(function_declarator
(template_method
(field_identifier) @method))
(call_expression
(field_expression
(field_identifier) @method.call))
; constructors
((function_declarator
(qualified_identifier
(identifier) @constructor))
(#lua-match? @constructor "^[A-Z]"))
((call_expression ((call_expression
function: (identifier) @constructor) function: (identifier) @constructor)

View file

@ -8,5 +8,7 @@ int main()
// ^ @function.call // ^ @function.call
Foo::a::A::foo(); Foo::a::A::foo();
// ^ @function.call // ^ @function.call
Foo::a::A::B::foo();
// ^ @function.call
return 0; return 0;
} }