1pub struct IntentAnalyzer;
5
6impl IntentAnalyzer {
7 pub fn analyze_doc_comments(code: &str, table_name: &str) -> Vec<String> {
9 let mut migrations = Vec::new();
10
11 for line in code.lines() {
12 let trimmed = line.trim();
13 if let Some(start) = trimmed.find("@index(") {
14 let rest = &trimmed[start + "@index(".len()..];
15 if let Some(end) = rest.find(')') {
16 let col = &rest[..end].trim();
17 let sql = format!(
18 "CREATE INDEX IF NOT EXISTS idx_{}_{} ON {}({});",
19 table_name, col, table_name, col
20 );
21 migrations.push(sql);
22 }
23 }
24 }
25
26 migrations
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn test_analyze_doc_comments() {
36 let code = r#"
37 /// User Entity Model
38 /// @index(email)
39 /// @index(created_at)
40 pub struct User {
41 pub email: String,
42 }
43 "#;
44
45 let sqls = IntentAnalyzer::analyze_doc_comments(code, "users");
46 assert_eq!(sqls.len(), 2);
47 assert_eq!(
48 sqls[0],
49 "CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);"
50 );
51 assert_eq!(
52 sqls[1],
53 "CREATE INDEX IF NOT EXISTS idx_users_created_at ON users(created_at);"
54 );
55 }
56}