Bozuk .proto dosyanı buraya yapıştır ve onarmak için "Protobuf’u Düzelt!!" düğmesine basGeçersiz .proto gir

Protobuf Fixer nedir?

Bozuk bir .proto dosyan mı var? protoc tek bir eksik noktalı virgülde, kapanmamış bir message gövdesinde ya da serseri bir parantezde patlar ve sen onu bulana kadar dosyanın geri kalanı işe yaramaz hale gelir. Bu araç bozuk Protocol Buffers şemalarını okur ve bu sorunları otomatik olarak düzeltir — yapıştır, sana temiz bir sürümünü geri verelim.

İlk olarak protoc’un takıldığı şeylere bakar: en üstte eksik syntax = "proto3";, alan satırlarında eksik noktalı virgüller, iç içe message/enum gövdelerinde dengesiz {} ve tırnak/import sorunları. Çıktı, resmi proto3 dil rehberi ve proto3 dilbilgisi referansı’nda anlatılan kurallara uyar; yani geri aldığın şey gerçekten protoc’un kabul edeceği bir şemadır.

Dosya yükleme yok, şema paylaşımı yok — .proto dosyan bu sekmede kalır. Saniyeler içinde düzelt, binding üretmeye geri dön.

Protobuf Fixer nasıl kullanılır

Üç adım. Bir repodan çekilmiş, bir code review’dan kopyalanmış ya da elle düzenlenip artık bozulmuş şemalarda çalışır.

1

Bozuk .proto’yu yapıştır veya örneği yükle

Bozuk şemayı soldaki editöre bırak. Tipik hatalardan oluşan bir örnek için Örnek .proto’ya bas — bir alandan sonra eksik noktalı virgül, hiç kapanmayan bir message gövdesi ve syntax satırında eksik noktalı virgül. Bozuk proto örneği:

syntax = "proto3"
message LineItem {
  string sku = 1;
  int32 quantity = 2
  double unit_price = 3;

Burada iki hata var: syntax bildiriminden sonra noktalı virgül yok ve LineItem bloğu hiç kapanmıyor. İkisi de fixer’ın onardığı tipik durumlar.

2

Protobuf’u Düzelt!! düğmesine bas

Yeşil Protobuf’u Düzelt!! düğmesine bas. Fixer şemayı okur, eksik noktalı virgülleri geri yerleştirir, {} parantezlerini dengeler, syntax bildirimini standartlaştırır ve import’ları doğru şekilde tırnak içine alır. Alan tag’leri, isimleri ve tipleri olduğu gibi bırakılır.

3

Onarılan çıktıyı incele

Sağ panelde onarılmış .proto duruyor. Onu projene geri koy ve doğrulamak için protoc’u çalıştır. RPC servislerini besleyen şemalar için, binding üretmeden önce sonucu bir de Protobuf Validator ile kontrol et. Her şey tarayıcında çalışır — şema asla saklanmaz.

Bunu gerçekten ne zaman kullanırsın

Elle düzenlenmiş bir şemayı kurtarmak

Yeni bir alan ekledin, kazara bir parantez sildin ve şimdi protoc üç message aşağıda hata gösteriyor. Dosyayı yapıştır, parantez yerine gelsin, devam et — 400 satırlık bir şemayı gözle taramak yerine.

LLM tarafından üretilmiş .proto’yu düzeltmek

Bir LLM’den JSON örneğine bakıp .proto taslamasını mı istedin? Yapı genelde doğrudur ama syntax = "proto3";’ü unutur, noktalı virgül atlar veya işi markdown fence içine sarar. Fixer bunları temizler.

Kötü bir merge sonrası onarmak

Conflict marker’ları üstünkörü çözüldü ve .proto derlenmiyor. Yapıyı yeniden oturtmak için fixer’dan geçir, böylece syntax’la boğuşmak yerine asıl semantik fark’ı Git’te inceleyebilirsin.

Log veya dokümandan şema kurtarmak

Bir wiki sayfasından, eski bir PR açıklamasından veya bir ekran görüntüsü OCR’ından .proto mu çıkardın? Metinde genelde serseri karakterler ve bozuk indentasyon olur. Fixer onu protoc’un kabul edeceği bir hale getirir.

Sık sorulan sorular

.proto dosyam saklanıyor ya da bir yere gönderiliyor mu?

Şeman, yalnızca onarımı çalıştırmak için backend’imize gider ve onu kalıcı tutmuyoruz — yanıt döndüğü anda gider. Verinle birlikte hiçbir şey loglanmaz ve istek yolunda üçüncü taraf takipçi yoktur. Hassas bir şeman varsa (iç servisler, henüz yayınlanmamış API’ler), tıpkı onu herkese açık bir bug report’ta paylaşırken yapacağın gibi, yapıştırmadan önce tanımlayıcıları gizle.

Aslında ne tür hataları düzeltir?

Yaygın olarak protoc’un reddettikleri: eksik veya yanlış syntax bildirimi (yoksa syntax = "proto3"; ekler), alan/option/enum satırlarında eksik noktalı virgüller, message/enum/service bloklarında dengesiz {}, string option ve import’larda eksik veya uyumsuz tırnaklar ve repeated ya da optional gibi anahtar kelimelerde bariz yazım hataları.

Alan tag numaralarımı değiştirir veya bir şeyi yeniden adlandırır mı?

Hayır. Fixer’a açıkça yalnızca syntax onarımı yapması söylendi — message/alanları yeniden adlandırmak, tag numaralarını değiştirmek ya da yeni alanlar uydurmak yok. Tag numaraları wire format’ının bir parçasıdır; onlara dokunmak geriye dönük uyumluluğu bozar. Çıktı semantik içeriği değiştirmiş gibi görünüyorsa bunu bir bug olarak ele al ve commit etme.

proto2’yi de proto3 gibi destekliyor mu?

Syntax düzeyindeki düzeltmeler için evet — eksik noktalı virgüller, dengesiz parantezler ve hatalı syntax bildirimleri sürümden bağımsız olarak aynı şekilde halledilir. Fixer syntax satırında ne yazıyorsa ona saygı gösterir; bir proto2 şemasını proto3’e çevirmez (ikisinin required/optional ve default’lar etrafında farklı semantikleri vardır).

Neden sadece protoc çalıştırıp hatayı okumayalım?

Okumalısın — protoc kaynak gerçektir. Ama hataları her seferinde tek bir konumu işaret eder ve eksik tek bir parantez on tane ardışık hataya dönüşebilir. Fixer, tüm dosyayı tek geçişte açmak istediğin durumlar için var; sonra doğrulamak için protoc’u tekrar çalıştırırsın. Onu bir yedek değil, ilk süpürme olarak düşün.

Çok sayıda import içeren büyük şemaları kaldırır mı?

Evet, istek başına birkaç bin satıra kadar. Onarım yalnızca yapıştırdığın dosyaya bakar — import ifadelerinin peşinden gitmez ve harici şema indirmez. Şeman google/protobuf/timestamp.proto veya başka well-known type’ları import ediyorsa, o import’lar olduğu gibi korunur.

Diğer Protobuf araçları

Syntax’ı düzeltmek ilk adım. Şema derlendikten sonra bu araçlar onu sonuna kadar götürür: