Implementação do LSP (Language Server Protocol) para Delégua e dialetos, usada em extensões de editores como o VSCode e Jetbrains. Fornece funcionalidades como completude, navegação, formatação, documentação em código, referências e renomeação de símbolos. Projetado para ser usado tanto como servidor LSP standalone quanto como biblioteca importável por extensões web.
O servidor oferece as seguintes capacidades de linguagem:
- Completude (
textDocument/completion) — funções nativas, primitivas por tipo de variável, etiquetas de documentário, variáveis do documento, etc. - Definição (
textDocument/definition) — navegação até a declaração de um símbolo, incluindo símbolos importados de outros arquivos. - Formatação (
textDocument/formatting) — formatação de documento via Estilizador de cada dialeto. - Hover / documentação em código (
textDocument/hover) — tipo, assinatura ou documentação do símbolo sob o cursor. - Referências (
textDocument/references) — ocorrências de um símbolo no documento atual e em todo o workspace. - Renomeação (
textDocument/rename,textDocument/prepareRename) — renomeia um símbolo e gera as edições correspondentes em todo o workspace.
Dialetos suportados (conforme as extensões de arquivo reconhecidas em executarAnalises): Delégua, BIRL, Mapler, Pitugues, Potigol, VisuAlg e Portugol Studio.
Além de rodar como servidor LSP autônomo (standalone, bin: delegua-lsp, ver fontes/servidor.ts), delegua-lsp pode ser importado diretamente como biblioteca — por exemplo, por uma extensão web do VSCode rodando em navegador, sem acesso a fs/path do Node.js.
Para isso, as capacidades que precisam ler arquivos ou manipular caminhos (proverReferencias, provideRenameEdits, proverDefinicao) não importam fs/path diretamente — elas recebem essas APIs por injeção, através de um objeto AmbienteLSP:
interface AmbienteLSP {
sistemaArquivos: SistemaArquivosInterface; // lerArquivoTexto, listarDiretorio — assíncronas, compatíveis com vscode.workspace.fs
caminhos: ManipuladorCaminhosInterface; // juntar, dirname, resolver, normalizar
}O ponto de entrada público (fontes/index.ts) exporta somente os tipos dessas interfaces — importar o pacote não carrega nenhuma dependência de fs/path do Node.js. Uma implementação pronta para Node.js (criarAmbienteNode, em fontes/ambiente/ambiente-node.ts) é usada pelo servidor standalone; outros ambientes (ex.: vscode.workspace.fs em extensões web) fornecem seu próprio AmbienteLSP com as mesmas assinaturas.
yarn empacotar— compila e empacota o projeto emdist/yarn servidor— inicia o servidor LSP standaloneyarn testes-unitarios— executa a suíte de testes (Jest, com cobertura)