From 29111ac042525b08be773f8f466c1aa820ceaa77 Mon Sep 17 00:00:00 2001 From: Yinzuo Jiang Date: Tue, 26 Aug 2025 17:19:47 +0800 Subject: [PATCH] fix: AvanteShowRepoMap failed to parse query for c (#2629) Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> --- .../queries/tree-sitter-c-defs.scm | 11 +++++--- crates/avante-repo-map/src/lib.rs | 25 +++++++++++++++++++ lua/.tag | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 lua/.tag 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