Formateador de Protobuf
Pega un esquema .proto desordenado. Obtén sangría limpia, espaciado consistente y líneas en blanco bien colocadas — los comentarios se conservan exactamente donde los pusiste.
Entrada (esquema .proto)
Salida (.proto formateado)
Qué hace esta herramienta
Pegas un esquema de Protocol Buffers con sangría mezclada, declaraciones de campo pegadas o líneas en blanco aleatorias de un copy-paste, y quieres que se vea como el resto del repositorio. Este formateador reescribe el archivo con sangría de dos espacios por nivel de llave, exactamente un espacio alrededor de =, un espacio después de , y como mucho una línea en blanco consecutiva entre bloques. Los comentarios — tanto los de línea // como los de bloque /* ... */ — se quedan exactamente donde los pusiste.
No analiza ni valida el esquema, lo que significa que funciona sobre entradas ligeramente rotas allí donde buf format o el "Format Document" de tu editor podrían no hacerlo. Si tu .proto tiene un error de sintaxis en algún punto, el resto del archivo se sigue formateando alrededor. La contrapartida: no puede reordenar campos, normalizar el orden de los imports ni eliminar opciones sin uso como sí haría un formateador basado en parser. Para eso, ejecuta buf format en tu pipeline de build.
Todo se ejecuta en tu navegador — sin subida, sin rate limit, sin enviar el esquema a ninguna parte. Útil cuando el esquema contiene nombres de paquete internos, nombres de tipo o cualquier cosa que no querrías mandar a una API de terceros. Funciona con archivos del tamaño que tu navegador pueda mantener en memoria; incluso decenas de miles de líneas se formatean en bastante menos de un segundo.
Cómo usarlo
Tres pasos. La salida se actualiza unos 300 ms después de que dejes de escribir.
Pega tu esquema .proto
Suelta el esquema en el editor de la izquierda. syntax, package, directivas import, bloques message, enums anidados, oneof, map<K, V> — todo se procesa. Los finales de línea mezclados (CRLF) se normalizan a LF a la salida.
El formateador no reordena nada — campos, imports y opciones se quedan en el orden que los escribiste. Si quieres orden canónico, ejecuta buf format después.
Lee la salida formateada
A la derecha: el mismo esquema, con sangría de 2 espacios por nivel de {. Las líneas que empiezan por } reducen la sangría antes de emitirse. Las múltiples líneas en blanco consecutivas se colapsan a una. Se elimina el espacio en blanco al final. Los comentarios se conservan literalmente, incluida su posición relativa.
Usa el resultado
Cópialo de vuelta a tu editor o descárgalo como formatted.proto. La salida es byte a byte equivalente a la entrada en lo que respecta a protoc — solo cambian los espacios — así que puedes meterlo de vuelta sin preocuparte por diferencias en el formato de cable o en el código generado. Verifícalo ejecutando protoc --descriptor_set_out=before.pb input.proto y lo mismo sobre la salida formateada: los descriptores van a coincidir.
Cuándo realmente ahorra tiempo
Limpiar un .proto pegado desde un chat o documentación
Un compañero pega un fragmento de esquema en Slack, la sangría queda destrozada, lo quieres en tu repo. Suéltalo aquí, copia la versión formateada, pégala en tu archivo. Más rápido que el baile de "seleccionar todo y retabular" en tu editor.
Estandarizar .proto legados en un repositorio antiguo
Has heredado un repo de Protobuf en el que cada archivo usa una sangría distinta. Pasa cada archivo por este formateador, súbelo como un único commit de normalización y luego activa buf format en CI para que se quede así.
Revisar rápido un .proto generado
Algunos generadores de código (JSON Schema → Protobuf, OpenAPI → Protobuf) emiten esquemas válidos pero feos. Formatea la salida, échale un ojo, y decide si te quedas con el generador o lo editas a mano.
Cuando no puedes instalar protoc o buf
Estás en una máquina con políticas restrictivas, en una red de invitados, o simplemente revisando un PR en el navegador. El formateador en navegador te da la misma salida legible sin instalar la toolchain de Protocol Buffers.
Preguntas habituales
¿Se envía mi esquema a algún servidor?
No. El formateador se ejecuta enteramente en tu navegador como JavaScript. Nada del esquema — nombres de mensaje, rutas de paquete, comentarios — sale de tu máquina. Abre las DevTools y mira la pestaña Network mientras pegas; verás cero peticiones.
¿Conserva los comentarios?
Sí — tanto los de línea // como los de bloque /* ... */ se quedan exactamente donde los pusiste. Los comentarios en su propia línea mantienen su posición relativa; los comentarios al final de una línea de campo siguen pegados a ese campo. El enfoque basado en líneas se eligió precisamente para que los comentarios sobrevivan intactos.
¿En qué se diferencia esto de buf format?
buf format analiza el esquema en un árbol de sintaxis y lo vuelve a emitir. Eso da garantías más fuertes — orden canónico de opciones, capitalización consistente de los enums, etc. — pero exige que el esquema parsee limpiamente. Este formateador es por líneas, así que funciona con entradas ligeramente rotas que buf rechazaría, y no impone un orden canónico. Para código terminado, ejecuta buf format. Para esquemas a medio editar o fragmentos de terceros, usa este.
¿Cambia la semántica del esquema?
No — solo cambia el espacio en blanco. protoc emitiría el mismo FileDescriptorProto a partir de la entrada y de la salida. Puedes verificarlo con protoc --descriptor_set_out=before.pb input.proto contra el mismo comando sobre el archivo formateado; los descriptores binarios son idénticos salvo por cambios de span en la source-info (que son metadatos de reflexión, no formato de cable).
¿Y el ancho de sangría — puedo cambiarlo desde 2 espacios?
La salida está fijada en 2 espacios por nivel de llave, en línea con la convención de la guía de estilo oficial de Protocol Buffers. Si necesitas 4 espacios o tabs, pasa la salida por sed o por la conversión de tabs de tu editor. Mantener la salida del formateador en su forma canónica evita el goteo de configuración por equipo.
¿Maneja los finales de línea CRLF?
Sí — la entrada CRLF (\r\n) se normaliza a LF (\n) a la salida. Si necesitas CRLF en el archivo guardado, tu editor lo recodificará al guardar según su configuración de finales de línea.
Herramientas relacionadas
Si estás trabajando con esquemas de Protobuf, estas combinan bien: