cmd/protoc-gen-go: group extension variable declarations

For better readability in godoc, group extension fields by the
target message that they are extending.

Change-Id: Icc0a247b37639e3dbf7a107810923b8ca8294724
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/189257
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/cmd/protoc-gen-go/internal_gengo/main.go b/cmd/protoc-gen-go/internal_gengo/main.go
index 10da66a..be2a240 100644
--- a/cmd/protoc-gen-go/internal_gengo/main.go
+++ b/cmd/protoc-gen-go/internal_gengo/main.go
@@ -796,23 +796,37 @@
 	}
 	g.P("}")
 
-	g.P("var (")
+	// Group extensions by the target message.
+	var orderedTargets []protogen.GoIdent
+	allExtensionsByTarget := make(map[protogen.GoIdent][]*protogen.Extension)
+	allExtensionsByPtr := make(map[*protogen.Extension]int)
 	for i, extension := range f.allExtensions {
-		ed := extension.Desc
-		targetName := string(ed.ContainingMessage().FullName())
-		typeName := ed.Kind().String()
-		switch ed.Kind() {
-		case protoreflect.EnumKind:
-			typeName = string(ed.Enum().FullName())
-		case protoreflect.MessageKind, protoreflect.GroupKind:
-			typeName = string(ed.Message().FullName())
+		target := extension.Extendee.GoIdent
+		if len(allExtensionsByTarget[target]) == 0 {
+			orderedTargets = append(orderedTargets, target)
 		}
-		fieldName := string(ed.Name())
-		g.P("// extend ", targetName, " { ", ed.Cardinality().String(), " ", typeName, " ", fieldName, " = ", ed.Number(), "; }")
-		g.P(extensionVar(f.File, extension), " = &", extDescsVarName(f), "[", i, "]")
+		allExtensionsByTarget[target] = append(allExtensionsByTarget[target], extension)
+		allExtensionsByPtr[extension] = i
+	}
+	for _, target := range orderedTargets {
+		g.P("// Extension fields to ", target, ".")
+		g.P("var (")
+		for _, extension := range allExtensionsByTarget[target] {
+			ed := extension.Desc
+			typeName := ed.Kind().String()
+			switch ed.Kind() {
+			case protoreflect.EnumKind:
+				typeName = string(ed.Enum().FullName())
+			case protoreflect.MessageKind, protoreflect.GroupKind:
+				typeName = string(ed.Message().FullName())
+			}
+			fieldName := string(ed.Name())
+			g.P("// ", ed.Cardinality().String(), " ", typeName, " ", fieldName, " = ", ed.Number(), ";")
+			g.P(extensionVar(f.File, extension), " = &", extDescsVarName(f), "[", allExtensionsByPtr[extension], "]")
+		}
+		g.P(")")
 		g.P()
 	}
-	g.P(")")
 }
 
 // extensionVar returns the var holding the ExtensionDesc for an extension.
diff --git a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
index 45fa038..f13ea01 100644
--- a/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/ext/ext.pb.go
@@ -729,139 +729,107 @@
 		Filename:      "extensions/ext/ext.proto",
 	},
 }
+
+// Extension fields to base.BaseMessage.
 var (
-	// extend goproto.protoc.extension.base.BaseMessage { optional bool extension_bool = 101; }
+	// optional bool extension_bool = 101;
 	E_ExtensionBool = &file_extensions_ext_ext_proto_extDescs[0]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.Enum extension_enum = 102; }
+	// optional goproto.protoc.extension.ext.Enum extension_enum = 102;
 	E_ExtensionEnum = &file_extensions_ext_ext_proto_extDescs[1]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional int32 extension_int32 = 103; }
+	// optional int32 extension_int32 = 103;
 	E_ExtensionInt32 = &file_extensions_ext_ext_proto_extDescs[2]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional sint32 extension_sint32 = 104; }
+	// optional sint32 extension_sint32 = 104;
 	E_ExtensionSint32 = &file_extensions_ext_ext_proto_extDescs[3]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional uint32 extension_uint32 = 105; }
+	// optional uint32 extension_uint32 = 105;
 	E_ExtensionUint32 = &file_extensions_ext_ext_proto_extDescs[4]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional int64 extension_int64 = 106; }
+	// optional int64 extension_int64 = 106;
 	E_ExtensionInt64 = &file_extensions_ext_ext_proto_extDescs[5]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional sint64 extension_sint64 = 107; }
+	// optional sint64 extension_sint64 = 107;
 	E_ExtensionSint64 = &file_extensions_ext_ext_proto_extDescs[6]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional uint64 extension_uint64 = 108; }
+	// optional uint64 extension_uint64 = 108;
 	E_ExtensionUint64 = &file_extensions_ext_ext_proto_extDescs[7]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional sfixed32 extension_sfixed32 = 109; }
+	// optional sfixed32 extension_sfixed32 = 109;
 	E_ExtensionSfixed32 = &file_extensions_ext_ext_proto_extDescs[8]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional fixed32 extension_fixed32 = 110; }
+	// optional fixed32 extension_fixed32 = 110;
 	E_ExtensionFixed32 = &file_extensions_ext_ext_proto_extDescs[9]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional float extension_float = 111; }
+	// optional float extension_float = 111;
 	E_ExtensionFloat = &file_extensions_ext_ext_proto_extDescs[10]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional sfixed64 extension_sfixed64 = 112; }
+	// optional sfixed64 extension_sfixed64 = 112;
 	E_ExtensionSfixed64 = &file_extensions_ext_ext_proto_extDescs[11]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional fixed64 extension_fixed64 = 113; }
+	// optional fixed64 extension_fixed64 = 113;
 	E_ExtensionFixed64 = &file_extensions_ext_ext_proto_extDescs[12]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional double extension_double = 114; }
+	// optional double extension_double = 114;
 	E_ExtensionDouble = &file_extensions_ext_ext_proto_extDescs[13]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional string extension_string = 115; }
+	// optional string extension_string = 115;
 	E_ExtensionString = &file_extensions_ext_ext_proto_extDescs[14]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional bytes extension_bytes = 116; }
+	// optional bytes extension_bytes = 116;
 	E_ExtensionBytes = &file_extensions_ext_ext_proto_extDescs[15]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.Message extension_Message = 117; }
+	// optional goproto.protoc.extension.ext.Message extension_Message = 117;
 	E_Extension_Message = &file_extensions_ext_ext_proto_extDescs[16]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.Message.M extension_MessageM = 118; }
+	// optional goproto.protoc.extension.ext.Message.M extension_MessageM = 118;
 	E_Extension_MessageM = &file_extensions_ext_ext_proto_extDescs[17]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.ExtensionGroup extensiongroup = 119; }
+	// optional goproto.protoc.extension.ext.ExtensionGroup extensiongroup = 119;
 	E_Extensiongroup = &file_extensions_ext_ext_proto_extDescs[18]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.extra.ExtraMessage extra_message = 9; }
+	// optional goproto.protoc.extension.extra.ExtraMessage extra_message = 9;
 	E_ExtraMessage = &file_extensions_ext_ext_proto_extDescs[19]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated bool repeated_x_bool = 301; }
+	// repeated bool repeated_x_bool = 301;
 	E_RepeatedXBool = &file_extensions_ext_ext_proto_extDescs[20]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated goproto.protoc.extension.ext.Enum repeated_x_enum = 302; }
+	// repeated goproto.protoc.extension.ext.Enum repeated_x_enum = 302;
 	E_RepeatedXEnum = &file_extensions_ext_ext_proto_extDescs[21]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated int32 repeated_x_int32 = 303; }
+	// repeated int32 repeated_x_int32 = 303;
 	E_RepeatedXInt32 = &file_extensions_ext_ext_proto_extDescs[22]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated sint32 repeated_x_sint32 = 304; }
+	// repeated sint32 repeated_x_sint32 = 304;
 	E_RepeatedXSint32 = &file_extensions_ext_ext_proto_extDescs[23]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated uint32 repeated_x_uint32 = 305; }
+	// repeated uint32 repeated_x_uint32 = 305;
 	E_RepeatedXUint32 = &file_extensions_ext_ext_proto_extDescs[24]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated int64 repeated_x_int64 = 306; }
+	// repeated int64 repeated_x_int64 = 306;
 	E_RepeatedXInt64 = &file_extensions_ext_ext_proto_extDescs[25]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated sint64 repeated_x_sint64 = 307; }
+	// repeated sint64 repeated_x_sint64 = 307;
 	E_RepeatedXSint64 = &file_extensions_ext_ext_proto_extDescs[26]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated uint64 repeated_x_uint64 = 308; }
+	// repeated uint64 repeated_x_uint64 = 308;
 	E_RepeatedXUint64 = &file_extensions_ext_ext_proto_extDescs[27]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated sfixed32 repeated_x_sfixed32 = 309; }
+	// repeated sfixed32 repeated_x_sfixed32 = 309;
 	E_RepeatedXSfixed32 = &file_extensions_ext_ext_proto_extDescs[28]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated fixed32 repeated_x_fixed32 = 310; }
