protogen: use full path for generated file variable name
Use the full path (including the extension) for the generation of
the per-file variable name. Several reasons for this:
* The current logic is buggy in the case where pathType == pathTypeImport
since the prefix variable will be mangled with the Go import path.
* The extension is technically part of the path.
Thus, "path/to/foo.proto" and "path/to/foo.protodevel" are two
distinctly different imports.
* Style-wise, it subjectively looks better. Rather than being a mixture
of camelCase and snake_case, it is all snake_case for the common case:
before: ProtoFile_google_protobuf_any
after: File_google_protobuf_any_proto
* Since the extension is almost always ".proto", this results in a
suffix of "_proto", which provides an additional layer of protection
against possible name conflicts. The previous approach could possibly
have a conflict between "Foo.proto" and a message named ProtoFile
with a sub-message called Foo.
Also, use the per-file variable name for the raw descriptor variables
instead of the hashed version.
Change-Id: Ic91e326b7593e5985cee6ececc60539c27fe32fe
Reviewed-on: https://go-review.googlesource.com/c/164379
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/fileinit/fileinit_test.go b/internal/fileinit/fileinit_test.go
index b6ba1e1..a02036b 100644
--- a/internal/fileinit/fileinit_test.go
+++ b/internal/fileinit/fileinit_test.go
@@ -20,7 +20,7 @@
// 2. The protoc-generated wire-encoded message.
//
// This serves as a test of both fileinit and protodesc.
- got := protodesc.ToFileDescriptorProto(testpb.ProtoFile_test)
+ got := protodesc.ToFileDescriptorProto(testpb.File_test_proto)
want := &descriptorpb.FileDescriptorProto{}
zb, _ := (&testpb.TestAllTypes{}).Descriptor()
@@ -60,7 +60,7 @@
"ServiceDescriptorProto",
"MethodDescriptorProto",
} {
- message := descriptorpb.ProtoFile_google_protobuf_descriptor.Messages().ByName(messageName)
+ message := descriptorpb.File_google_protobuf_descriptor_proto.Messages().ByName(messageName)
for i, fields := 0, message.Fields(); i < fields.Len(); i++ {
if name := fields.Get(i).FullName(); !seen[name] && !ignore[name] {
t.Errorf("No test for descriptor field: %v", name)