Servidor de linguagem (LSP)
Autocompletar, erro ao digitar, ir-para-definição e renomear — do mesmo analisador que o 'dataforge check' usa.
O servidor de linguagem é o que transforma o editor de um bloco de notas colorido numa ferramenta. Ele fala o Language Server Protocol — o mesmo protocolo que TypeScript, Rust e Python usam — e é servido pelo mesmo analisador estático do dataforge check.
O que ele responde#
| Recurso | O que faz | Atalho |
|---|---|---|
| Diagnóstico | erro e aviso sublinhados enquanto se digita, não só ao salvar | — |
| Autocompletar | nomes do arquivo, embutidas, módulos e o que há dentro de cada um | Ctrl+Espaço |
| Hover | a assinatura e o comentário que está acima da declaração | parar o mouse |
| Ir para definição | salta para onde o nome foi declarado | F12 |
| Referências | onde mais aquele nome aparece | Shift+F12 |
| Esquema | ações, blueprints, records e enums na barra lateral | Ctrl+Shift+O |
| Ajuda de assinatura | os parâmetros, enquanto se escreve a chamada | ao abrir ( |
| Renomear | troca o nome em todo o arquivo, recusando o que quebraria | F2 |
| Formatar | o mesmo dataforge fmt | Shift+Alt+F |
| Correção rápida | aplica a sugestão do analisador | Ctrl+. |
Autocompletar sabe onde você está#
Depois de um ponto, só vem o que existe dentro daquilo:
adopt Arcane.Math as M
M.▌ ← só os 51 símbolos de Arcane.MathDevolver o catálogo inteiro ali é o que faz o autocompletar virar ruído. Dentro do corpo de uma ação, os parâmetros dela aparecem — é o que mais faz alguém achar que o recurso não funciona:
action calcular(precoBase, desconto):
total := ▌ ← 'precoBase' e 'desconto' aparecem aquiE os nomes do próprio arquivo vêm antes dos 1016 símbolos da stdlib — é o que se procura em nove de cada dez vezes.
O hover lê o seu comentário#
DataForge não tem docstring. O costume — visível nos 216 exercícios e na stdlib inteira — é comentar acima da declaração, e é dali que o hover lê:
// Divide a conta entre as pessoas, arredondando para cima
// para o total nunca ficar menor que o valor original.
action dividir(total: Number, pessoas: Integer) -> Number:
yield ceil(total / pessoas)Parar o mouse sobre dividir mostra a assinatura completa e as duas linhas. Sem sintaxe nova, sem anotação especial: o que já estava escrito passou a servir para mais uma coisa.
O que ele recusa#
Renomear para uma palavra reservada é recusado na hora:
F2 sobre 'dobrar' → digitar 'yield'
'yield' é palavra reservada do DataForgeAceitar só adiaria o erro para a próxima execução — e aí ele apareceria longe da causa, num arquivo que "estava funcionando".
Ele sobrevive ao arquivo pela metade#
Esta é a decisão que mais se sente no uso. Enquanto se digita, o arquivo passa a maior parte do tempo inválido — falta um :, falta fechar um parêntese. Se cada estado inválido zerasse o que o servidor sabe, o autocompletar sumiria justamente enquanto se escreve.
A última análise boa fica guardada e continua respondendo hover, autocompletar e esquema. O erro de sintaxe é publicado ao mesmo tempo — você vê o problema e continua com a ferramenta.
Outros editores#
Qualquer editor que fale LSP serve. O comando é sempre o mesmo:
dataforge lspNeovim#
vim.lsp.config.dataforge = {
cmd = { 'dataforge', 'lsp' },
filetypes = { 'dataforge' },
root_markers = { 'forge.toml', '.git' },
}
vim.lsp.enable('dataforge')
vim.filetype.add({ extension = { df = 'dataforge' } })Helix — em `languages.toml`#
[[language]]
name = "dataforge"
scope = "source.dataforge"
file-types = ["df"]
roots = ["forge.toml"]
indent = { tab-width = 4, unit = " " }
language-servers = ["dataforge"]
[language-server.dataforge]
command = "dataforge"
args = ["lsp"]
Emacs — com `eglot`#
(add-to-list 'auto-mode-alist '("\\.df\\'" . prog-mode))
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'(dataforge-mode . ("dataforge" "lsp"))))Quando algo não funciona#
| Sintoma | Provável causa |
|---|---|
| Nenhum autocompletar | o executável não está no PATH — veja o canal DataForge na saída do editor |
| Erros em dobro | o servidor e o check ao salvar ligados; o servidor desliga o segundo sozinho, mas uma extensão antiga em cache pode não fazer isso — reinstale com dataforge editor |
| Parou de responder | DataForge: Reiniciar o servidor de linguagem, na paleta de comandos |
| Quero ver o que aconteceu | aponte dataforge.servidor.log para um arquivo |
Desligar#
Em Settings, dataforge.servidor.ativo como false. O editor volta ao diagnóstico simples — dataforge check ao salvar — e o resto da extensão continua igual.