+	// repeated fixed32 repeated_x_fixed32 = 310;
 	E_RepeatedXFixed32 = &file_extensions_ext_ext_proto_extDescs[29]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated float repeated_x_float = 311; }
+	// repeated float repeated_x_float = 311;
 	E_RepeatedXFloat = &file_extensions_ext_ext_proto_extDescs[30]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated sfixed64 repeated_x_sfixed64 = 312; }
+	// repeated sfixed64 repeated_x_sfixed64 = 312;
 	E_RepeatedXSfixed64 = &file_extensions_ext_ext_proto_extDescs[31]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated fixed64 repeated_x_fixed64 = 313; }
+	// repeated fixed64 repeated_x_fixed64 = 313;
 	E_RepeatedXFixed64 = &file_extensions_ext_ext_proto_extDescs[32]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated double repeated_x_double = 314; }
+	// repeated double repeated_x_double = 314;
 	E_RepeatedXDouble = &file_extensions_ext_ext_proto_extDescs[33]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated string repeated_x_string = 315; }
+	// repeated string repeated_x_string = 315;
 	E_RepeatedXString = &file_extensions_ext_ext_proto_extDescs[34]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated bytes repeated_x_bytes = 316; }
+	// repeated bytes repeated_x_bytes = 316;
 	E_RepeatedXBytes = &file_extensions_ext_ext_proto_extDescs[35]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated goproto.protoc.extension.ext.Message repeated_x_Message = 317; }
+	// repeated goproto.protoc.extension.ext.Message repeated_x_Message = 317;
 	E_RepeatedX_Message = &file_extensions_ext_ext_proto_extDescs[36]
-
-	// extend goproto.protoc.extension.base.BaseMessage { repeated goproto.protoc.extension.ext.RepeatedGroup repeatedgroup = 318; }
+	// repeated goproto.protoc.extension.ext.RepeatedGroup repeatedgroup = 318;
 	E_Repeatedgroup = &file_extensions_ext_ext_proto_extDescs[37]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.Extendable extendable_field = 400; }
+	// optional goproto.protoc.extension.ext.Extendable extendable_field = 400;
 	E_ExtendableField = &file_extensions_ext_ext_proto_extDescs[38]
-
-	// extend goproto.protoc.extension.ext.Extendable { optional string extendable_string_field = 1; }
-	E_ExtendableStringField = &file_extensions_ext_ext_proto_extDescs[39]
-
-	// extend goproto.protoc.extension.base.MessageSetWireFormatMessage { optional goproto.protoc.extension.ext.MessageSetWireFormatExtension message_set_extension = 101; }
-	E_MessageSetExtension = &file_extensions_ext_ext_proto_extDescs[40]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional string extending_message_string = 200; }
+	// optional string extending_message_string = 200;
 	E_ExtendingMessage_ExtendingMessageString = &file_extensions_ext_ext_proto_extDescs[41]
-
-	// extend goproto.protoc.extension.base.BaseMessage { optional goproto.protoc.extension.ext.ExtendingMessage.ExtendingMessageSubmessage extending_message_submessage = 201; }
+	// optional goproto.protoc.extension.ext.ExtendingMessage.ExtendingMessageSubmessage extending_message_submessage = 201;
 	E_ExtendingMessage_ExtendingMessageSubmessage = &file_extensions_ext_ext_proto_extDescs[42]
+)
 
-	// extend goproto.protoc.extension.base.MessageSetWireFormatMessage { optional goproto.protoc.extension.ext.MessageSetWireFormatExtension message_set_extension = 100; }
+// Extension fields to Extendable.
+var (
+	// optional string extendable_string_field = 1;
+	E_ExtendableStringField = &file_extensions_ext_ext_proto_extDescs[39]
+)
+
+// Extension fields to base.MessageSetWireFormatMessage.
+var (
+	// optional goproto.protoc.extension.ext.MessageSetWireFormatExtension message_set_extension = 101;
+	E_MessageSetExtension = &file_extensions_ext_ext_proto_extDescs[40]
+	// optional goproto.protoc.extension.ext.MessageSetWireFormatExtension message_set_extension = 100;
 	E_MessageSetWireFormatExtension_MessageSetExtension = &file_extensions_ext_ext_proto_extDescs[43]
 )
+
 var File_extensions_ext_ext_proto protoreflect.FileDescriptor
 
 var file_extensions_ext_ext_proto_rawDesc = []byte{
diff --git a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
index d84e7ae..10590d2 100644
--- a/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
+++ b/cmd/protoc-gen-go/testdata/extensions/proto3/ext3.pb.go
@@ -370,109 +370,79 @@
 		Filename:      "extensions/proto3/ext3.proto",
 	},
 }
+
+// Extension fields to descriptorpb.MessageOptions.
 var (
-	// extend google.protobuf.MessageOptions { optional bool extension_bool = 1001; }
+	// optional bool extension_bool = 1001;
 	E_ExtensionBool = &file_extensions_proto3_ext3_proto_extDescs[0]
-
-	// extend google.protobuf.MessageOptions { optional goproto.protoc.extension.proto3.Enum extension_enum = 1002; }
+	// optional goproto.protoc.extension.proto3.Enum extension_enum = 1002;
 	E_ExtensionEnum = &file_extensions_proto3_ext3_proto_extDescs[1]
-
-	// extend google.protobuf.MessageOptions { optional int32 extension_int32 = 1003; }
+	// optional int32 extension_int32 = 1003;
 	E_ExtensionInt32 = &file_extensions_proto3_ext3_proto_extDescs[2]
-
-	// extend google.protobuf.MessageOptions { optional sint32 extension_sint32 = 1004; }
+	// optional sint32 extension_sint32 = 1004;
 	E_ExtensionSint32 = &file_extensions_proto3_ext3_proto_extDescs[3]
-
-	// extend google.protobuf.MessageOptions { optional uint32 extension_uint32 = 1005; }
+	// optional uint32 extension_uint32 = 1005;
 	E_ExtensionUint32 = &file_extensions_proto3_ext3_proto_extDescs[4]
-
-	// extend google.protobuf.MessageOptions { optional int64 extension_int64 = 1006; }
+	// optional int64 extension_int64 = 1006;
 	E_ExtensionInt64 = &file_extensions_proto3_ext3_proto_extDescs[5]
-
-	// extend google.protobuf.MessageOptions { optional sint64 extension_sint64 = 1007; }
+	// optional sint64 extension_sint64 = 1007;
 	E_ExtensionSint64 = &file_extensions_proto3_ext3_proto_extDescs[6]
-
-	// extend google.protobuf.MessageOptions { optional uint64 extension_uint64 = 1008; }
+	// optional uint64 extension_uint64 = 1008;
 	E_ExtensionUint64 = &file_extensions_proto3_ext3_proto_extDescs[7]
-
-	// extend google.protobuf.MessageOptions { optional sfixed32 extension_sfixed32 = 1009; }
+	// optional sfixed32 extension_sfixed32 = 1009;
 	E_ExtensionSfixed32 = &file_extensions_proto3_ext3_proto_extDescs[8]
-
-	// extend google.protobuf.MessageOptions { optional fixed32 extension_fixed32 = 1010; }
+	// optional fixed32 extension_fixed32 = 1010;
 	E_ExtensionFixed32 = &file_extensions_proto3_ext3_proto_extDescs[9]
-
-	// extend google.protobuf.MessageOptions { optional float extension_float = 1011; }
+	// optional float extension_float = 1011;
 	E_ExtensionFloat = &file_extensions_proto3_ext3_proto_extDescs[10]
-
-	// extend google.protobuf.MessageOptions { optional sfixed64 extension_sfixed64 = 1012; }
+	// optional sfixed64 extension_sfixed64 = 1012;
 	E_ExtensionSfixed64 = &file_extensions_proto3_ext3_proto_extDescs[11]
-
-	// extend google.protobuf.MessageOptions { optional fixed64 extension_fixed64 = 1013; }
+	// optional fixed64 extension_fixed64 = 1013;
 	E_ExtensionFixed64 = &file_extensions_proto3_ext3_proto_extDescs[12]
-
-	// extend google.protobuf.MessageOptions { optional double extension_double = 1014; }
+	// optional double extension_double = 1014;
 	E_ExtensionDouble = &file_extensions_proto3_ext3_proto_extDescs[13]
-
-	// extend google.protobuf.MessageOptions { optional string extension_string = 1015; }
+	// optional string extension_string = 1015;
 	E_ExtensionString = &file_extensions_proto3_ext3_proto_extDescs[14]
-
-	// extend google.protobuf.MessageOptions { optional bytes extension_bytes = 1016; }
+	// optional bytes extension_bytes = 1016;
 	E_ExtensionBytes = &file_extensions_proto3_ext3_proto_extDescs[15]
-
-	// extend google.protobuf.MessageOptions { optional goproto.protoc.extension.proto3.Message extension_Message = 1017; }
+	// optional goproto.protoc.extension.proto3.Message extension_Message = 1017;
 	E_Extension_Message = &file_extensions_proto3_ext3_proto_extDescs[16]
-
-	// extend google.protobuf.MessageOptions { repeated bool repeated_extension_bool = 2001; }
+	// repeated bool repeated_extension_bool = 2001;
 	E_RepeatedExtensionBool = &file_extensions_proto3_ext3_proto_extDescs[17]
-
-	// extend google.protobuf.MessageOptions { repeated goproto.protoc.extension.proto3.Enum repeated_extension_enum = 2002; }
+	// repeated goproto.protoc.extension.proto3.Enum repeated_extension_enum = 2002;
 	E_RepeatedExtensionEnum = &file_extensions_proto3_ext3_proto_extDescs[18]
-
-	// extend google.protobuf.MessageOptions { repeated int32 repeated_extension_int32 = 2003; }
+	// repeated int32 repeated_extension_int32 = 2003;
 	E_RepeatedExtensionInt32 = &file_extensions_proto3_ext3_proto_extDescs[19]
-
-	// extend google.protobuf.MessageOptions { repeated sint32 repeated_extension_sint32 = 2004; }
+	// repeated sint32 repeated_extension_sint32 = 2004;
 	E_RepeatedExtensionSint32 = &file_extensions_proto3_ext3_proto_extDescs[20]
-
-	// extend google.protobuf.MessageOptions { repeated uint32 repeated_extension_uint32 = 2005; }
+	// repeated uint32 repeated_extension_uint32 = 2005;
 	E_RepeatedExtensionUint32 = &file_extensions_proto3_ext3_proto_extDescs[21]
-
-	// extend google.protobuf.MessageOptions { repeated int64 repeated_extension_int64 = 2006; }
+	// repeated int64 repeated_extension_int64 = 2006;
 	E_RepeatedExtensionInt64 = &file_extensions_proto3_ext3_proto_extDescs[22]
-
-	// extend google.protobuf.MessageOptions { repeated sint64 repeated_extension_sint64 = 2007; }
+	// repeated sint64 repeated_extension_sint64 = 2007;
 	E_RepeatedExtensionSint64 = &file_extensions_proto3_ext3_proto_extDescs[23]
-
-	// extend google.protobuf.MessageOptions { repeated uint64 repeated_extension_uint64 = 2008; }
+	// repeated uint64 repeated_extension_uint64 = 2008;
 	E_RepeatedExtensionUint64 = &file_extensions_proto3_ext3_proto_extDescs[24]
-
-	// extend google.protobuf.MessageOptions { repeated sfixed32 repeated_extension_sfixed32 = 2009; }
+	// repeated sfixed32 repeated_extension_sfixed32 = 2009;
 	E_RepeatedExtensionSfixed32 = &file_extensions_proto3_ext3_proto_extDescs[25]
-
-	// extend google.protobuf.MessageOptions { repeated fixed32 repeated_extension_fixed32 = 2010; }
+	// repeated fixed32 repeated_extension_fixed32 = 2010;
 	E_RepeatedExtensionFixed32 = &file_extensions_proto3_ext3_proto_extDescs[26]
-
-	// extend google.protobuf.MessageOptions { repeated float repeated_extension_float = 2011; }
+	// repeated float repeated_extension_float = 2011;
 	E_RepeatedExtensionFloat = &file_extensions_proto3_ext3_proto_extDescs[27]
-
-	// extend google.protobuf.MessageOptions { repeated sfixed64 repeated_extension_sfixed64 = 2012; }
+	// repeated sfixed64 repeated_extension_sfixed64 = 2012;
 	E_RepeatedExtensionSfixed64 = &file_extensions_proto3_ext3_proto_extDescs[28]
-
-	// extend google.protobuf.MessageOptions { repeated fixed64 repeated_extension_fixed64 = 2013; }
+	// repeated fixed64 repeated_extension_fixed64 = 2013;
 	E_RepeatedExtensionFixed64 = &file_extensions_proto3_ext3_proto_extDescs[29]
-
-	// extend google.protobuf.MessageOptions { repeated double repeated_extension_double = 2014; }
+	// repeated double repeated_extension_double = 2014;
 	E_RepeatedExtensionDouble = &file_extensions_proto3_ext3_proto_extDescs[30]
-
-	// extend google.protobuf.MessageOptions { repeated string repeated_extension_string = 2015; }
+	// repeated string repeated_extension_string = 2015;
 	E_RepeatedExtensionString = &file_extensions_proto3_ext3_proto_extDescs[31]
-
-	// extend google.protobuf.MessageOptions { repeated bytes repeated_extension_bytes = 2016; }
+	// repeated bytes repeated_extension_bytes = 2016;
 	E_RepeatedExtensionBytes = &file_extensions_proto3_ext3_proto_extDescs[32]
-
-	// extend google.protobuf.MessageOptions { repeated goproto.protoc.extension.proto3.Message repeated_extension_Message = 2017; }
+	// repeated goproto.protoc.extension.proto3.Message repeated_extension_Message = 2017;
 	E_RepeatedExtension_Message = &file_extensions_proto3_ext3_proto_extDescs[33]
 )
+
 var File_extensions_proto3_ext3_proto protoreflect.FileDescriptor
 
 var file_extensions_proto3_ext3_proto_rawDesc = []byte{
diff --git a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
index 3674dcd..36bdc72 100644
--- a/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
+++ b/cmd/protoc-gen-go/testdata/import_public/sub/a.pb.go
@@ -396,10 +396,13 @@
 		Filename:      "import_public/sub/a.proto",
 	},
 }
+
+// Extension fields to M.
 var (
-	// extend goproto.protoc.import_public.sub.M { optional string extension_field = 100; }
+	// optional string extension_field = 100;
 	E_ExtensionField = &file_import_public_sub_a_proto_extDescs[0]
 )
+
 var File_import_public_sub_a_proto protoreflect.FileDescriptor
 
 var file_import_public_sub_a_proto_rawDesc = []byte{
diff --git a/encoding/testprotos/pb2/test.pb.go b/encoding/testprotos/pb2/test.pb.go
index 036fc44..1d6988e 100644
--- a/encoding/testprotos/pb2/test.pb.go
+++ b/encoding/testprotos/pb2/test.pb.go
@@ -1598,70 +1598,61 @@
 		Filename:      "pb2/test.proto",
 	},
 }
+
+// Extension fields to Extensions.
 var (
-	// extend pb2.Extensions { optional bool opt_ext_bool = 21; }
+	// optional bool opt_ext_bool = 21;
 	E_OptExtBool = &file_pb2_test_proto_extDescs[0]
-
-	// extend pb2.Extensions { optional string opt_ext_string = 22; }
+	// optional string opt_ext_string = 22;
 	E_OptExtString = &file_pb2_test_proto_extDescs[1]
-
-	// extend pb2.Extensions { optional pb2.Enum opt_ext_enum = 23; }
+	// optional pb2.Enum opt_ext_enum = 23;
 	E_OptExtEnum = &file_pb2_test_proto_extDescs[2]
-
-	// extend pb2.Extensions { optional pb2.Nested opt_ext_nested = 24; }
+	// optional pb2.Nested opt_ext_nested = 24;
 	E_OptExtNested = &file_pb2_test_proto_extDescs[3]
-
-	// extend pb2.Extensions { optional pb2.PartialRequired opt_ext_partial = 25; }
+	// optional pb2.PartialRequired opt_ext_partial = 25;
 	E_OptExtPartial = &file_pb2_test_proto_extDescs[4]
-
-	// extend pb2.Extensions { repeated fixed32 rpt_ext_fixed32 = 31; }
+	// repeated fixed32 rpt_ext_fixed32 = 31;
 	E_RptExtFixed32 = &file_pb2_test_proto_extDescs[5]
-
-	// extend pb2.Extensions { repeated pb2.Enum rpt_ext_enum = 32; }
+	// repeated pb2.Enum rpt_ext_enum = 32;
 	E_RptExtEnum = &file_pb2_test_proto_extDescs[6]
-
-	// extend pb2.Extensions { repeated pb2.Nested rpt_ext_nested = 33; }
+	// repeated pb2.Nested rpt_ext_nested = 33;
 	E_RptExtNested = &file_pb2_test_proto_extDescs[7]
-
-	// extend pb2.MessageSet { optional pb2.FakeMessageSetExtension message_set_extension = 50; }
-	E_MessageSetExtension = &file_pb2_test_proto_extDescs[8]
-
-	// extend pb2.Extensions { optional bool opt_ext_bool = 51; }
+	// optional bool opt_ext_bool = 51;
 	E_ExtensionsContainer_OptExtBool = &file_pb2_test_proto_extDescs[9]
-
-	// extend pb2.Extensions { optional string opt_ext_string = 52; }
+	// optional string opt_ext_string = 52;
 	E_ExtensionsContainer_OptExtString = &file_pb2_test_proto_extDescs[10]
-
-	// extend pb2.Extensions { optional pb2.Enum opt_ext_enum = 53; }
+	// optional pb2.Enum opt_ext_enum = 53;
 	E_ExtensionsContainer_OptExtEnum = &file_pb2_test_proto_extDescs[11]
-
-	// extend pb2.Extensions { optional pb2.Nested opt_ext_nested = 54; }
+	// optional pb2.Nested opt_ext_nested = 54;
 	E_ExtensionsContainer_OptExtNested = &file_pb2_test_proto_extDescs[12]
-
-	// extend pb2.Extensions { optional pb2.PartialRequired opt_ext_partial = 55; }
+	// optional pb2.PartialRequired opt_ext_partial = 55;
 	E_ExtensionsContainer_OptExtPartial = &file_pb2_test_proto_extDescs[13]
-
-	// extend pb2.Extensions { repeated string rpt_ext_string = 61; }
+	// repeated string rpt_ext_string = 61;
 	E_ExtensionsContainer_RptExtString = &file_pb2_test_proto_extDescs[14]
-
-	// extend pb2.Extensions { repeated pb2.Enum rpt_ext_enum = 62; }
+	// repeated pb2.Enum rpt_ext_enum = 62;
 	E_ExtensionsContainer_RptExtEnum = &file_pb2_test_proto_extDescs[15]
-
-	// extend pb2.Extensions { repeated pb2.Nested rpt_ext_nested = 63; }
+	// repeated pb2.Nested rpt_ext_nested = 63;
 	E_ExtensionsContainer_RptExtNested = &file_pb2_test_proto_extDescs[16]
+)
 
-	// extend pb2.MessageSet { optional pb2.MessageSetExtension message_set_extension = 10; }
+// Extension fields to MessageSet.
+var (
+	// optional pb2.FakeMessageSetExtension message_set_extension = 50;
+	E_MessageSetExtension = &file_pb2_test_proto_extDescs[8]
+	// optional pb2.MessageSetExtension message_set_extension = 10;
 	E_MessageSetExtension_MessageSetExtension = &file_pb2_test_proto_extDescs[17]
-
-	// extend pb2.MessageSet { optional pb2.MessageSetExtension not_message_set_extension = 20; }
+	// optional pb2.MessageSetExtension not_message_set_extension = 20;
 	E_MessageSetExtension_NotMessageSetExtension = &file_pb2_test_proto_extDescs[18]
-
-	// extend pb2.MessageSet { optional pb2.Nested ext_nested = 30; }
+	// optional pb2.Nested ext_nested = 30;
 	E_MessageSetExtension_ExtNested = &file_pb2_test_proto_extDescs[19]
+)
 
-	// extend pb2.FakeMessageSet { optional pb2.FakeMessageSetExtension message_set_extension = 10; }
+// Extension fields to FakeMessageSet.
+var (
+	// optional pb2.FakeMessageSetExtension message_set_extension = 10;
 	E_FakeMessageSetExtension_MessageSetExtension = &file_pb2_test_proto_extDescs[20]
 )
+
 var File_pb2_test_proto protoreflect.FileDescriptor
 
 var file_pb2_test_proto_rawDesc = []byte{
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
index 2c706ca..9b71440 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3.pb.go
@@ -4071,238 +4071,177 @@
 		Filename:      "datasets/google_message3/benchmark_message3.proto",
 	},
 }
+
+// Extension fields to Message16945.
 var (
-	// extend benchmarks.google_message3.Message16945 { optional string field17026 = 472; }
+	// optional string field17026 = 472;
 	E_Field17026 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[0]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17027 = 818; }
+	// repeated string field17027 = 818;
 	E_Field17027 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[1]
-
-	// extend benchmarks.google_message3.Message16945 { optional benchmarks.google_message3.Message0 field17031 = 215; }
+	// optional benchmarks.google_message3.Message0 field17031 = 215;
 	E_Field17031 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[2]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17032 = 292; }
+	// repeated benchmarks.google_message3.Message0 field17032 = 292;
 	E_Field17032 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[3]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17038 = 234; }
+	// repeated benchmarks.google_message3.Message0 field17038 = 234;
 	E_Field17038 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[4]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17039 = 235; }
+	// repeated benchmarks.google_message3.Message0 field17039 = 235;
 	E_Field17039 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[5]
-
-	// extend benchmarks.google_message3.Message16945 { optional benchmarks.google_message3.Message0 field17042 = 246; }
+	// optional benchmarks.google_message3.Message0 field17042 = 246;
 	E_Field17042 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[6]
-
-	// extend benchmarks.google_message3.Message16945 { optional string field17043 = 224; }
+	// optional string field17043 = 224;
 	E_Field17043 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[7]
-
-	// extend benchmarks.google_message3.Message16945 { optional string field17044 = 225; }
+	// optional string field17044 = 225;
 	E_Field17044 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[8]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17048 = 63; }
+	// repeated string field17048 = 63;
 	E_Field17048 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[9]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17049 = 64; }
+	// repeated string field17049 = 64;
 	E_Field17049 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[10]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17052 = 233; }
+	// repeated benchmarks.google_message3.Message0 field17052 = 233;
 	E_Field17052 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[11]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17053 = 66; }
+	// repeated benchmarks.google_message3.Message0 field17053 = 66;
 	E_Field17053 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[12]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17056 = 275; }
+	// repeated string field17056 = 275;
 	E_Field17056 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[13]
-
-	// extend benchmarks.google_message3.Message16945 { optional string field17057 = 226; }
+	// optional string field17057 = 226;
 	E_Field17057 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[14]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17060 = 27; }
+	// repeated benchmarks.google_message3.Message0 field17060 = 27;
 	E_Field17060 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[15]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17073 = 75; }
+	// repeated string field17073 = 75;
 	E_Field17073 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[16]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17076 = 77; }
+	// repeated benchmarks.google_message3.Message0 field17076 = 77;
 	E_Field17076 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[17]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17078 = 296; }
+	// repeated string field17078 = 296;
 	E_Field17078 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[18]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17082 = 160; }
+	// repeated benchmarks.google_message3.Message0 field17082 = 160;
 	E_Field17082 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[19]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17091 = 585; }
+	// repeated benchmarks.google_message3.Message0 field17091 = 585;
 	E_Field17091 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[20]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17098 = 987; }
+	// repeated benchmarks.google_message3.Message0 field17098 = 987;
 	E_Field17098 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[21]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17101 = 157; }
+	// repeated benchmarks.google_message3.Message0 field17101 = 157;
 	E_Field17101 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[22]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17102 = 158; }
+	// repeated string field17102 = 158;
 	E_Field17102 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[23]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17107 = 166; }
+	// repeated string field17107 = 166;
 	E_Field17107 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[24]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17133 = 567; }
+	// repeated string field17133 = 567;
 	E_Field17133 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[25]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17134 = 572; }
+	// repeated string field17134 = 572;
 	E_Field17134 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[26]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17160 = 49; }
+	// repeated string field17160 = 49;
 	E_Field17160 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[27]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17168 = 32; }
+	// repeated string field17168 = 32;
 	E_Field17168 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[28]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17170 = 34; }
+	// repeated string field17170 = 34;
 	E_Field17170 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[29]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17172 = 509; }
+	// repeated benchmarks.google_message3.Message0 field17172 = 509;
 	E_Field17172 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[30]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17174 = 39; }
+	// repeated string field17174 = 39;
 	E_Field17174 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[31]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17175 = 40; }
+	// repeated benchmarks.google_message3.Message0 field17175 = 40;
 	E_Field17175 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[32]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17178 = 511; }
+	// repeated benchmarks.google_message3.Message0 field17178 = 511;
 	E_Field17178 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[33]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17185 = 50; }
+	// repeated benchmarks.google_message3.Message0 field17185 = 50;
 	E_Field17185 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[34]
-
-	// extend benchmarks.google_message3.Message16945 { repeated int32 field17207 = 1081; }
+	// repeated int32 field17207 = 1081;
 	E_Field17207 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[35]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17238 = 184; }
+	// repeated benchmarks.google_message3.Message0 field17238 = 184;
 	E_Field17238 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[36]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17289 = 177; }
+	// repeated benchmarks.google_message3.Message0 field17289 = 177;
 	E_Field17289 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[37]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17290 = 178; }
+	// repeated benchmarks.google_message3.Message0 field17290 = 178;
 	E_Field17290 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[38]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17296 = 474; }
+	// repeated benchmarks.google_message3.Message0 field17296 = 474;
 	E_Field17296 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[39]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17298 = 44; }
+	// repeated string field17298 = 44;
 	E_Field17298 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[40]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17301 = 47; }
+	// repeated benchmarks.google_message3.Message0 field17301 = 47;
 	E_Field17301 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[41]
-
-	// extend benchmarks.google_message3.Message16945 { optional benchmarks.google_message3.Message0 field17412 = 21; }
+	// optional benchmarks.google_message3.Message0 field17412 = 21;
 	E_Field17412 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[42]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17438 = 132; }
+	// repeated benchmarks.google_message3.Message0 field17438 = 132;
 	E_Field17438 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[43]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17458 = 512; }
+	// repeated benchmarks.google_message3.Message0 field17458 = 512;
 	E_Field17458 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[44]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17460 = 560; }
+	// repeated string field17460 = 560;
 	E_Field17460 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[45]
-
-	// extend benchmarks.google_message3.Message16945 { repeated string field17466 = 552; }
+	// repeated string field17466 = 552;
 	E_Field17466 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[46]
-
-	// extend benchmarks.google_message3.Message16945 { repeated benchmarks.google_message3.Message0 field17617 = 1080; }
+	// repeated benchmarks.google_message3.Message0 field17617 = 1080;
 	E_Field17617 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[47]
-
-	// extend benchmarks.google_message3.Message16945 { repeated int32 field17618 = 1084; }
+	// repeated int32 field17618 = 1084;
 	E_Field17618 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[48]
+)
 
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message1327 field1373 = 23104162; }
+// Extension fields to Message0.
+var (
+	// optional benchmarks.google_message3.Message1327 field1373 = 23104162;
 	E_Message1327_Field1373 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[49]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message3672 field3737 = 3144435; }
+	// optional benchmarks.google_message3.Message3672 field3737 = 3144435;
 	E_Message3672_Field3737 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[50]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message3804 field3825 = 59241828; }
+	// optional benchmarks.google_message3.Message3804 field3825 = 59241828;
 	E_Message3804_Field3825 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[51]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message6849 field6911 = 107558455; }
+	// optional benchmarks.google_message3.Message6849 field6911 = 107558455;
 	E_Message6849_Field6911 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[52]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message6866 field6974 = 22259060; }
+	// optional benchmarks.google_message3.Message6866 field6974 = 22259060;
 	E_Message6866_Field6974 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[53]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message6870 field6992 = 90034652; }
+	// optional benchmarks.google_message3.Message6870 field6992 = 90034652;
 	E_Message6870_Field6992 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[54]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message7651 field7730 = 55876009; }
+	// optional benchmarks.google_message3.Message7651 field7730 = 55876009;
 	E_Message7651_Field7730 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[55]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message7864 field7872 = 44542730; }
+	// optional benchmarks.google_message3.Message7864 field7872 = 44542730;
 	E_Message7864_Field7872 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[56]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message7929 field7962 = 53392238; }
+	// optional benchmarks.google_message3.Message7929 field7962 = 53392238;
 	E_Message7929_Field7962 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[57]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message8508 field8534 = 3811804; }
+	// optional benchmarks.google_message3.Message8508 field8534 = 3811804;
 	E_Message8508_Field8534 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[58]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message9122 field9134 = 120398939; }
+	// optional benchmarks.google_message3.Message9122 field9134 = 120398939;
 	E_Message9122_Field9134 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[59]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message10177 field10271 = 26801105; }
+	// optional benchmarks.google_message3.Message10177 field10271 = 26801105;
 	E_Message10177_Field10271 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[60]
-
-	// extend benchmarks.google_message3.Message10155 { optional benchmarks.google_message3.Message10278 field10289 = 29374161; }
-	E_Message10278_Field10289 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[61]
-
-	// extend benchmarks.google_message3.Message10155 { optional benchmarks.google_message3.Message10323 field10361 = 27922524; }
-	E_Message10323_Field10361 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[62]
-
-	// extend benchmarks.google_message3.Message10155 { optional benchmarks.google_message3.Message10324 field10364 = 27832297; }
-	E_Message10324_Field10364 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[63]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message11990 field12031 = 21265426; }
+	// optional benchmarks.google_message3.Message11990 field12031 = 21265426;
 	E_Message11990_Field12031 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[64]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message12691 field12716 = 28426536; }
+	// optional benchmarks.google_message3.Message12691 field12716 = 28426536;
 	E_Message12691_Field12716 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[65]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message12870 field12899 = 5447656; }
+	// optional benchmarks.google_message3.Message12870 field12899 = 5447656;
 	E_Message12870_Field12899 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[66]
-
-	// extend benchmarks.google_message3.Message13145 { optional benchmarks.google_message3.Message13154 field13166 = 47301086; }
-	E_Message13154_Field13166 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[67]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message16507 field16542 = 5569941; }
+	// optional benchmarks.google_message3.Message16507 field16542 = 5569941;
 	E_Message16507_Field16542 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[68]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message16564 field16569 = 25830030; }
+	// optional benchmarks.google_message3.Message16564 field16569 = 25830030;
 	E_Message16564_Field16569 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[69]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message16661 field16673 = 31274398; }
+	// optional benchmarks.google_message3.Message16661 field16673 = 31274398;
 	E_Message16661_Field16673 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[70]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message16746 field16810 = 28406765; }
+	// optional benchmarks.google_message3.Message16746 field16810 = 28406765;
 	E_Message16746_Field16810 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[71]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message17786 field18176 = 11823055; }
+	// optional benchmarks.google_message3.Message17786 field18176 = 11823055;
 	E_Message17786_Field18176 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[72]
-
-	// extend benchmarks.google_message3.Message10155 { optional benchmarks.google_message3.Message22857 field22875 = 67799715; }
-	E_Message22857_Field22875 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[73]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message24404 field24685 = 9129287; }
+	// optional benchmarks.google_message3.Message24404 field24685 = 9129287;
 	E_Message24404_Field24685 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[74]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message27300 field27304 = 24956467; }
+	// optional benchmarks.google_message3.Message27300 field27304 = 24956467;
 	E_Message27300_Field27304 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[75]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message27453 field27482 = 8086204; }
+	// optional benchmarks.google_message3.Message27453 field27482 = 8086204;
 	E_Message27453_Field27482 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[76]
 )
+
+// Extension fields to Message10155.
+var (
+	// optional benchmarks.google_message3.Message10278 field10289 = 29374161;
+	E_Message10278_Field10289 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[61]
+	// optional benchmarks.google_message3.Message10323 field10361 = 27922524;
+	E_Message10323_Field10361 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[62]
+	// optional benchmarks.google_message3.Message10324 field10364 = 27832297;
+	E_Message10324_Field10364 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[63]
+	// optional benchmarks.google_message3.Message22857 field22875 = 67799715;
+	E_Message22857_Field22875 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[73]
+)
+
+// Extension fields to Message13145.
+var (
+	// optional benchmarks.google_message3.Message13154 field13166 = 47301086;
+	E_Message13154_Field13166 = &file_datasets_google_message3_benchmark_message3_proto_extDescs[67]
+)
+
 var File_datasets_google_message3_benchmark_message3_proto protoreflect.FileDescriptor
 
 var file_datasets_google_message3_benchmark_message3_proto_rawDesc = []byte{
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
index 33b4c9f..6d36563 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_1.pb.go
@@ -6035,25 +6035,23 @@
 		Filename:      "datasets/google_message3/benchmark_message3_1.proto",
 	},
 }
+
+// Extension fields to Message0.
 var (
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message34390 field34453 = 92144610; }
+	// optional benchmarks.google_message3.Message34390 field34453 = 92144610;
 	E_Message34390_Field34453 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[0]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message34624 field34685 = 18178548; }
+	// optional benchmarks.google_message3.Message34624 field34685 = 18178548;
 	E_Message34624_Field34685 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[1]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message34791 field34807 = 6330340; }
+	// optional benchmarks.google_message3.Message34791 field34807 = 6330340;
 	E_Message34791_Field34807 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[2]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message35483 field35505 = 7913554; }
+	// optional benchmarks.google_message3.Message35483 field35505 = 7913554;
 	E_Message35483_Field35505 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[3]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message35807 field35818 = 3803299; }
+	// optional benchmarks.google_message3.Message35807 field35818 = 3803299;
 	E_Message35807_Field35818 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[4]
-
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message16945 field17025 = 22068132; }
+	// optional benchmarks.google_message3.Message16945 field17025 = 22068132;
 	E_Message16945_Field17025 = &file_datasets_google_message3_benchmark_message3_1_proto_extDescs[5]
 )
+
 var File_datasets_google_message3_benchmark_message3_1_proto protoreflect.FileDescriptor
 
 var file_datasets_google_message3_benchmark_message3_1_proto_rawDesc = []byte{
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
index bf902b4..de684a1 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_2.pb.go
@@ -4303,10 +4303,13 @@
 		Filename:      "datasets/google_message3/benchmark_message3_2.proto",
 	},
 }
+
+// Extension fields to Message0.
 var (
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message34621 field34669 = 17562023; }
+	// optional benchmarks.google_message3.Message34621 field34669 = 17562023;
 	E_Message34621_Field34669 = &file_datasets_google_message3_benchmark_message3_2_proto_extDescs[0]
 )
+
 var File_datasets_google_message3_benchmark_message3_2_proto protoreflect.FileDescriptor
 
 var file_datasets_google_message3_benchmark_message3_2_proto_rawDesc = []byte{
diff --git a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
index 43755fc..843eddb 100644
--- a/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
+++ b/internal/testprotos/benchmarks/datasets/google_message3/benchmark_message3_4.pb.go
@@ -4418,16 +4418,25 @@
 		Filename:      "datasets/google_message3/benchmark_message3_4.proto",
 	},
 }
+
+// Extension fields to Message0.
 var (
-	// extend benchmarks.google_message3.Message0 { optional benchmarks.google_message3.Message33958 field33981 = 10747482; }
+	// optional benchmarks.google_message3.Message33958 field33981 = 10747482;
 	E_Message33958_Field33981 = &file_datasets_google_message3_benchmark_message3_4_proto_extDescs[0]
+)
 
-	// extend benchmarks.google_message3.Message8301 { optional benchmarks.google_message3.Message8454 field8469 = 66; }
+// Extension fields to Message8301.
+var (
+	// optional benchmarks.google_message3.Message8454 field8469 = 66;
 	E_Message8454_Field8469 = &file_datasets_google_message3_benchmark_message3_4_proto_extDescs[1]
+)
 
