LSP client (lsp/client.rs): - JSON-RPC framing over subprocess stdio - Async request/response with oneshot channels - Background read loop routing responses to pending requests - 30s timeout per request, graceful shutdown LSP manager (lsp/manager.rs): - Auto-detect: Cargo.toml → rust-analyzer, package.json → tsserver, pyproject.toml → pyright, go.mod → gopls - Initialize handshake, lazy textDocument/didOpen - High-level methods: definition, references, hover, document_symbols, workspace_symbols - Graceful degradation when binary not on PATH LSP tools (tools.rs): - lsp_definition, lsp_references, lsp_hover, lsp_diagnostics, lsp_symbols - execute_lsp() async dispatch, is_lsp_tool() check - All routed as ToolSide::Client in orchestrator Tool schemas registered in Sol's build_tool_definitions() for Mistral. Integration tests (6 new): - Language detection for Rust project - is_lsp_tool routing - LSP initialize + hover on src/main.rs - Document symbols (finds main function) - Workspace symbols with retry (waits for rust-analyzer indexing) - Graceful degradation with bad project path
2.6 KiB
markdown test artifacts
1. headers
h1: the quick brown fox
h2: jumps over
h3: the lazy dog
h4: 42
h5: why not
h6: minimum viable header
2. text formatting
bold, italic, bold italic, strikethrough, inline code, ==highlight== (if supported).
3. lists
unordered
- top level
- nested
- deeply nested
- nested
- back to top
ordered
- first
- nested first
- nested second
- second
- third
task lists
- unchecked
- checked
- partially done (if supported)
4. code blocks
inline code example
fenced blocks
def factorial(n):
return 1 if n <= 1 else n * factorial(n - 1)
# shebang test
#!/bin/bash
echo "hello world"
plaintext with no language
preserves spaces and newlines
5. tables
| syntax | description | test |
|---|---|---|
| header | title | here |
| paragraph | text | more |
code |
bold | italics |
6. blockquotes
single line
multi-line continuation
nested blockquote
7. horizontal rules
text
text
text
8. links & images
9. footnotes
here's a footnote1 .
10. html (if supported)
red text
interactive (but not here)
11. edge cases
whitespace
line with irregular spaces
unicode
emoji: 🚀 ✨ 🦊 symbols: ← ↑ → ↓ ↔ ↕ ⇄ ⇅ math: 30° ½ ¼ ¾ ± × ÷ ≠ ≤ ≥ ≈ ∞
escapes
*not bold* `not code` [not a link](https://example.com)
empty elements
[] () {}
12. mixed nesting
- ordered item
with a blockquote
- and a nested list
- another item
code block inside list
13. long content
lorem ipsum dolor sit amet, consectetur adipiscing elit. sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
14. definition lists (if supported)
- term 1
- definition 1 term 2
- definition 2a
- definition 2b
15. math (if supported)
E = mc^2
\int_a^b f(x) dx
-
this is the footnote text. ↩︎