/* date = July 11th 2025 6:04 pm */ #ifndef TREE_SITTER_CPP_H #define TREE_SITTER_CPP_H // Source: https://github.com/tree-sitter/tree-sitter-cpp/blob/master/queries/tags.scm String_Const_u8 TS_CPP_TAGS_QUERY_SCM = string_u8_litexpr(R"DONE( (struct_specifier name: (type_identifier) @name body:(_)) @definition.class (declaration type: (union_specifier name: (type_identifier) @name)) @definition.class (function_declarator declarator: (identifier) @name) @definition.function (function_declarator declarator: (field_identifier) @name) @definition.function (function_declarator declarator: (qualified_identifier scope: (namespace_identifier) @local.scope name: (identifier) @name)) @definition.method (type_definition declarator: (type_identifier) @name) @definition.type (enum_specifier name: (type_identifier) @name) @definition.type (class_specifier name: (type_identifier) @name) @definition.class (_ "{" @scope_begin "}" @scope_end ) (_ "(" @scope_begin ")" @scope_end ) (_ "[" @scope_begin "]" @scope_end ) )DONE"); // Source: https://github.com/tree-sitter/tree-sitter-cpp/blob/master/queries/highlights.scm String_Const_u8 TS_CPP_HIGHLIGHT_QUERY_SCM = string_u8_litexpr(R"DONE( (identifier) @variable ((identifier) @constant (#match? @constant "^[A-Z][A-Z\\d_]*$")) "break" @keyword "case" @keyword "const" @keyword "continue" @keyword "default" @keyword "do" @keyword "else" @keyword "enum" @keyword "extern" @keyword "for" @keyword "if" @keyword "inline" @keyword "return" @keyword "sizeof" @keyword "static" @keyword "struct" @keyword "switch" @keyword "typedef" @keyword "union" @keyword "volatile" @keyword "while" @keyword "#define" @keyword "#elif" @keyword "#else" @keyword "#endif" @keyword "#if" @keyword "#ifdef" @keyword "#ifndef" @keyword "#include" @keyword (preproc_directive) @keyword "--" @operator "-" @operator "-=" @operator "->" @operator "=" @operator "!=" @operator "*" @operator "&" @operator "&&" @operator "+" @operator "++" @operator "+=" @operator "<" @operator "==" @operator ">" @operator "||" @operator "." @delimiter ";" @delimiter (string_literal) @string (system_lib_string) @string (null) @constant (number_literal) @number (char_literal) @number (field_identifier) @property (statement_identifier) @label (type_identifier) @type (primitive_type) @type (sized_type_specifier) @type (call_expression function: (identifier) @function) (call_expression function: (field_expression field: (field_identifier) @function)) (function_declarator declarator: (identifier) @function) (preproc_function_def name: (identifier) @function.special) (comment) @comment ; Functions (call_expression function: (qualified_identifier name: (identifier) @function)) (template_function name: (identifier) @function) (template_method name: (field_identifier) @function) (template_function name: (identifier) @function) (function_declarator declarator: (qualified_identifier name: (identifier) @function)) (function_declarator declarator: (field_identifier) @function) ; Types ((namespace_identifier) @type (#match? @type "^[A-Z]")) (auto) @type ; Constants (this) @variable.builtin (null "nullptr" @constant) ; Modules (module_name (identifier) @module) ; Keywords [ "catch" "class" "co_await" "co_return" "co_yield" "constexpr" "constinit" "consteval" "delete" "explicit" "final" "friend" "mutable" "namespace" "noexcept" "new" "override" "private" "protected" "public" "template" "throw" "try" "typename" "using" "concept" "requires" "virtual" "import" "export" "module" ] @keyword ; Strings (raw_string_literal) @string )DONE"); extern "C" { TSLanguage *tree_sitter_cpp(); } void tree_sitter_register_cpp(Application_Links* app) { TSLanguage* language = tree_sitter_cpp(); Tree_Sitter_Language_Queries queries = {}; queries.ptr[Tree_Sitter_Language_Query_Highlights] = tree_sitter_query_new(app, language, TS_CPP_HIGHLIGHT_QUERY_SCM); queries.ptr[Tree_Sitter_Language_Query_Tags] = tree_sitter_query_new(app, language, TS_CPP_TAGS_QUERY_SCM); Tree_Sitter_Language_Flags flags = ( Tree_Sitter_Language_Can_Receive_Virtual_Indent ); tree_sitter_register_language(SCu8("c"), language, queries, flags); tree_sitter_register_language(SCu8("cpp"), language, queries, flags); tree_sitter_register_language(SCu8("h"), language, queries, flags); tree_sitter_register_language(SCu8("hpp"), language, queries, flags); tree_sitter_register_language(SCu8("cc"), language, queries, flags); } #endif //TREE_SITTER_CPP_H