-	// extend benchmarks.google_message3.Message8302 { optional benchmarks.google_message3.Message8455 field8474 = 66; }
+// Extension fields to Message8302.
+var (
+	// optional benchmarks.google_message3.Message8455 field8474 = 66;
 	E_Message8455_Field8474 = &file_datasets_google_message3_benchmark_message3_4_proto_extDescs[2]
 )
+
 var File_datasets_google_message3_benchmark_message3_4_proto protoreflect.FileDescriptor
 
 var file_datasets_google_message3_benchmark_message3_4_proto_rawDesc = []byte{
diff --git a/internal/testprotos/conformance/test_messages_proto2.pb.go b/internal/testprotos/conformance/test_messages_proto2.pb.go
index b787db2..2bccfb7 100644
--- a/internal/testprotos/conformance/test_messages_proto2.pb.go
+++ b/internal/testprotos/conformance/test_messages_proto2.pb.go
@@ -1274,16 +1274,21 @@
 		Filename:      "google/protobuf/test_messages_proto2.proto",
 	},
 }
+
+// Extension fields to TestAllTypesProto2.
 var (
-	// extend protobuf_test_messages.proto2.TestAllTypesProto2 { optional int32 extension_int32 = 120; }
+	// optional int32 extension_int32 = 120;
 	E_ExtensionInt32 = &file_google_protobuf_test_messages_proto2_proto_extDescs[0]
+)
 
-	// extend protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect { optional protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1 message_set_extension = 1547769; }
+// Extension fields to TestAllTypesProto2_MessageSetCorrect.
+var (
+	// optional protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension1 message_set_extension = 1547769;
 	E_TestAllTypesProto2_MessageSetCorrectExtension1_MessageSetExtension = &file_google_protobuf_test_messages_proto2_proto_extDescs[1]
-
-	// extend protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrect { optional protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2 message_set_extension = 4135312; }
+	// optional protobuf_test_messages.proto2.TestAllTypesProto2.MessageSetCorrectExtension2 message_set_extension = 4135312;
 	E_TestAllTypesProto2_MessageSetCorrectExtension2_MessageSetExtension = &file_google_protobuf_test_messages_proto2_proto_extDescs[2]
 )
+
 var File_google_protobuf_test_messages_proto2_proto protoreflect.FileDescriptor
 
 var file_google_protobuf_test_messages_proto2_proto_rawDesc = []byte{
diff --git a/internal/testprotos/messageset/msetextpb/msetextpb.pb.go b/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
index 716517f..e60f1c9 100644
--- a/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
+++ b/internal/testprotos/messageset/msetextpb/msetextpb.pb.go
@@ -127,13 +127,15 @@
 		Filename:      "messageset/msetextpb/msetextpb.proto",
 	},
 }
-var (
-	// extend goproto.proto.messageset.MessageSet { optional goproto.proto.messageset.Ext1 message_set_extension = 1000; }
-	E_Ext1_MessageSetExtension = &file_messageset_msetextpb_msetextpb_proto_extDescs[0]
 
-	// extend goproto.proto.messageset.MessageSet { optional goproto.proto.messageset.Ext2 message_set_extension = 1001; }
+// Extension fields to messagesetpb.MessageSet.
+var (
+	// optional goproto.proto.messageset.Ext1 message_set_extension = 1000;
+	E_Ext1_MessageSetExtension = &file_messageset_msetextpb_msetextpb_proto_extDescs[0]
+	// optional goproto.proto.messageset.Ext2 message_set_extension = 1001;
 	E_Ext2_MessageSetExtension = &file_messageset_msetextpb_msetextpb_proto_extDescs[1]
 )
+
 var File_messageset_msetextpb_msetextpb_proto protoreflect.FileDescriptor
 
 var file_messageset_msetextpb_msetextpb_proto_rawDesc = []byte{
diff --git a/internal/testprotos/test/ext.pb.go b/internal/testprotos/test/ext.pb.go
index 289c00b..7922170 100644
--- a/internal/testprotos/test/ext.pb.go
+++ b/internal/testprotos/test/ext.pb.go
@@ -28,10 +28,13 @@
 		Filename:      "test/ext.proto",
 	},
 }
+
+// Extension fields to TestAllExtensions.
 var (
-	// extend goproto.proto.test.TestAllExtensions { optional int32 foreign_int32_extension = 2000; }
+	// optional int32 foreign_int32_extension = 2000;
 	E_ForeignInt32Extension = &file_test_ext_proto_extDescs[0]
 )
+
 var File_test_ext_proto protoreflect.FileDescriptor
 
 var file_test_ext_proto_rawDesc = []byte{
diff --git a/internal/testprotos/test/test.pb.go b/internal/testprotos/test/test.pb.go
index 2979dd5..41a649e 100644
--- a/internal/testprotos/test/test.pb.go
+++ b/internal/testprotos/test/test.pb.go
@@ -2948,253 +2948,183 @@
 		Filename:      "test/test.proto",
 	},
 }
+
+// Extension fields to TestAllExtensions.
 var (
-	// extend goproto.proto.test.TestAllExtensions { optional int32 optional_int32_extension = 1; }
+	// optional int32 optional_int32_extension = 1;
 	E_OptionalInt32Extension = &file_test_test_proto_extDescs[0]
-
-	// extend goproto.proto.test.TestAllExtensions { optional int64 optional_int64_extension = 2; }
+	// optional int64 optional_int64_extension = 2;
 	E_OptionalInt64Extension = &file_test_test_proto_extDescs[1]
-
-	// extend goproto.proto.test.TestAllExtensions { optional uint32 optional_uint32_extension = 3; }
+	// optional uint32 optional_uint32_extension = 3;
 	E_OptionalUint32Extension = &file_test_test_proto_extDescs[2]
-
-	// extend goproto.proto.test.TestAllExtensions { optional uint64 optional_uint64_extension = 4; }
+	// optional uint64 optional_uint64_extension = 4;
 	E_OptionalUint64Extension = &file_test_test_proto_extDescs[3]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sint32 optional_sint32_extension = 5; }
+	// optional sint32 optional_sint32_extension = 5;
 	E_OptionalSint32Extension = &file_test_test_proto_extDescs[4]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sint64 optional_sint64_extension = 6; }
+	// optional sint64 optional_sint64_extension = 6;
 	E_OptionalSint64Extension = &file_test_test_proto_extDescs[5]
-
-	// extend goproto.proto.test.TestAllExtensions { optional fixed32 optional_fixed32_extension = 7; }
+	// optional fixed32 optional_fixed32_extension = 7;
 	E_OptionalFixed32Extension = &file_test_test_proto_extDescs[6]
-
-	// extend goproto.proto.test.TestAllExtensions { optional fixed64 optional_fixed64_extension = 8; }
+	// optional fixed64 optional_fixed64_extension = 8;
 	E_OptionalFixed64Extension = &file_test_test_proto_extDescs[7]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sfixed32 optional_sfixed32_extension = 9; }
+	// optional sfixed32 optional_sfixed32_extension = 9;
 	E_OptionalSfixed32Extension = &file_test_test_proto_extDescs[8]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sfixed64 optional_sfixed64_extension = 10; }
+	// optional sfixed64 optional_sfixed64_extension = 10;
 	E_OptionalSfixed64Extension = &file_test_test_proto_extDescs[9]
-
-	// extend goproto.proto.test.TestAllExtensions { optional float optional_float_extension = 11; }
+	// optional float optional_float_extension = 11;
 	E_OptionalFloatExtension = &file_test_test_proto_extDescs[10]
-
-	// extend goproto.proto.test.TestAllExtensions { optional double optional_double_extension = 12; }
+	// optional double optional_double_extension = 12;
 	E_OptionalDoubleExtension = &file_test_test_proto_extDescs[11]
-
-	// extend goproto.proto.test.TestAllExtensions { optional bool optional_bool_extension = 13; }
+	// optional bool optional_bool_extension = 13;
 	E_OptionalBoolExtension = &file_test_test_proto_extDescs[12]
-
-	// extend goproto.proto.test.TestAllExtensions { optional string optional_string_extension = 14; }
+	// optional string optional_string_extension = 14;
 	E_OptionalStringExtension = &file_test_test_proto_extDescs[13]
-
-	// extend goproto.proto.test.TestAllExtensions { optional bytes optional_bytes_extension = 15; }
+	// optional bytes optional_bytes_extension = 15;
 	E_OptionalBytesExtension = &file_test_test_proto_extDescs[14]
-
-	// extend goproto.proto.test.TestAllExtensions { optional goproto.proto.test.OptionalGroup_extension optionalgroup_extension = 16; }
+	// optional goproto.proto.test.OptionalGroup_extension optionalgroup_extension = 16;
 	E_OptionalgroupExtension = &file_test_test_proto_extDescs[15]
-
-	// extend goproto.proto.test.TestAllExtensions { optional goproto.proto.test.TestAllTypes.NestedMessage optional_nested_message_extension = 18; }
+	// optional goproto.proto.test.TestAllTypes.NestedMessage optional_nested_message_extension = 18;
 	E_OptionalNestedMessageExtension = &file_test_test_proto_extDescs[16]
-
-	// extend goproto.proto.test.TestAllExtensions { optional goproto.proto.test.TestAllTypes.NestedEnum optional_nested_enum_extension = 21; }
+	// optional goproto.proto.test.TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
 	E_OptionalNestedEnumExtension = &file_test_test_proto_extDescs[17]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated int32 repeated_int32_extension = 31; }
+	// repeated int32 repeated_int32_extension = 31;
 	E_RepeatedInt32Extension = &file_test_test_proto_extDescs[18]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated int64 repeated_int64_extension = 32; }
+	// repeated int64 repeated_int64_extension = 32;
 	E_RepeatedInt64Extension = &file_test_test_proto_extDescs[19]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated uint32 repeated_uint32_extension = 33; }
+	// repeated uint32 repeated_uint32_extension = 33;
 	E_RepeatedUint32Extension = &file_test_test_proto_extDescs[20]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated uint64 repeated_uint64_extension = 34; }
+	// repeated uint64 repeated_uint64_extension = 34;
 	E_RepeatedUint64Extension = &file_test_test_proto_extDescs[21]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated sint32 repeated_sint32_extension = 35; }
+	// repeated sint32 repeated_sint32_extension = 35;
 	E_RepeatedSint32Extension = &file_test_test_proto_extDescs[22]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated sint64 repeated_sint64_extension = 36; }
+	// repeated sint64 repeated_sint64_extension = 36;
 	E_RepeatedSint64Extension = &file_test_test_proto_extDescs[23]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated fixed32 repeated_fixed32_extension = 37; }
+	// repeated fixed32 repeated_fixed32_extension = 37;
 	E_RepeatedFixed32Extension = &file_test_test_proto_extDescs[24]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated fixed64 repeated_fixed64_extension = 38; }
+	// repeated fixed64 repeated_fixed64_extension = 38;
 	E_RepeatedFixed64Extension = &file_test_test_proto_extDescs[25]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated sfixed32 repeated_sfixed32_extension = 39; }
+	// repeated sfixed32 repeated_sfixed32_extension = 39;
 	E_RepeatedSfixed32Extension = &file_test_test_proto_extDescs[26]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated sfixed64 repeated_sfixed64_extension = 40; }
+	// repeated sfixed64 repeated_sfixed64_extension = 40;
 	E_RepeatedSfixed64Extension = &file_test_test_proto_extDescs[27]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated float repeated_float_extension = 41; }
+	// repeated float repeated_float_extension = 41;
 	E_RepeatedFloatExtension = &file_test_test_proto_extDescs[28]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated double repeated_double_extension = 42; }
+	// repeated double repeated_double_extension = 42;
 	E_RepeatedDoubleExtension = &file_test_test_proto_extDescs[29]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated bool repeated_bool_extension = 43; }
+	// repeated bool repeated_bool_extension = 43;
 	E_RepeatedBoolExtension = &file_test_test_proto_extDescs[30]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated string repeated_string_extension = 44; }
+	// repeated string repeated_string_extension = 44;
 	E_RepeatedStringExtension = &file_test_test_proto_extDescs[31]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated bytes repeated_bytes_extension = 45; }
+	// repeated bytes repeated_bytes_extension = 45;
 	E_RepeatedBytesExtension = &file_test_test_proto_extDescs[32]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated goproto.proto.test.RepeatedGroup_extension repeatedgroup_extension = 46; }
+	// repeated goproto.proto.test.RepeatedGroup_extension repeatedgroup_extension = 46;
 	E_RepeatedgroupExtension = &file_test_test_proto_extDescs[33]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated goproto.proto.test.TestAllTypes.NestedMessage repeated_nested_message_extension = 48; }
+	// repeated goproto.proto.test.TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
 	E_RepeatedNestedMessageExtension = &file_test_test_proto_extDescs[34]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated goproto.proto.test.TestAllTypes.NestedEnum repeated_nested_enum_extension = 51; }
+	// repeated goproto.proto.test.TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
 	E_RepeatedNestedEnumExtension = &file_test_test_proto_extDescs[35]
-
-	// extend goproto.proto.test.TestAllExtensions { optional int32 default_int32_extension = 81; }
+	// optional int32 default_int32_extension = 81;
 	E_DefaultInt32Extension = &file_test_test_proto_extDescs[36]
-
-	// extend goproto.proto.test.TestAllExtensions { optional int64 default_int64_extension = 82; }
+	// optional int64 default_int64_extension = 82;
 	E_DefaultInt64Extension = &file_test_test_proto_extDescs[37]
-
-	// extend goproto.proto.test.TestAllExtensions { optional uint32 default_uint32_extension = 83; }
+	// optional uint32 default_uint32_extension = 83;
 	E_DefaultUint32Extension = &file_test_test_proto_extDescs[38]
-
-	// extend goproto.proto.test.TestAllExtensions { optional uint64 default_uint64_extension = 84; }
+	// optional uint64 default_uint64_extension = 84;
 	E_DefaultUint64Extension = &file_test_test_proto_extDescs[39]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sint32 default_sint32_extension = 85; }
+	// optional sint32 default_sint32_extension = 85;
 	E_DefaultSint32Extension = &file_test_test_proto_extDescs[40]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sint64 default_sint64_extension = 86; }
+	// optional sint64 default_sint64_extension = 86;
 	E_DefaultSint64Extension = &file_test_test_proto_extDescs[41]
-
-	// extend goproto.proto.test.TestAllExtensions { optional fixed32 default_fixed32_extension = 87; }
+	// optional fixed32 default_fixed32_extension = 87;
 	E_DefaultFixed32Extension = &file_test_test_proto_extDescs[42]
-
-	// extend goproto.proto.test.TestAllExtensions { optional fixed64 default_fixed64_extension = 88; }
+	// optional fixed64 default_fixed64_extension = 88;
 	E_DefaultFixed64Extension = &file_test_test_proto_extDescs[43]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sfixed32 default_sfixed32_extension = 89; }
+	// optional sfixed32 default_sfixed32_extension = 89;
 	E_DefaultSfixed32Extension = &file_test_test_proto_extDescs[44]
-
-	// extend goproto.proto.test.TestAllExtensions { optional sfixed64 default_sfixed64_extension = 80; }
+	// optional sfixed64 default_sfixed64_extension = 80;
 	E_DefaultSfixed64Extension = &file_test_test_proto_extDescs[45]
-
-	// extend goproto.proto.test.TestAllExtensions { optional float default_float_extension = 91; }
+	// optional float default_float_extension = 91;
 	E_DefaultFloatExtension = &file_test_test_proto_extDescs[46]
-
-	// extend goproto.proto.test.TestAllExtensions { optional double default_double_extension = 92; }
+	// optional double default_double_extension = 92;
 	E_DefaultDoubleExtension = &file_test_test_proto_extDescs[47]
-
-	// extend goproto.proto.test.TestAllExtensions { optional bool default_bool_extension = 93; }
+	// optional bool default_bool_extension = 93;
 	E_DefaultBoolExtension = &file_test_test_proto_extDescs[48]
-
-	// extend goproto.proto.test.TestAllExtensions { optional string default_string_extension = 94; }
+	// optional string default_string_extension = 94;
 	E_DefaultStringExtension = &file_test_test_proto_extDescs[49]
-
-	// extend goproto.proto.test.TestAllExtensions { optional bytes default_bytes_extension = 95; }
+	// optional bytes default_bytes_extension = 95;
 	E_DefaultBytesExtension = &file_test_test_proto_extDescs[50]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated int32 packed_int32_extension = 90; }
