Pular para o conteúdo

Servidor de Linguagem

O Wippy inclui um servidor LSP (Language Server Protocol) integrado que fornece recursos de IDE para codigo Lua. O servidor e executado como parte do runtime do Wippy e se conecta a editores via TCP ou HTTP.

  • Autocompletar com sugestoes baseadas em tipos
  • Informacoes ao passar o mouse mostrando tipos e assinaturas
  • Ir para definicao
  • Encontrar referencias
  • Simbolos de documento e workspace
  • Hierarquia de chamadas (chamadas de entrada e saida)
  • Diagnosticos em tempo real (erros de parse, erros de tipo)
  • Ajuda de assinatura para parametros de funcao

Habilite o servidor LSP em .wippy.yaml:

version: "1.0"
lua:
type_system:
enabled: true
lsp:
enabled: true
address: ":7777"
CampoPadraoDescricao
enabledfalseHabilitar o servidor TCP
address:7777Endereco de escuta TCP
http_enabledfalseHabilitar o transporte HTTP
http_address:7778Endereco de escuta HTTP
http_path/lspCaminho do endpoint HTTP
http_allow_origin*Origem permitida para CORS
max_message_bytes8388608Tamanho maximo de mensagem recebida (bytes)

O servidor TCP utiliza JSON-RPC 2.0 com enquadramento de mensagens LSP padrao (cabeçalhos Content-Length). Este e o transporte principal para integracoes com editores.

O transporte HTTP aceita requisicoes POST com payloads JSON-RPC. Util para editores baseados em navegador e ferramentas web. Cabecalhos CORS sao incluidos para acesso cross-origin.

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

O servidor LSP utiliza o esquema de URI wippy:// para identificar entradas do registro:

wippy://namespace:entry_name

Os editores mapeiam essas URIs para IDs de entrada no registro. Tanto o formato com esquema wippy:// quanto o formato simples namespace:entry_name sao aceitos.

O servidor LSP mantem um indice de todas as entradas de codigo para buscas rapidas. A indexacao acontece em segundo plano usando multiplos workers.

Comportamentos principais:

  • Entradas sao indexadas em ordem de dependencia (dependencias primeiro)
  • Alteracoes disparam reindexacao das entradas afetadas
  • Alteracoes nao salvas no editor sao armazenadas em um overlay
  • O indice e incremental - apenas entradas alteradas sao reprocessadas
MetodoDescricao
initializeNegociacao de capacidades
textDocument/didOpenRastrear documentos abertos
textDocument/didChangeSincronizacao completa do documento
textDocument/didCloseLiberar documentos
textDocument/hoverInformacao de tipo na posicao do cursor
textDocument/definitionIr para definicao
textDocument/referencesEncontrar todas as referencias
textDocument/completionAutocompletar codigo
textDocument/signatureHelpAssinaturas de funcao
textDocument/diagnosticDiagnosticos do arquivo
textDocument/documentSymbolSimbolos do arquivo
workspace/symbolBusca global de simbolos
textDocument/prepareCallHierarchyHierarquia de chamadas
callHierarchy/incomingCallsEncontrar chamadores
callHierarchy/outgoingCallsEncontrar chamados

O mecanismo de autocompletar resolve tipos atraves do grafo de codigo. Ele fornece:

  • Autocompletar membros apos . e : (campos, metodos)
  • Autocompletar variaveis locais
  • Autocompletar simbolos a nivel de modulo
  • Caracteres de disparo: ., :

Os diagnosticos sao calculados durante a indexacao e incluem:

  • Erros de parse (problemas de sintaxe)
  • Erros de verificacao de tipos (incompatibilidades, simbolos indefinidos)
  • Niveis de severidade: error, warning, information, hint

Os diagnosticos sao atualizados conforme voce digita atraves do sistema de overlay de documentos.

  • Linter - Verificacao de codigo via CLI
  • Tipos - Documentacao do sistema de tipos
  • Configuracao - Configuracao do runtime