import asyncio
import tempfile
import json
from pathlib import Path
import loregrep
async def main():
print("๐ ๏ธ LoreGrep Tool Showcase")
print("=" * 32)
try:
instance = loregrep.LoreGrep.polyglot_project(".")
print("โ
Using polyglot preset")
except Exception:
try:
instance = loregrep.LoreGrep.auto_discover(".")
print("โ
Using auto-discovery")
except Exception:
instance = loregrep.LoreGrep.builder().build()
print("โ
Using basic builder")
print("\n๐ Creating sample project...")
sample_dir = create_sample_project()
try:
print(f"\n๐ Scanning...")
result = await instance.scan(sample_dir)
print(f"โ
Files: {result.files_scanned}, Functions: {result.functions_found}")
tools = loregrep.LoreGrep.get_tool_definitions()
print(f"\n๐ ๏ธ Available tools: {len(tools)}")
await demo_tools(instance, sample_dir)
finally:
cleanup_sample_project(sample_dir)
print("\n๐งน Cleanup complete")
async def demo_tools(instance, sample_dir):
tools_to_test = [
("search_functions", {"pattern": "load", "limit": 3}),
("search_structs", {"pattern": "Manager", "limit": 3}),
("get_repository_tree", {"max_depth": 2}),
("get_dependencies", {"file_path": str(next(Path(sample_dir).glob("*.py"), ""))}),
("find_callers", {"function_name": "load_config"}),
("analyze_file", {"file_path": str(next(Path(sample_dir).glob("*.py"), "")), "include_source": False}),
]
for i, (tool_name, params) in enumerate(tools_to_test, 1):
print(f"\n{i}. Testing {tool_name}...")
try:
result = await instance.execute_tool(tool_name, params)
print(f" โ
Success - {len(result.content)} chars")
try:
data = json.loads(result.content)
if "functions" in data:
print(f" ๐ Functions: {len(data['functions'])}")
if "structs" in data:
print(f" ๐ฆ Structs: {len(data['structs'])}")
if "imports" in data:
print(f" ๐ฅ Imports: {len(data['imports'])}")
if "callers" in data:
print(f" ๐ Callers: {len(data['callers'])}")
except json.JSONDecodeError:
pass
except Exception as e:
print(f" โ ๏ธ Failed: {e}")
def create_sample_project():
temp_dir = tempfile.mkdtemp(prefix="loregrep_tools_")
base_path = Path(temp_dir)
(base_path / "main.py").write_text('''
"""Main application."""
from config import ConfigManager
def load_config():
"""Load configuration."""
return ConfigManager().load_config()
def main():
"""Main entry point."""
config = load_config()
print(f"Loaded: {config}")
if __name__ == "__main__":
main()
''')
(base_path / "config.py").write_text('''
"""Configuration management."""
import json
from typing import Dict, Any
class ConfigManager:
"""Manages configuration."""
def __init__(self):
self.data = {}
def load_config(self) -> Dict[str, Any]:
"""Load configuration from file."""
return {"debug": True, "port": 8080}
def save_config(self, data: Dict[str, Any]) -> bool:
"""Save configuration."""
self.data = data
return True
def get_default_config() -> Dict[str, Any]:
"""Get default configuration."""
return {"debug": False, "port": 3000}
''')
return temp_dir
def cleanup_sample_project(temp_dir: str):
import shutil
try:
shutil.rmtree(temp_dir)
except OSError:
pass
if __name__ == "__main__":
asyncio.run(main())