aboutsummaryrefslogtreecommitdiff
path: root/mingling_pathf/src/patterns/basic_struct.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-06-28 06:21:56 +0800
committer魏曹先生 <1992414357@qq.com>2026-06-28 06:21:56 +0800
commit0f84a88d0b2c9205ec1b3cbfa18ffe05478e5a64 (patch)
tree0d5d3ddff999937599f82e7c0fd1b585d826c9e7 /mingling_pathf/src/patterns/basic_struct.rs
parentda5e1a21fce9a303767af4a6d3cab8f0d66e5c87 (diff)
feat(mingling_pathf): add pattern analyzer module for struct detection
Add a `PatternAnalyzer` with an `AnalyzePattern` trait to detect and extract struct declarations from Rust source files, supporting nested inline modules.
Diffstat (limited to 'mingling_pathf/src/patterns/basic_struct.rs')
-rw-r--r--mingling_pathf/src/patterns/basic_struct.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/mingling_pathf/src/patterns/basic_struct.rs b/mingling_pathf/src/patterns/basic_struct.rs
new file mode 100644
index 0000000..eeb665a
--- /dev/null
+++ b/mingling_pathf/src/patterns/basic_struct.rs
@@ -0,0 +1,51 @@
+use syn::Item;
+
+use crate::pattern_analyzer::{AnalyzeItem, AnalyzePattern};
+
+/// Basic struct pattern analyzer.
+///
+/// Used to identify and analyze struct definitions (`struct`) in Rust source code.
+/// Supports analyzing root-level structs as well as structs within inline modules.
+pub struct BasicStructPattern;
+
+impl AnalyzePattern for BasicStructPattern {
+ fn contains(&self, content: &str) -> bool {
+ content.contains("struct")
+ }
+
+ fn analyze(&self, content: &str) -> Vec<AnalyzeItem> {
+ let Ok(syntax) = syn::parse_file(content) else {
+ return Vec::new();
+ };
+
+ let mut items = Vec::new();
+
+ for item in &syntax.items {
+ match item {
+ // Root-level struct
+ Item::Struct(s) => {
+ items.push(AnalyzeItem {
+ module: String::new(),
+ item_name: s.ident.to_string(),
+ });
+ }
+ // Struct within inline modules
+ Item::Mod(item_mod) => {
+ if let Some((_, nested)) = &item_mod.content {
+ for n in nested {
+ if let syn::Item::Struct(s) = n {
+ items.push(AnalyzeItem {
+ module: item_mod.ident.to_string(),
+ item_name: s.ident.to_string(),
+ });
+ }
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+
+ items
+ }
+}