Ir al contenido

Servidor de Lenguaje

Wippy incluye un servidor LSP (Language Server Protocol) integrado que proporciona funcionalidades de IDE para codigo Lua. El servidor se ejecuta como parte del runtime de Wippy y se conecta a editores via TCP o HTTP.

  • Autocompletado con sugerencias basadas en tipos
  • Informacion al pasar el cursor mostrando tipos y firmas
  • Ir a la definicion
  • Buscar referencias
  • Simbolos de documento y espacio de trabajo
  • Jerarquia de llamadas (entrantes y salientes)
  • Diagnosticos en tiempo real (errores de analisis, errores de tipo)
  • Ayuda de firma para parametros de funciones

Habilita el servidor LSP en .wippy.yaml:

version: "1.0"
lua:
type_system:
enabled: true
lsp:
enabled: true
address: ":7777"
CampoPor DefectoDescripcion
enabledfalseHabilitar el servidor TCP
address:7777Direccion de escucha TCP
http_enabledfalseHabilitar el transporte HTTP
http_address:7778Direccion de escucha HTTP
http_path/lspRuta del endpoint HTTP
http_allow_origin*Origen permitido para CORS
max_message_bytes8388608Tamano maximo de mensaje entrante (bytes)

El servidor TCP utiliza JSON-RPC 2.0 con el enmarcado estandar de mensajes LSP (cabeceras Content-Length). Este es el transporte principal para integraciones con editores.

El transporte HTTP acepta solicitudes POST con payloads JSON-RPC. Util para editores basados en navegador y herramientas web. Se incluyen cabeceras CORS para acceso entre origenes.

lsp:
enabled: true
http_enabled: true
http_address: ":7778"
http_path: "/lsp"
http_allow_origin: "*"

El servidor LSP usa el esquema de URI wippy:// para identificar entradas del registro:

wippy://namespace:entry_name

Los editores mapean estos URIs a IDs de entrada en el registro. Se aceptan tanto el esquema wippy:// como el formato directo namespace:entry_name.

El servidor LSP mantiene un indice de todas las entradas de codigo para busquedas rapidas. La indexacion ocurre en segundo plano usando multiples workers.

Comportamientos clave:

  • Las entradas se indexan en orden de dependencias (dependencias primero)
  • Los cambios disparan la re-indexacion de las entradas afectadas
  • Los cambios no guardados del editor se almacenan en una capa superpuesta
  • El indice es incremental - solo se reprocesan las entradas modificadas
MetodoDescripcion
initializeNegociacion de capacidades
textDocument/didOpenSeguimiento de documentos abiertos
textDocument/didChangeSincronizacion completa de documentos
textDocument/didCloseLiberacion de documentos
textDocument/hoverInformacion de tipo en el cursor
textDocument/definitionIr a la definicion
textDocument/referencesBuscar todas las referencias
textDocument/completionAutocompletado
textDocument/signatureHelpFirmas de funciones
textDocument/diagnosticDiagnosticos de archivo
textDocument/documentSymbolSimbolos de archivo
workspace/symbolBusqueda global de simbolos
textDocument/prepareCallHierarchyJerarquia de llamadas
callHierarchy/incomingCallsBuscar llamadores
callHierarchy/outgoingCallsBuscar llamados

El motor de autocompletado resuelve tipos a traves del grafo de codigo. Proporciona:

  • Autocompletado de miembros despues de . y : (campos, metodos)
  • Autocompletado de variables locales
  • Autocompletado de simbolos a nivel de modulo
  • Caracteres de activacion: ., :

Los diagnosticos se calculan durante la indexacion e incluyen:

  • Errores de analisis (problemas de sintaxis)
  • Errores de verificacion de tipos (incompatibilidades, simbolos no definidos)
  • Niveles de severidad: error, warning, information, hint

Los diagnosticos se actualizan mientras escribes a traves del sistema de capa superpuesta de documentos.

  • Linter - Verificacion de codigo por linea de comandos
  • Tipos - Documentacion del sistema de tipos
  • Configuracion - Configuracion del runtime