mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
Add detailed documentation with examples for: - hanzo-tools-fs: read, write, edit, tree, find, search, ast - hanzo-tools-shell: cmd, ps, zsh, bash, auto-backgrounding - hanzo-tools-browser: 70+ Playwright actions, device emulation - hanzo-tools-memory: memories, facts, knowledge bases, scopes - hanzo-tools-reasoning: think and critic tools - hanzo-tools-lsp: go-to-definition, references, rename, hover - hanzo-tools-refactor: rename, extract, inline, batch operations - hanzo-tools-agent: multi-agent orchestration, consensus, swarm - hanzo-tools-llm: unified LLM interface with 100+ models Each doc includes: - Installation instructions - Quick start examples - Full API reference - Usage examples - Best practices
284 lines
6.4 KiB
Markdown
284 lines
6.4 KiB
Markdown
# hanzo-tools-lsp
|
|
|
|
Language Server Protocol tool for code intelligence. Provides go-to-definition, find references, rename, hover, and more.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install hanzo-tools-lsp
|
|
```
|
|
|
|
Or as part of the full toolkit:
|
|
|
|
```bash
|
|
pip install hanzo-mcp[tools-all]
|
|
```
|
|
|
|
## Overview
|
|
|
|
`hanzo-tools-lsp` provides on-demand LSP configuration and automatic installation:
|
|
|
|
- **definition** - Go to definition of symbol at position
|
|
- **references** - Find all references to symbol
|
|
- **rename** - Rename symbol across codebase
|
|
- **hover** - Get hover information at position
|
|
- **completion** - Get code completions at position
|
|
- **diagnostics** - Get errors and warnings for file
|
|
- **status** - Check LSP server status
|
|
|
|
## Supported Languages
|
|
|
|
| Language | LSP Server | Install Command |
|
|
|----------|------------|-----------------|
|
|
| Go | gopls | `go install golang.org/x/tools/gopls@latest` |
|
|
| Python | pyright | `npm install -g pyright` |
|
|
| TypeScript/JS | typescript-language-server | `npm install -g typescript typescript-language-server` |
|
|
| Rust | rust-analyzer | `rustup component add rust-analyzer` |
|
|
| Java | jdtls | `brew install jdtls` |
|
|
| C/C++ | clangd | `brew install llvm` |
|
|
| Ruby | solargraph | `gem install solargraph` |
|
|
| Lua | lua-language-server | `brew install lua-language-server` |
|
|
|
|
## Quick Start
|
|
|
|
```python
|
|
# Go to definition
|
|
lsp(action="definition", file="/path/to/file.go", line=10, character=15)
|
|
|
|
# Find all references
|
|
lsp(action="references", file="/path/to/file.py", line=25, character=8)
|
|
|
|
# Rename symbol
|
|
lsp(action="rename", file="/path/to/file.ts", line=5, character=10, new_name="newName")
|
|
|
|
# Get hover info
|
|
lsp(action="hover", file="/path/to/file.rs", line=42, character=20)
|
|
|
|
# Get completions
|
|
lsp(action="completion", file="/path/to/file.py", line=30, character=5)
|
|
|
|
# Check status
|
|
lsp(action="status", file="/path/to/file.go")
|
|
```
|
|
|
|
## Actions Reference
|
|
|
|
### definition
|
|
|
|
Find where a symbol is defined.
|
|
|
|
```python
|
|
lsp(action="definition", file="main.go", line=42, character=15)
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"action": "definition",
|
|
"file": "main.go",
|
|
"definition": {
|
|
"file": "/project/pkg/utils.go",
|
|
"start": {"line": 25, "character": 5},
|
|
"end": {"line": 25, "character": 15}
|
|
}
|
|
}
|
|
```
|
|
|
|
### references
|
|
|
|
Find all references to a symbol.
|
|
|
|
```python
|
|
lsp(action="references", file="utils.py", line=10, character=4)
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"action": "references",
|
|
"file": "utils.py",
|
|
"references": [
|
|
{"file": "main.py", "start": {"line": 15, "character": 8}},
|
|
{"file": "tests/test_utils.py", "start": {"line": 22, "character": 12}}
|
|
],
|
|
"count": 2
|
|
}
|
|
```
|
|
|
|
### rename
|
|
|
|
Rename a symbol across the codebase.
|
|
|
|
```python
|
|
lsp(action="rename", file="models.ts", line=5, character=10, new_name="newClassName")
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"action": "rename",
|
|
"file": "models.ts",
|
|
"new_name": "newClassName",
|
|
"changes": {
|
|
"/project/models.ts": [
|
|
{"range": {...}, "newText": "newClassName"}
|
|
],
|
|
"/project/index.ts": [
|
|
{"range": {...}, "newText": "newClassName"}
|
|
]
|
|
},
|
|
"files_affected": 2
|
|
}
|
|
```
|
|
|
|
### hover
|
|
|
|
Get documentation and type information at a position.
|
|
|
|
```python
|
|
lsp(action="hover", file="main.rs", line=30, character=8)
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"action": "hover",
|
|
"file": "main.rs",
|
|
"position": {"line": 30, "character": 8},
|
|
"contents": "fn process(data: &[u8]) -> Result<(), Error>\n\nProcesses the input data..."
|
|
}
|
|
```
|
|
|
|
### completion
|
|
|
|
Get code completions at a position.
|
|
|
|
```python
|
|
lsp(action="completion", file="app.py", line=25, character=10)
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"action": "completion",
|
|
"file": "app.py",
|
|
"position": {"line": 25, "character": 10},
|
|
"completions": [
|
|
{"label": "append", "kind": 2, "detail": "(element) -> None"},
|
|
{"label": "extend", "kind": 2, "detail": "(iterable) -> None"}
|
|
],
|
|
"count": 2
|
|
}
|
|
```
|
|
|
|
### status
|
|
|
|
Check if LSP server is installed and get capabilities.
|
|
|
|
```python
|
|
lsp(action="status", file="main.go")
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"language": "go",
|
|
"lsp_server": "gopls",
|
|
"installed": true,
|
|
"capabilities": ["definition", "references", "rename", "diagnostics", "hover", "completion"]
|
|
}
|
|
```
|
|
|
|
## Architecture
|
|
|
|
### Automatic Server Management
|
|
|
|
The LSP tool automatically:
|
|
1. Detects language from file extension
|
|
2. Finds project root based on language markers (go.mod, package.json, etc.)
|
|
3. Checks if LSP server is installed
|
|
4. Installs LSP server if needed
|
|
5. Starts and initializes the server
|
|
6. Maintains singleton server per language:project_root
|
|
|
|
### Server Lifecycle
|
|
|
|
```
|
|
Request → Detect Language → Find Project Root
|
|
↓
|
|
Check Cache (language:root_uri)
|
|
↓
|
|
If not running: Install → Start → Initialize
|
|
↓
|
|
Execute LSP Request → Return Result
|
|
```
|
|
|
|
### Global Server Registry
|
|
|
|
LSP servers are managed globally to avoid redundant instances:
|
|
|
|
```python
|
|
# Servers are keyed by language:root_uri
|
|
# e.g., "go:/home/user/project"
|
|
# Cleanup happens automatically on process exit
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Code Navigation
|
|
|
|
```python
|
|
# Find where a function is defined
|
|
lsp(action="definition", file="handlers/user.go", line=45, character=12)
|
|
|
|
# Find all places that call this function
|
|
lsp(action="references", file="handlers/user.go", line=45, character=12)
|
|
```
|
|
|
|
### Safe Refactoring
|
|
|
|
```python
|
|
# First, check all references
|
|
refs = lsp(action="references", file="models.py", line=10, character=6)
|
|
|
|
# Then rename
|
|
lsp(action="rename", file="models.py", line=10, character=6, new_name="UserProfile")
|
|
```
|
|
|
|
### IDE-like Experience
|
|
|
|
```python
|
|
# Get documentation on hover
|
|
lsp(action="hover", file="main.rs", line=25, character=8)
|
|
|
|
# Get completions while typing
|
|
lsp(action="completion", file="app.ts", line=30, character=15)
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Project Root Detection
|
|
|
|
The LSP tool finds project roots using language-specific markers:
|
|
|
|
| Language | Markers |
|
|
|----------|---------|
|
|
| Go | go.mod, go.sum |
|
|
| Python | pyproject.toml, setup.py, requirements.txt |
|
|
| TypeScript | tsconfig.json, package.json |
|
|
| Rust | Cargo.toml |
|
|
| Java | pom.xml, build.gradle |
|
|
| C/C++ | compile_commands.json, CMakeLists.txt |
|
|
| Ruby | Gemfile |
|
|
|
|
### Custom LSP Servers
|
|
|
|
For custom configurations, ensure the LSP server is in your PATH before using the tool.
|
|
|
|
## Best Practices
|
|
|
|
1. **Use status first** - Check if LSP is available before heavy operations
|
|
2. **Provide accurate positions** - Line and character must match exact symbol position
|
|
3. **Let servers persist** - Servers are cached; avoid restarting unnecessarily
|
|
4. **Combine with other tools** - Use with search/ast for comprehensive code analysis
|