-	E_PackedInt32Extension = &file_test_test_proto_extDescs[51]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated int64 packed_int64_extension = 91; }
-	E_PackedInt64Extension = &file_test_test_proto_extDescs[52]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated uint32 packed_uint32_extension = 92; }
-	E_PackedUint32Extension = &file_test_test_proto_extDescs[53]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated uint64 packed_uint64_extension = 93; }
-	E_PackedUint64Extension = &file_test_test_proto_extDescs[54]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated sint32 packed_sint32_extension = 94; }
-	E_PackedSint32Extension = &file_test_test_proto_extDescs[55]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated sint64 packed_sint64_extension = 95; }
-	E_PackedSint64Extension = &file_test_test_proto_extDescs[56]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated fixed32 packed_fixed32_extension = 96; }
-	E_PackedFixed32Extension = &file_test_test_proto_extDescs[57]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated fixed64 packed_fixed64_extension = 97; }
-	E_PackedFixed64Extension = &file_test_test_proto_extDescs[58]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated sfixed32 packed_sfixed32_extension = 98; }
-	E_PackedSfixed32Extension = &file_test_test_proto_extDescs[59]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated sfixed64 packed_sfixed64_extension = 99; }
-	E_PackedSfixed64Extension = &file_test_test_proto_extDescs[60]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated float packed_float_extension = 100; }
-	E_PackedFloatExtension = &file_test_test_proto_extDescs[61]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated double packed_double_extension = 101; }
-	E_PackedDoubleExtension = &file_test_test_proto_extDescs[62]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated bool packed_bool_extension = 102; }
-	E_PackedBoolExtension = &file_test_test_proto_extDescs[63]
-
-	// extend goproto.proto.test.TestPackedExtensions { repeated goproto.proto.test.ForeignEnum packed_enum_extension = 103; }
-	E_PackedEnumExtension = &file_test_test_proto_extDescs[64]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated int32 unpacked_int32_extension = 90; }
-	E_UnpackedInt32Extension = &file_test_test_proto_extDescs[65]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated int64 unpacked_int64_extension = 91; }
-	E_UnpackedInt64Extension = &file_test_test_proto_extDescs[66]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated uint32 unpacked_uint32_extension = 92; }
-	E_UnpackedUint32Extension = &file_test_test_proto_extDescs[67]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated uint64 unpacked_uint64_extension = 93; }
-	E_UnpackedUint64Extension = &file_test_test_proto_extDescs[68]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated sint32 unpacked_sint32_extension = 94; }
-	E_UnpackedSint32Extension = &file_test_test_proto_extDescs[69]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated sint64 unpacked_sint64_extension = 95; }
-	E_UnpackedSint64Extension = &file_test_test_proto_extDescs[70]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated fixed32 unpacked_fixed32_extension = 96; }
-	E_UnpackedFixed32Extension = &file_test_test_proto_extDescs[71]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated fixed64 unpacked_fixed64_extension = 97; }
-	E_UnpackedFixed64Extension = &file_test_test_proto_extDescs[72]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated sfixed32 unpacked_sfixed32_extension = 98; }
-	E_UnpackedSfixed32Extension = &file_test_test_proto_extDescs[73]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated sfixed64 unpacked_sfixed64_extension = 99; }
-	E_UnpackedSfixed64Extension = &file_test_test_proto_extDescs[74]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated float unpacked_float_extension = 100; }
-	E_UnpackedFloatExtension = &file_test_test_proto_extDescs[75]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated double unpacked_double_extension = 101; }
-	E_UnpackedDoubleExtension = &file_test_test_proto_extDescs[76]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated bool unpacked_bool_extension = 102; }
-	E_UnpackedBoolExtension = &file_test_test_proto_extDescs[77]
-
-	// extend goproto.proto.test.TestUnpackedExtensions { repeated goproto.proto.test.ForeignEnum unpacked_enum_extension = 103; }
-	E_UnpackedEnumExtension = &file_test_test_proto_extDescs[78]
-
-	// extend goproto.proto.test.TestAllExtensions { optional string nested_string_extension = 1003; }
+	// optional string nested_string_extension = 1003;
 	E_TestNestedExtension_NestedStringExtension = &file_test_test_proto_extDescs[79]
-
-	// extend goproto.proto.test.TestAllExtensions { optional goproto.proto.test.TestRequired single = 1000; }
+	// optional goproto.proto.test.TestRequired single = 1000;
 	E_TestRequired_Single = &file_test_test_proto_extDescs[80]
-
-	// extend goproto.proto.test.TestAllExtensions { repeated goproto.proto.test.TestRequired multi = 1001; }
+	// repeated goproto.proto.test.TestRequired multi = 1001;
 	E_TestRequired_Multi = &file_test_test_proto_extDescs[81]
 )
+
+// Extension fields to TestPackedExtensions.
+var (
+	// repeated int32 packed_int32_extension = 90;
+	E_PackedInt32Extension = &file_test_test_proto_extDescs[51]
+	// repeated int64 packed_int64_extension = 91;
+	E_PackedInt64Extension = &file_test_test_proto_extDescs[52]
+	// repeated uint32 packed_uint32_extension = 92;
+	E_PackedUint32Extension = &file_test_test_proto_extDescs[53]
+	// repeated uint64 packed_uint64_extension = 93;
+	E_PackedUint64Extension = &file_test_test_proto_extDescs[54]
+	// repeated sint32 packed_sint32_extension = 94;
+	E_PackedSint32Extension = &file_test_test_proto_extDescs[55]
+	// repeated sint64 packed_sint64_extension = 95;
+	E_PackedSint64Extension = &file_test_test_proto_extDescs[56]
+	// repeated fixed32 packed_fixed32_extension = 96;
+	E_PackedFixed32Extension = &file_test_test_proto_extDescs[57]
+	// repeated fixed64 packed_fixed64_extension = 97;
+	E_PackedFixed64Extension = &file_test_test_proto_extDescs[58]
+	// repeated sfixed32 packed_sfixed32_extension = 98;
+	E_PackedSfixed32Extension = &file_test_test_proto_extDescs[59]
+	// repeated sfixed64 packed_sfixed64_extension = 99;
+	E_PackedSfixed64Extension = &file_test_test_proto_extDescs[60]
+	// repeated float packed_float_extension = 100;
+	E_PackedFloatExtension = &file_test_test_proto_extDescs[61]
+	// repeated double packed_double_extension = 101;
+	E_PackedDoubleExtension = &file_test_test_proto_extDescs[62]
+	// repeated bool packed_bool_extension = 102;
+	E_PackedBoolExtension = &file_test_test_proto_extDescs[63]
+	// repeated goproto.proto.test.ForeignEnum packed_enum_extension = 103;
+	E_PackedEnumExtension = &file_test_test_proto_extDescs[64]
+)
+
+// Extension fields to TestUnpackedExtensions.
+var (
+	// repeated int32 unpacked_int32_extension = 90;
+	E_UnpackedInt32Extension = &file_test_test_proto_extDescs[65]
+	// repeated int64 unpacked_int64_extension = 91;
+	E_UnpackedInt64Extension = &file_test_test_proto_extDescs[66]
+	// repeated uint32 unpacked_uint32_extension = 92;
+	E_UnpackedUint32Extension = &file_test_test_proto_extDescs[67]
+	// repeated uint64 unpacked_uint64_extension = 93;
+	E_UnpackedUint64Extension = &file_test_test_proto_extDescs[68]
+	// repeated sint32 unpacked_sint32_extension = 94;
+	E_UnpackedSint32Extension = &file_test_test_proto_extDescs[69]
+	// repeated sint64 unpacked_sint64_extension = 95;
+	E_UnpackedSint64Extension = &file_test_test_proto_extDescs[70]
+	// repeated fixed32 unpacked_fixed32_extension = 96;
+	E_UnpackedFixed32Extension = &file_test_test_proto_extDescs[71]
+	// repeated fixed64 unpacked_fixed64_extension = 97;
+	E_UnpackedFixed64Extension = &file_test_test_proto_extDescs[72]
+	// repeated sfixed32 unpacked_sfixed32_extension = 98;
+	E_UnpackedSfixed32Extension = &file_test_test_proto_extDescs[73]
+	// repeated sfixed64 unpacked_sfixed64_extension = 99;
+	E_UnpackedSfixed64Extension = &file_test_test_proto_extDescs[74]
+	// repeated float unpacked_float_extension = 100;
+	E_UnpackedFloatExtension = &file_test_test_proto_extDescs[75]
+	// repeated double unpacked_double_extension = 101;
+	E_UnpackedDoubleExtension = &file_test_test_proto_extDescs[76]
+	// repeated bool unpacked_bool_extension = 102;
+	E_UnpackedBoolExtension = &file_test_test_proto_extDescs[77]
+	// repeated goproto.proto.test.ForeignEnum unpacked_enum_extension = 103;
+	E_UnpackedEnumExtension = &file_test_test_proto_extDescs[78]
+)
+
 var File_test_test_proto protoreflect.FileDescriptor
 
 var file_test_test_proto_rawDesc = []byte{
diff --git a/reflect/protoregistry/testprotos/test.pb.go b/reflect/protoregistry/testprotos/test.pb.go
index a036013..2e10075 100644
--- a/reflect/protoregistry/testprotos/test.pb.go
+++ b/reflect/protoregistry/testprotos/test.pb.go
@@ -378,25 +378,23 @@
 		Filename:      "test.proto",
 	},
 }
+
+// Extension fields to Message1.
 var (
-	// extend testprotos.Message1 { optional string string_field = 11; }
+	// optional string string_field = 11;
 	E_StringField = &file_test_proto_extDescs[0]
-
-	// extend testprotos.Message1 { optional testprotos.Enum1 enum_field = 12; }
+	// optional testprotos.Enum1 enum_field = 12;
 	E_EnumField = &file_test_proto_extDescs[1]
-
-	// extend testprotos.Message1 { optional testprotos.Message2 message_field = 13; }
+	// optional testprotos.Message2 message_field = 13;
 	E_MessageField = &file_test_proto_extDescs[2]
-
-	// extend testprotos.Message1 { optional testprotos.Message2 message_field = 21; }
+	// optional testprotos.Message2 message_field = 21;
 	E_Message4_MessageField = &file_test_proto_extDescs[3]
-
-	// extend testprotos.Message1 { optional testprotos.Enum1 enum_field = 22; }
+	// optional testprotos.Enum1 enum_field = 22;
 	E_Message4_EnumField = &file_test_proto_extDescs[4]
-
-	// extend testprotos.Message1 { optional string string_field = 23; }
+	// optional string string_field = 23;
 	E_Message4_StringField = &file_test_proto_extDescs[5]
 )
+
 var File_test_proto protoreflect.FileDescriptor
 
 var file_test_proto_rawDesc = []byte{