Files
Claude-Code-Workflow/codex-lens/examples/test_lsp_tree.py

93 lines
3.3 KiB
Python

"""Test LSP Association Tree building directly."""
import asyncio
from pathlib import Path
from codexlens.lsp.standalone_manager import StandaloneLspManager
from codexlens.search.association_tree import AssociationTreeBuilder
async def test_lsp_tree():
"""Test building LSP association tree for a known Python file."""
# Setup - use simple test file
workspace_root = Path("D:/Claude_dms3/codex-lens")
test_file = "test_simple_function.py"
test_line = 11 # main() function definition (1-based)
test_char = 5 # Points to 'm' in 'main' (1-based, becomes 4 in 0-based)
print(f"Testing LSP tree for: {test_file}:{test_line}")
print("="*80)
# Create LSP manager
manager = StandaloneLspManager(
workspace_root=str(workspace_root),
timeout=10.0,
)
try:
# Start LSP manager
print("\n1. Starting LSP manager...")
await manager.start()
print(" [OK] LSP manager started")
# Test get_call_hierarchy_items directly
print(f"\n2. Testing get_call_hierarchy_items for {test_file}:{test_line}:{test_char}...")
items = await manager.get_call_hierarchy_items(
file_path=str(workspace_root / test_file),
line=test_line,
character=test_char,
)
print(f" Result: {len(items)} items")
if items:
for i, item in enumerate(items, 1):
print(f" {i}. {item.get('name')} ({item.get('kind')})")
print(f" URI: {item.get('uri')}")
print(f" Range: {item.get('range')}")
else:
print(" [WARN] No call hierarchy items returned!")
print(" This means either:")
print(" - The file/line doesn't contain a symbol")
print(" - LSP server doesn't support call hierarchy")
print(" - Pyright isn't running correctly")
# If we got items, try building a tree
if items:
print(f"\n3. Building association tree...")
builder = AssociationTreeBuilder(
lsp_manager=manager,
timeout=10.0,
)
tree = await builder.build_tree(
seed_file_path=str(workspace_root / test_file),
seed_line=test_line,
seed_character=test_char,
max_depth=2,
expand_callers=True,
expand_callees=True,
)
print(f" Tree built successfully!")
print(f" - Roots: {len(tree.roots)}")
print(f" - Total nodes: {len(tree.node_list)}")
print(f" - Depth reached: {tree.depth_reached}")
if tree.node_list:
print(f"\n First 5 nodes:")
for i, node in enumerate(tree.node_list[:5], 1):
print(f" {i}. {node.item.name} @ {node.item.file_path}:{node.item.range.start_line}")
print(f" Depth: {node.depth}, Is cycle: {node.is_cycle}")
except Exception as e:
print(f"\n[ERROR] Error: {e}")
import traceback
traceback.print_exc()
finally:
# Cleanup
print("\n4. Cleaning up...")
await manager.stop()
print(" [OK] LSP manager stopped")
if __name__ == "__main__":
asyncio.run(test_lsp_tree())