Protobuf-formatter
Plak een rommelig .proto-schema. Krijg nette inspringing, consistente spaties en opgeruimde lege regels — commentaar blijft precies staan waar je het hebt gezet.
Invoer (.proto-schema)
Uitvoer (geformatteerde .proto)
Wat deze tool doet
Je plakt een Protocol Buffers-schema met gemengde inspringing, tegen elkaar geplakte velddeclaraties of willekeurige lege regels uit een copy-paste, en je wilt dat het eruitziet als de rest van je codebase. Deze formatter herschrijft het bestand met twee spaties inspringing per haakniveau, exact één spatie rond =, één spatie na , en hooguit één opeenvolgende lege regel tussen blokken. Commentaar — zowel //-regelcommentaar als /* ... */-blokcommentaar — blijft precies staan waar je het hebt gezet.
Hij parseert of valideert het schema niet, dus hij werkt ook op licht kapotte invoer waar buf format of het "Format Document" van je editor zou kunnen falen. Als je .proto ergens een syntaxfout heeft, wordt de rest van het bestand er gewoon omheen geformatteerd. Het nadeel: hij kan velden niet opnieuw ordenen, de import-volgorde niet normaliseren of ongebruikte opties niet verwijderen zoals een echte parser-gebaseerde formatter wel zou kunnen. Daarvoor draai je buf format in je build-pipeline.
Alles draait in je browser — geen upload, geen rate limit, geen schema dat ergens heen wordt gestuurd. Handig wanneer het schema interne pakketnamen, typenamen of iets anders bevat dat je niet naar een externe API wilt sturen. Werkt op elke bestandsgrootte die je browser in het geheugen kan houden; zelfs tienduizenden regels zijn ruim binnen een seconde geformatteerd.
Hoe gebruik je het
Drie stappen. De uitvoer wordt zo’n 300 ms na je laatste toetsaanslag bijgewerkt.
Plak je .proto-schema
Gooi het schema in de linker editor. syntax, package, import-directives, message-blokken, geneste enum’s, oneof, map<K, V> — alles wordt afgehandeld. Gemengde regeleinden (CRLF) worden bij de uitvoer naar LF genormaliseerd.
De formatter herordent niets — velden, imports en opties blijven in de volgorde waarin je ze hebt geschreven. Wil je een canonieke volgorde, draai dan daarna buf format.
Lees de geformatteerde uitvoer
Rechts: hetzelfde schema, ingesprongen met 2 spaties per {-niveau. Regels die met } beginnen, worden vóór de uitvoer uitgesprongen. Meerdere opeenvolgende lege regels worden tot één samengevoegd. Trailing whitespace wordt verwijderd. Commentaar blijft letterlijk behouden, inclusief relatieve positie.
Gebruik het resultaat
Kopieer terug naar je editor of download als formatted.proto. Voor protoc is de uitvoer byte voor byte gelijk aan de invoer — alleen whitespace verandert — dus je kunt het zo terugzetten zonder je zorgen te maken over wire-format- of gegenereerde-code-verschillen. Verifieer met protoc --descriptor_set_out=before.pb input.proto tegenover hetzelfde op de geformatteerde uitvoer: de descriptors zijn identiek.
Wanneer dit echt tijd bespaart
Een uit chat of docs geplakte .proto opschonen
Een teamgenoot plakt een schema-fragment in Slack, de inspringing is verwoest, en je wilt het in je repo. Gooi het hierin, kopieer de geformatteerde versie, plak in je bestand. Sneller dan het "alles selecteren, opnieuw tabben"-dansje in je editor.
Legacy .proto’s in een oude repo standaardiseren
Je hebt een Protobuf-repo geërfd waarin elk bestand een andere inspringing gebruikt. Haal elk bestand door deze formatter, push als één enkele normalisatie-commit, en zet daarna buf format aan in CI om het zo te houden.
Snel een gegenereerde .proto controleren
Sommige codegenerators (JSON Schema → Protobuf, OpenAPI → Protobuf) produceren geldige maar lelijke schema’s. Formatteer de uitvoer, kijk er even naar, beslis of je de generator houdt of met de hand bijwerkt.
Wanneer je protoc of buf niet kunt installeren
Je zit op een dichtgetimmerde machine, op een gastnetwerk, of je reviewt gewoon een PR in de browser. De browser-only formatter geeft je dezelfde leesbare uitvoer zonder dat je de Protocol Buffers-toolchain hoeft te installeren.
Veelgestelde vragen
Wordt mijn schema ergens heen gestuurd?
Nee. De formatter draait volledig in je browser als JavaScript. Niets van het schema — messagenamen, packagepaden, commentaar — verlaat je machine. Open de DevTools en kijk in het Network-tabblad terwijl je plakt; je ziet nul requests.
Blijft commentaar behouden?
Ja — zowel //-regelcommentaar als /* ... */-blokcommentaar blijft precies staan waar je het hebt gezet. Commentaar op een eigen regel houdt zijn relatieve positie; trailing-commentaar aan het eind van een veldregel blijft aan dat veld geplakt. De regelgebaseerde aanpak is juist gekozen zodat commentaar intact blijft.
Hoe verschilt dit van buf format?
buf format parseert het schema in een syntaxboom en geeft het opnieuw uit. Dat geeft sterkere garanties — canonieke optievolgorde, consistente enum-casing, enz. — maar vereist dat het schema schoon parseert. Deze formatter is regelgebaseerd, dus hij werkt op licht kapotte invoer die buf zou weigeren, en hij dwingt geen canonieke volgorde af. Voor afgewerkte code: draai buf format. Voor schema’s in bewerking of fragmenten van derden: gebruik deze.
Verandert hij de semantiek van het schema?
Nee — alleen whitespace verandert. protoc zou uit zowel de invoer als de uitvoer dezelfde FileDescriptorProto produceren. Verifiëren kan met protoc --descriptor_set_out=before.pb input.proto tegenover hetzelfde op het geformatteerde bestand; de binaire descriptors zijn identiek, op eventuele source-info-spanwijzigingen na (dat zijn reflection-metadata, geen wire format).
En de inspring-breedte — kan ik weg van 2 spaties?
De uitvoer staat vast op 2 spaties per haakniveau, in lijn met de conventie in de officiële Protocol Buffers-stijlgids. Heb je 4 spaties of tabs nodig, haal de uitvoer dan door sed of de tab-conversie van je editor. De uitvoer canoniek houden voorkomt configuratiedrift tussen teams.
Worden CRLF-regeleinden afgehandeld?
Ja — invoer-CRLF (\r\n) wordt bij de uitvoer naar LF (\n) genormaliseerd. Heb je CRLF nodig in het opgeslagen bestand, dan codeert je editor bij het opslaan opnieuw op basis van zijn line-ending-instelling.
Verwante tools
Als je met Protobuf-schema’s werkt, passen deze er goed bij: