ZLS em Zig — O que é e Como Usar

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

  1. Produtividade: Autocomplete e diagnósticos instantâneos aceleram o desenvolvimento.
  2. Navegação: “Go to definition” e “find references” em qualquer código Zig.
  3. Documentação inline: Hover sobre funções mostra documentação e assinaturas.
  4. 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

FuncionalidadeDescrição
AutocompleteSugestões de código em tempo real
DiagnósticosErros e warnings sem compilar
Go to definitionNavegar para a definição de um símbolo
HoverDocumentação e tipo ao passar o mouse
RenameRenomear símbolos em todo o projeto
Code actionsSugestões de correção automática
Inlay hintsTipos inferidos exibidos inline
Semantic highlightingColorizaçã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

Tutoriais Relacionados

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.