Pular para o conteúdo

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#

RecursoO que fazAtalho
Diagnósticoerro e aviso sublinhados enquanto se digita, não só ao salvar
Autocompletarnomes do arquivo, embutidas, módulos e o que há dentro de cada umCtrl+Espaço
Hovera assinatura e o comentário que está acima da declaraçãoparar o mouse
Ir para definiçãosalta para onde o nome foi declaradoF12
Referênciasonde mais aquele nome apareceShift+F12
Esquemaações, blueprints, records e enums na barra lateralCtrl+Shift+O
Ajuda de assinaturaos parâmetros, enquanto se escreve a chamadaao abrir (
Renomeartroca o nome em todo o arquivo, recusando o que quebrariaF2
Formataro mesmo dataforge fmtShift+Alt+F
Correção rápidaaplica a sugestão do analisadorCtrl+.

Autocompletar sabe onde você está#

Depois de um ponto, só vem o que existe dentro daquilo:

text
adopt Arcane.Math as M

M.▌         ← só os 51 símbolos de Arcane.Math

Devolver 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:

text
action calcular(precoBase, desconto):
    total := ▌          ← 'precoBase' e 'desconto' aparecem aqui

E 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ê:

dataforge
// 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:

text
F2 sobre 'dobrar' → digitar 'yield'

  'yield' é palavra reservada do DataForge

Aceitar 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:

bash
dataforge lsp

Neovim#

text
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`#

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`#

text
(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#

SintomaProvável causa
Nenhum autocompletaro executável não está no PATH — veja o canal DataForge na saída do editor
Erros em dobroo 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 responderDataForge: Reiniciar o servidor de linguagem, na paleta de comandos
Quero ver o que aconteceuaponte 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.