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.
Recursos
- 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
Configuracao
Habilite o servidor LSP em .wippy.yaml:
version: "1.0"
lua:
type_system:
enabled: true
lsp:
enabled: true
address: ":7777"
Campos de Configuracao
| Campo | Padrao | Descricao |
|---|---|---|
enabled |
false | Habilitar o servidor TCP |
address |
:7777 | Endereco de escuta TCP |
http_enabled |
false | Habilitar o transporte HTTP |
http_address |
:7778 | Endereco de escuta HTTP |
http_path |
/lsp | Caminho do endpoint HTTP |
http_allow_origin |
* | Origem permitida para CORS |
max_message_bytes |
8388608 | Tamanho maximo de mensagem recebida (bytes) |
Transporte TCP
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.
Transporte HTTP
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: "*"
Esquema de URI de Documento
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.
Indexacao
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
Metodos LSP Suportados
| Metodo | Descricao |
|---|---|
initialize |
Negociacao de capacidades |
textDocument/didOpen |
Rastrear documentos abertos |
textDocument/didChange |
Sincronizacao completa do documento |
textDocument/didClose |
Liberar documentos |
textDocument/hover |
Informacao de tipo na posicao do cursor |
textDocument/definition |
Ir para definicao |
textDocument/references |
Encontrar todas as referencias |
textDocument/completion |
Autocompletar codigo |
textDocument/signatureHelp |
Assinaturas de funcao |
textDocument/diagnostic |
Diagnosticos do arquivo |
textDocument/documentSymbol |
Simbolos do arquivo |
workspace/symbol |
Busca global de simbolos |
textDocument/prepareCallHierarchy |
Hierarquia de chamadas |
callHierarchy/incomingCalls |
Encontrar chamadores |
callHierarchy/outgoingCalls |
Encontrar chamados |
Autocompletar
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:
.,:
Diagnosticos
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.
Veja Tambem
- Linter - Verificacao de codigo via CLI
- Tipos - Documentacao do sistema de tipos
- Configuracao - Configuracao do runtime