Esta página explica a ideia principal do oxc_language_server e em que ele difere da CLI. Se quiser entender melhor a comunicação entre o language server e o editor, a documentação oficial do LSP/LSIF é um ótimo começo. O README.md do language server resume as especificações relevantes.
Nota: aqui falamos muito em “ferramentas” — é um conceito abstrato para a lógica central do oxlint e do oxfmt.
Conceito do oxc_language_server ao implementar ferramentas
O oxc_language_server pode ser usado para evoluir seu próprio script até ele funcionar como language server. O servidor, por si só, não altera arquivos nem cria sugestões: isso é papel da ferramenta. Em vez disso, ele gerencia as pastas do workspace e toda a comunicação para carregar a configuração certa. Para falar com as ferramentas fornecidas, o servidor expõe os traits ToolBuilder e Tool.
Diferença entre Language Server e CLI
O editor altera o arquivo; o servidor comunica as mudanças
Um detalhe pequeno, mas importante: quem mexe no arquivo e quem aplica o conserto. As ferramentas de CLI gravam as mudanças no disco. O language server (oxc) nunca deve gravar direto no disco — só comunica as mudanças ao editor.
Pastas do workspace
Quando você abre um projeto git no editor, isso é uma pasta de workspace. O LSP permite abrir vários projetos (git) ao mesmo tempo. Cada projeto pode ter sua própria configuração (veja a parte seguinte), mas o essencial é ter um “contexto” próprio com um URI de workspace. Pense no URI do workspace como o equivalente ao “diretório de trabalho atual” da ferramenta CLI. Lembre-se de que o editor pode adicionar ou remover pastas de workspace.
Configurações (por pasta)
O language server pode ser configurado (como flags da CLI); no oxc vale isto: cada pasta de workspace pode ter sua configuração. Exemplo: o projeto git A usa lint com type-aware; o projeto git B usa fixes perigosos ao salvar.
Mudança de configuração
Surpresa: o usuário pode mudar a configuração do language server em tempo real. O editor envia a configuração atualizada. Hoje o servidor repassa a cada ferramenta a configuração antiga e a nova, para elas tratarem o que for preciso. Conforme a configuração, a ferramenta pode reiniciar ou se reconstruir.
Padrões de watch e arquivos observados
Sua ferramenta pode pedir ao editor para observar certos padrões (globs) de arquivo e avisar o servidor quando um arquivo for alterado/criado/apagado. Isso é usado sobretudo para .ox**rc.json e arquivos referenciados dentro dele (por exemplo extends no oxlint). Dependendo da configuração do workspace e da ferramenta, pode ser necessário reiniciar/reconstruir de novo.