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:

  1. El editor envía el código fuente al LSP cuando el usuario escribe
  2. El LSP analiza el código (lexer + parser) para obtener el AST
  3. Responde con diagnósticos, completados, información, etc.

Capacidades LSP implementadas

CapacidadDescripció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

ArchivoFunciónDescripción
lsp/completado.rsCompletadoLSPProvee sugerencias de autocompletado contextual
lsp/firma.rsFirmaLSPProvee información de firmas de funciones
lsp/index_stdlib.rsIndexStdlibÍndice de todos los módulos de la stdlib para completado
lsp/snippets.rsSnippetsLSPPlantillas 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.

⌨️ Productividad: El LSP de Forja hace que escribir código sea mucho más rápido. Por ejemplo, escribí for<TAB> para generar un bucle para completo, o fun<TAB> para una función.