diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-06-28 06:21:56 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-06-28 06:21:56 +0800 |
| commit | 0f84a88d0b2c9205ec1b3cbfa18ffe05478e5a64 (patch) | |
| tree | 0d5d3ddff999937599f82e7c0fd1b585d826c9e7 /mingling_pathf/src/patterns/basic_struct.rs | |
| parent | da5e1a21fce9a303767af4a6d3cab8f0d66e5c87 (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.rs | 51 |
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 + } +} |
