diff --git a/crates/avante-repo-map/queries/tree-sitter-c-defs.scm b/crates/avante-repo-map/queries/tree-sitter-c-defs.scm index 0e1a485..0b69516 100644 --- a/crates/avante-repo-map/queries/tree-sitter-c-defs.scm +++ b/crates/avante-repo-map/queries/tree-sitter-c-defs.scm @@ -2,10 +2,13 @@ (function_definition (storage_class_specifier) @extern ) @function -(class_specifier - (public) @class - (function_definition) @method -) @class +(struct_specifier) @struct +(struct_specifier + body: (field_declaration_list + (field_declaration + declarator: (field_identifier))? @class_variable + ) +) (declaration (storage_class_specifier) @extern ) @variable diff --git a/crates/avante-repo-map/src/lib.rs b/crates/avante-repo-map/src/lib.rs index 7558105..d28bf45 100644 --- a/crates/avante-repo-map/src/lib.rs +++ b/crates/avante-repo-map/src/lib.rs @@ -1714,6 +1714,31 @@ mod tests { assert_eq!(stringified, expected); } + #[test] + fn test_c() { + let source = r#" + #include + + int test_var = 2; + extern int extern_test_var; + + int TestFunc(bool b) { return b ? 42 : -1; } + extern void ExternTestFunc(); + + struct Foo { + int a; + int b; + }; + + typedef int my_int; + "#; + let definitions = extract_definitions("c", source).unwrap(); + let stringified = stringify_definitions(&definitions); + println!("{stringified}"); + let expected = "var extern int extern_test_var;:int;var extern void ExternTestFunc();:void;class Foo{var int a;:int;var int b;:int;};"; + assert_eq!(stringified, expected); + } + #[test] fn test_cpp() { let source = r#" diff --git a/lua/.tag b/lua/.tag new file mode 100644 index 0000000..c55013b --- /dev/null +++ b/lua/.tag @@ -0,0 +1 @@ +v0.0.25