Servidor LSP — Language Server Protocol
Archivo: src/bin/forja_lsp.rs (1375 líneas)
¿Por qué existe?
Implementa un servidor que habla el protocolo LSP (Language Server Protocol) de Microsoft, permitiendo que cualquier editor compatible (VS Code, Neovim, Emacs, Helix, etc.) tenga autocompletado, diagnósticos en tiempo real, información al hover, y snippets para el lenguaje Forja.
¿Cómo funciona?
El binario forja_lsp se ejecuta como un proceso hijo del editor. La comunicación se hace mediante JSON-RPC sobre stdin/stdout. El LSP traduce las solicitudes del editor en operaciones sobre el código Forja:
- El editor envía el código fuente al LSP cuando el usuario escribe
- El LSP analiza el código (lexer + parser) para obtener el AST
- Responde con diagnósticos, completados, información, etc.
Capacidades LSP implementadas
| Capacidad | Descripción |
|---|---|
Completado (textDocument/completion) | Sugerencias contextuales: palabras clave, funciones, variables, tipos |
Diagnósticos (textDocument/publishDiagnostics) | Errores y advertencias en tiempo real mientras se escribe código |
Hover (textDocument/hover) | Información detallada al pasar el mouse sobre un símbolo |
Firma de función (textDocument/signatureHelp) | Muestra la firma de la función mientras se escriben argumentos |
Ir a definición (textDocument/definition) | Salta a la definición de un símbolo |
Documento formateado (textDocument/formatting) | Formatea el documento usando el formateador de Forja |
Snippets (Completación con snippets) | Plantillas de código: funz<TAB> → función, clz<TAB> → clase |
Módulos auxiliares del LSP
| Archivo | Función | Descripción |
|---|---|---|
lsp/completado.rs | CompletadoLSP | Provee sugerencias de autocompletado contextual |
lsp/firma.rs | FirmaLSP | Provee información de firmas de funciones |
lsp/index_stdlib.rs | IndexStdlib | Índice de todos los módulos de la stdlib para completado |
lsp/snippets.rs | SnippetsLSP | Plantillas de código reutilizables |
Integración con la stdlib
El IndexStdlib analiza los 41 módulos de stdlib/std/ (embebidos via stdlib_embedded.rs) y construye un índice completo de todas las funciones, tipos y constantes disponibles. Esto permite que el autocompletado sugiera funciones de la stdlib con sus parámetros y tipos.
for<TAB> para generar un bucle para completo, o fun<TAB> para una función.