Entrada (esquema .proto)

Saída (.proto formatado)

O que esta ferramenta faz

Você cola um esquema Protocol Buffers com indentação misturada, declarações de campo grudadas ou linhas em branco aleatórias vindas de um copy-paste, e quer que ele fique parecido com o resto do repositório. Este formatador reescreve o arquivo com indentação de dois espaços por nível de chave, exatamente um espaço em torno de =, um espaço depois de , e no máximo uma linha em branco consecutiva entre blocos. Os comentários — tanto os de linha // quanto os de bloco /* ... */ — ficam exatamente onde você os colocou.

Ele não faz parsing nem valida o esquema, ou seja, funciona em entradas levemente quebradas onde buf format ou o "Format Document" do seu editor podem falhar. Se o seu .proto tem algum erro de sintaxe em algum ponto, o resto do arquivo continua sendo formatado em volta. A contrapartida: ele não consegue reordenar campos, normalizar a ordem dos imports nem remover opções não usadas como faria um formatador de verdade baseado em parser. Para isso, rode buf format no seu pipeline de build.

Tudo roda no seu navegador — sem upload, sem rate limit, nenhum esquema enviado para lugar nenhum. Útil quando o esquema contém nomes de pacote internos, nomes de tipo ou qualquer coisa que você não queira mandar para uma API de terceiros. Funciona em qualquer arquivo que caiba na memória do navegador; até dezenas de milhares de linhas formatam em bem menos de um segundo.

Como usar

Três passos. A saída atualiza cerca de 300 ms depois que você para de digitar.

1

Cole o seu esquema .proto

Solte o esquema no editor da esquerda. syntax, package, diretivas import, blocos message, enums aninhados, oneof, map<K, V> — tudo é tratado. Quebras de linha misturadas (CRLF) são normalizadas para LF na saída.

O formatador não reordena nada — campos, imports e opções ficam na ordem em que você escreveu. Se quiser uma ordem canônica, rode buf format depois.

2

Leia a saída formatada

À direita: o mesmo esquema, indentado em 2 espaços por nível de {. Linhas que começam com } são desindentadas antes de serem emitidas. Várias linhas em branco consecutivas viram uma só. Espaço em branco no fim das linhas é removido. Comentários são preservados ipsis litteris, incluindo a posição relativa.

3

Use o resultado

Cole de volta no seu editor ou baixe como formatted.proto. Para o protoc, a saída é byte a byte equivalente à entrada — só os espaços mudam — então você pode encaixar de volta sem se preocupar com diferenças de wire format ou de código gerado. Verifique rodando protoc --descriptor_set_out=before.pb input.proto e o mesmo na saída formatada: os descriptors vão bater.

Quando isto realmente economiza tempo

Limpar um .proto colado de chat ou doc

Um colega cola um trecho de esquema no Slack, a indentação está destruída, e você quer no seu repo. Solte aqui, copie a versão formatada, cole no seu arquivo. Mais rápido do que a dança "selecionar tudo, retabular" no editor.

Padronizar .proto legados num repo antigo

Você herdou um repo Protobuf onde cada arquivo usa uma indentação diferente. Passe cada arquivo por este formatador, suba como um único commit de normalização e depois ative buf format no CI para manter assim.

Conferir rápido um .proto gerado

Alguns geradores de código (JSON Schema → Protobuf, OpenAPI → Protobuf) emitem esquemas válidos mas feios. Formate a saída, dê uma olhada e decida se vale manter o gerador ou editar à mão.

Quando você não pode instalar protoc nem buf

Você está numa máquina trancada, numa rede de visitantes ou só revisando um PR no navegador. O formatador 100% navegador entrega a mesma saída legível sem instalar a toolchain do Protocol Buffers.

Perguntas comuns

Meu esquema é enviado para algum lugar?

Não. O formatador roda inteiramente no seu navegador como JavaScript. Nada do esquema — nomes de mensagem, caminhos de pacote, comentários — sai da sua máquina. Abra o DevTools e veja a aba Network enquanto cola; você vai ver zero requisições.

Os comentários são preservados?

Sim — tanto os comentários de linha // quanto os de bloco /* ... */ ficam exatamente onde você os colocou. Comentários em linhas próprias mantêm a posição relativa; comentários no fim de uma linha de campo continuam grudados naquele campo. A abordagem baseada em linhas foi escolhida justamente para que os comentários sobrevivessem intactos.

Em que isto difere do buf format?

O buf format faz parsing do esquema numa árvore de sintaxe e re-emite. Isso dá garantias mais fortes — ordem canônica de opções, capitalização consistente de enums, etc. — mas exige que o esquema parseie limpo. Este formatador é por linha, então funciona em entradas levemente quebradas que o buf recusaria, e não impõe ordem canônica. Para código pronto, rode buf format. Para esquemas em meio à edição ou trechos de terceiros, use este.

Ele muda a semântica do esquema?

Não — só os espaços mudam. O protoc emitiria o mesmo FileDescriptorProto a partir da entrada e da saída. Você pode verificar com protoc --descriptor_set_out=before.pb input.proto contra o mesmo no arquivo formatado; os descriptors binários são idênticos, exceto por mudanças de span em source-info (que são metadados de reflexão, não wire format).

E a largura da indentação — dá para mudar de 2 espaços?

A saída é fixa em 2 espaços por nível de chave, em linha com a convenção do guia de estilo oficial do Protocol Buffers. Se você precisar de 4 espaços ou tabs, passe a saída por sed ou pela conversão de tabs do seu editor. Manter a saída do formatador canônica evita a deriva de configuração entre times.

Lida com quebras de linha CRLF?

Sim — entrada com CRLF (\r\n) é normalizada para LF (\n) na saída. Se você precisar de CRLF no arquivo salvo, o seu editor reencoda no save de acordo com o ajuste de quebra de linha dele.

Ferramentas relacionadas

Se você está trabalhando com esquemas Protobuf, estas combinam bem: