mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-11 02:33:51 +08:00
feat: 添加多个 LSP 测试示例,包括能力测试、调用层次和原始 LSP 测试
This commit is contained in:
104
codex-lens/examples/test_raw_lsp.py
Normal file
104
codex-lens/examples/test_raw_lsp.py
Normal file
@@ -0,0 +1,104 @@
|
||||
"""Raw LSP test with debug logging."""
|
||||
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from codexlens.lsp.standalone_manager import StandaloneLspManager
|
||||
|
||||
# Enable debug logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
logger = logging.getLogger("codexlens.lsp")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
async def test_raw_lsp():
|
||||
"""Test LSP with debug logging enabled."""
|
||||
|
||||
workspace_root = Path("D:/Claude_dms3/codex-lens")
|
||||
test_file = workspace_root / "test_simple_function.py"
|
||||
|
||||
print("Testing Raw LSP Call Hierarchy")
|
||||
print("="*80)
|
||||
|
||||
# Create LSP manager
|
||||
manager = StandaloneLspManager(
|
||||
workspace_root=str(workspace_root),
|
||||
timeout=30.0,
|
||||
)
|
||||
|
||||
try:
|
||||
# Start LSP manager
|
||||
print("\n1. Starting LSP manager...")
|
||||
await manager.start()
|
||||
print(" [OK] Started")
|
||||
|
||||
# Get server state
|
||||
state = await manager._get_server(str(test_file))
|
||||
if not state:
|
||||
print(" [ERROR] No server state!")
|
||||
return
|
||||
|
||||
print(f" Server initialized: {state.initialized}")
|
||||
print(f" Call hierarchy supported: {state.capabilities.get('callHierarchyProvider')}")
|
||||
|
||||
# Open document
|
||||
print("\n2. Opening document...")
|
||||
await manager._open_document(state, str(test_file))
|
||||
print(" [OK] Document opened")
|
||||
|
||||
# Wait a bit for Pyright to analyze
|
||||
print("\n3. Waiting for analysis...")
|
||||
await asyncio.sleep(2)
|
||||
print(" [OK] Waited 2 seconds")
|
||||
|
||||
# Try call hierarchy on main function (line 12)
|
||||
print("\n4. Sending prepareCallHierarchy request...")
|
||||
|
||||
# Direct request using _send_request
|
||||
params = {
|
||||
"textDocument": {"uri": test_file.as_uri()},
|
||||
"position": {"line": 11, "character": 4} # 0-indexed, "main" function
|
||||
}
|
||||
print(f" Params: {json.dumps(params, indent=2)}")
|
||||
|
||||
result = await manager._send_request(
|
||||
state,
|
||||
"textDocument/prepareCallHierarchy",
|
||||
params,
|
||||
)
|
||||
|
||||
print(f"\n5. Result: {result}")
|
||||
print(f" Type: {type(result)}")
|
||||
|
||||
if result:
|
||||
print(f" Items: {len(result)}")
|
||||
for item in result:
|
||||
print(f" - {item.get('name')}")
|
||||
else:
|
||||
print(" [WARN] No items returned")
|
||||
print(" This could mean:")
|
||||
print(" - Position doesn't point to a symbol")
|
||||
print(" - Pyright hasn't finished analyzing")
|
||||
print(" - Some other issue")
|
||||
|
||||
# Try with the higher-level API
|
||||
print("\n6. Testing with get_call_hierarchy_items API...")
|
||||
items = await manager.get_call_hierarchy_items(
|
||||
file_path=str(test_file),
|
||||
line=12,
|
||||
character=5,
|
||||
)
|
||||
print(f" Result: {len(items)} items")
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n[ERROR] Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
finally:
|
||||
print("\n7. Cleanup...")
|
||||
await manager.stop()
|
||||
print(" [OK] Done")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(test_raw_lsp())
|
||||
Reference in New Issue
Block a user