Initial commit

This commit is contained in:
2025-11-04 00:23:51 +00:00
commit a397a14cab
15 changed files with 9102 additions and 0 deletions
+86
View File
@@ -0,0 +1,86 @@
import re
import ast
import sqlglot
from typing import Dict, List, Any
from pathlib import Path
def extract_sql_schema(sql_code: str) -> Dict[str, List[str]]:
"""
Extracts table -> columns mapping from SQL code using sqlglot.
Returns a canonical schema.
"""
schema: Dict[str, List[str]] = {}
try:
statements = sqlglot.parse(sql_code, read="postgres")
except Exception:
return schema
for stmt in statements:
if stmt.key and stmt.key.upper() == "CREATE":
for table in stmt.find_all(sqlglot.exp.Create):
try:
tname = table.this.this
cols = []
for coldef in table.find_all(sqlglot.exp.ColumnDef):
cname = getattr(coldef.this, "name", None)
if cname:
cols.append(cname)
if tname and cols:
schema[tname] = cols
except Exception:
continue
return schema
def extract_python_structure(code: str) -> Dict[str, List[str]]:
"""Return module structure: functions and classes."""
try:
tree = ast.parse(code)
except SyntaxError:
return {}
funcs = [n.name for n in ast.walk(tree) if isinstance(n, ast.FunctionDef)]
classes = [n.name for n in ast.walk(tree) if isinstance(n, ast.ClassDef)]
return {"functions": funcs, "classes": classes}
def extract_go_structure(code: str) -> Dict[str, List[str]]:
"""Simple regex-based Go structure detection (lightweight)."""
funcs = re.findall(r"func\s+([A-Z]\w+)", code)
structs = re.findall(r"type\s+(\w+)\s+struct", code)
return {"functions": funcs, "structs": structs}
def extract_rust_structure(code: str) -> Dict[str, List[str]]:
"""Heuristic Rust index."""
structs = re.findall(r"struct\s+(\w+)", code)
traits = re.findall(r"trait\s+(\w+)", code)
funcs = re.findall(r"fn\s+(\w+)", code)
return {"functions": funcs, "structs": structs, "traits": traits}
def extract_svelte_structure(code: str) -> Dict[str, List[str]]:
"""Minimal Svelte export/prop finder."""
exports = re.findall(r"export\s+let\s+(\w+)", code)
funcs = re.findall(r"function\s+(\w+)", code)
return {"props": exports, "functions": funcs}
def build_quick_index(language: str, code: str, filepath: Path) -> Dict[str, Any]:
"""Dispatch to the appropriate structure extractor."""
data = {}
if language == "sql":
data = extract_sql_schema(code)
elif language == "python":
data = extract_python_structure(code)
elif language == "go":
data = extract_go_structure(code)
elif language == "rust":
data = extract_rust_structure(code)
elif language == "svelte":
data = extract_svelte_structure(code)
return {
"text": f"Quick index for {filepath.name}:\n{data}",
"metadata": {"language": language, "file": str(filepath), "type": "index"}
}