ZLS em Zig — O que é e Como Usar
Definição
ZLS (Zig Language Server) é a implementação do Language Server Protocol (LSP) para a linguagem Zig. Ele fornece funcionalidades como autocomplete, diagnósticos em tempo real, “go to definition”, hover com documentação e renomeação de símbolos para qualquer editor que suporte LSP — incluindo VS Code, Neovim, Emacs, Sublime Text e outros.
O ZLS é um projeto de código aberto mantido pela comunidade com apoio da Zig Software Foundation.
Por que ZLS Importa
- Produtividade: Autocomplete e diagnósticos instantâneos aceleram o desenvolvimento.
- Navegação: “Go to definition” e “find references” em qualquer código Zig.
- Documentação inline: Hover sobre funções mostra documentação e assinaturas.
- Qualquer editor: Funciona com qualquer editor que suporte LSP.
Instalação
Via zigup
# Instalar zigup (gerenciador de versões do Zig)
# Depois instalar o ZLS compatível com sua versão do Zig
zigup fetch zls
Manual
# Baixar release do GitHub
# https://github.com/zigtools/zls/releases
# Ou compilar do fonte
git clone https://github.com/zigtools/zls.git
cd zls
zig build -Doptimize=ReleaseSafe
Configuração no VS Code
{
"zig.path": "zig",
"zig.zls.path": "zls"
}
Configuração no Neovim (com nvim-lspconfig)
require('lspconfig').zls.setup{
cmd = { "zls" },
settings = {
zls = {
enable_snippets = true,
enable_autofix = true,
},
},
}
Funcionalidades
| Funcionalidade | Descrição |
|---|---|
| Autocomplete | Sugestões de código em tempo real |
| Diagnósticos | Erros e warnings sem compilar |
| Go to definition | Navegar para a definição de um símbolo |
| Hover | Documentação e tipo ao passar o mouse |
| Rename | Renomear símbolos em todo o projeto |
| Code actions | Sugestões de correção automática |
| Inlay hints | Tipos inferidos exibidos inline |
| Semantic highlighting | Colorização semântica do código |
Exemplo de Uso
const std = @import("std");
// O ZLS fornece:
// 1. Autocomplete ao digitar "std."
// 2. Hover sobre "ArrayList" mostra documentação
// 3. Go to definition em "append" navega para a std lib
// 4. Diagnóstico se você esquecer defer para deinit
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
var lista = std.ArrayList(u32).init(gpa.allocator());
defer lista.deinit();
try lista.append(42);
try lista.append(100);
for (lista.items) |item| {
std.debug.print("{}\n", .{item});
}
}
Armadilhas Comuns
- Versão compatível: O ZLS deve ser da mesma versão major que o compilador Zig. ZLS 0.13.x com Zig 0.13.x.
- build.zig necessário: O ZLS funciona melhor em projetos com
build.zig. Sem ele, a resolução de imports pode falhar. - Cache: Se o ZLS parecer desatualizado, reinicie o servidor no editor.
- Performance em projetos grandes: O ZLS pode consumir memória significativa em projetos muito grandes.
Termos Relacionados
- Zig Software Foundation — Organização que apoia o ZLS
- build.zig — ZLS usa o build.zig para entender o projeto
- zigup — Gerenciador que facilita instalar o ZLS
- Comptime — ZLS analisa código comptime para autocomplete