Skip to content

Commit ee8cda0

Browse files
authored
Merge pull request #122 from nilslice/pr-121
fix: nested message checks, bump proto parser module version
2 parents 409a348 + 20c36a1 commit ee8cda0

File tree

5 files changed

+343
-49
lines changed

5 files changed

+343
-49
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
protolock
22
pkg
33
node_modules
4+
logs
45
plugin-samples/plugin-sample-js/etc
56
plugin-samples/plugin-sample-js/plugin-sample-js
67
plugin-samples/plugin-sample-js/package-lock.json

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module github.com/nilslice/protolock
22

33
require (
44
github.com/davecgh/go-spew v1.1.1 // indirect
5-
github.com/emicklei/proto v1.6.13
5+
github.com/emicklei/proto v1.7.0
66
github.com/pmezard/go-difflib v1.0.0 // indirect
77
github.com/stretchr/testify v1.2.2
88
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3-
github.com/emicklei/proto v1.6.13 h1:8iuAuKbFmFhkmstObb0EV/Hrn9W+x6EuV1y5Da8Ye9E=
4-
github.com/emicklei/proto v1.6.13/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
3+
github.com/emicklei/proto v1.7.0 h1:5iEEswaKG9xfE8aqbERdx5MXV/QizS63UvYWga2v9FY=
4+
github.com/emicklei/proto v1.7.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A=
55
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
66
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
77
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=

rules.go

Lines changed: 75 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -901,6 +901,25 @@ func getReservedEnumFields(lock Protolock) (lockIDsMap, lockNamesMap) {
901901
return reservedIDMap, reservedNameMap
902902
}
903903

904+
func getFieldIDNameRecursive(fieldIDNameMap lockFieldIDNameMap, filepath Protopath, prefix string, msg Message) {
905+
msgName := prefix + msg.Name
906+
for _, field := range msg.Fields {
907+
if fieldIDNameMap[filepath][msgName] == nil {
908+
fieldIDNameMap[filepath][msgName] = make(map[int]string)
909+
}
910+
fieldIDNameMap[filepath][msgName][field.ID] = field.Name
911+
}
912+
for _, mp := range msg.Maps {
913+
if fieldIDNameMap[filepath][msgName] == nil {
914+
fieldIDNameMap[filepath][msgName] = make(map[int]string)
915+
}
916+
fieldIDNameMap[filepath][msgName][mp.Field.ID] = mp.Field.Name
917+
}
918+
for _, nestedMsg := range msg.Messages {
919+
getFieldIDNameRecursive(fieldIDNameMap, filepath, msgName + nestedPrefix, nestedMsg)
920+
}
921+
}
922+
904923
// getFieldsIDName gets all the fields mapped by the field ID to its name for
905924
// all messages.
906925
func getFieldsIDName(lock Protolock) lockFieldIDNameMap {
@@ -911,18 +930,7 @@ func getFieldsIDName(lock Protolock) lockFieldIDNameMap {
911930
fieldIDNameMap[def.Filepath] = make(map[string]map[int]string)
912931
}
913932
for _, msg := range def.Def.Messages {
914-
for _, field := range msg.Fields {
915-
if fieldIDNameMap[def.Filepath][msg.Name] == nil {
916-
fieldIDNameMap[def.Filepath][msg.Name] = make(map[int]string)
917-
}
918-
fieldIDNameMap[def.Filepath][msg.Name][field.ID] = field.Name
919-
}
920-
for _, mp := range msg.Maps {
921-
if fieldIDNameMap[def.Filepath][msg.Name] == nil {
922-
fieldIDNameMap[def.Filepath][msg.Name] = make(map[int]string)
923-
}
924-
fieldIDNameMap[def.Filepath][msg.Name][mp.Field.ID] = mp.Field.Name
925-
}
933+
getFieldIDNameRecursive(fieldIDNameMap, def.Filepath, "", msg)
926934
}
927935
}
928936

@@ -951,6 +959,25 @@ func getEnumFieldsIDName(lock Protolock) lockFieldIDNameMap {
951959
return fieldIDNameMap
952960
}
953961

962+
func getNonReservedFieldsRecursive(nameIDMap lockNamesMap, filepath Protopath, prefix string, msg Message) {
963+
msgName := prefix + msg.Name
964+
for _, field := range msg.Fields {
965+
if nameIDMap[filepath][msgName] == nil {
966+
nameIDMap[filepath][msgName] = make(map[string]int)
967+
}
968+
nameIDMap[filepath][msgName][field.Name] = field.ID
969+
}
970+
for _, mp := range msg.Maps {
971+
if nameIDMap[filepath][msgName] == nil {
972+
nameIDMap[filepath][msgName] = make(map[string]int)
973+
}
974+
nameIDMap[filepath][msgName][mp.Field.Name] = mp.Field.ID
975+
}
976+
for _, nestedMsg := range msg.Messages {
977+
getNonReservedFieldsRecursive(nameIDMap, filepath, msgName+nestedPrefix, nestedMsg)
978+
}
979+
}
980+
954981
// getNonReservedFields gets all the non-reserved field numbers and names, and
955982
// stashes them in a lockNamesMap to be checked against.
956983
func getNonReservedFields(lock Protolock) lockNamesMap {
@@ -961,18 +988,7 @@ func getNonReservedFields(lock Protolock) lockNamesMap {
961988
nameIDMap[def.Filepath] = make(map[string]map[string]int)
962989
}
963990
for _, msg := range def.Def.Messages {
964-
for _, field := range msg.Fields {
965-
if nameIDMap[def.Filepath][msg.Name] == nil {
966-
nameIDMap[def.Filepath][msg.Name] = make(map[string]int)
967-
}
968-
nameIDMap[def.Filepath][msg.Name][field.Name] = field.ID
969-
}
970-
for _, mp := range msg.Maps {
971-
if nameIDMap[def.Filepath][msg.Name] == nil {
972-
nameIDMap[def.Filepath][msg.Name] = make(map[string]int)
973-
}
974-
nameIDMap[def.Filepath][msg.Name][mp.Field.Name] = mp.Field.ID
975-
}
991+
getNonReservedFieldsRecursive(nameIDMap, def.Filepath, "", msg)
976992
}
977993
}
978994

@@ -1001,6 +1017,20 @@ func getNonReservedEnumFields(lock Protolock) lockNamesMap {
10011017
return nameIDMap
10021018
}
10031019

1020+
func getMapMapRecursive(nameTypeMap lockMapMap, filepath Protopath, prefix string, msg Message) {
1021+
msgName := prefix + msg.Name
1022+
for _, mp := range msg.Maps {
1023+
if nameTypeMap[filepath][msgName] == nil {
1024+
nameTypeMap[filepath][msgName] = make(map[string]Map)
1025+
}
1026+
nameTypeMap[filepath][msgName][mp.Field.Name] = mp
1027+
}
1028+
for _, nestedMsg := range msg.Messages {
1029+
1030+
getMapMapRecursive(nameTypeMap, filepath, msgName + nestedPrefix, nestedMsg)
1031+
}
1032+
}
1033+
10041034
// getMapMap gets all the map names and types, and stashes them in a
10051035
// lockMapMap to be checked against.
10061036
func getMapMap(lock Protolock) lockMapMap {
@@ -1011,18 +1041,32 @@ func getMapMap(lock Protolock) lockMapMap {
10111041
nameTypeMap[def.Filepath] = make(map[string]map[string]Map)
10121042
}
10131043
for _, msg := range def.Def.Messages {
1014-
for _, mp := range msg.Maps {
1015-
if nameTypeMap[def.Filepath][msg.Name] == nil {
1016-
nameTypeMap[def.Filepath][msg.Name] = make(map[string]Map)
1017-
}
1018-
nameTypeMap[def.Filepath][msg.Name][mp.Field.Name] = mp
1019-
}
1044+
getMapMapRecursive(nameTypeMap, def.Filepath, "", msg)
10201045
}
10211046
}
10221047

10231048
return nameTypeMap
10241049
}
10251050

1051+
func getFieldMapRecursive(nameTypeMap lockFieldMap, filepath Protopath, prefix string, msg Message) {
1052+
msgName := prefix + msg.Name
1053+
for _, field := range msg.Fields {
1054+
if nameTypeMap[filepath][msgName] == nil {
1055+
nameTypeMap[filepath][msgName] = make(map[string]Field)
1056+
}
1057+
nameTypeMap[filepath][msgName][field.Name] = field
1058+
}
1059+
for _, mp := range msg.Maps {
1060+
if nameTypeMap[filepath][msgName] == nil {
1061+
nameTypeMap[filepath][msgName] = make(map[string]Field)
1062+
}
1063+
nameTypeMap[filepath][msgName][mp.Field.Name] = mp.Field
1064+
}
1065+
for _, nestedMsg := range msg.Messages {
1066+
getFieldMapRecursive(nameTypeMap, filepath, msgName + nestedPrefix, nestedMsg)
1067+
}
1068+
}
1069+
10261070
// getFieldMap gets all the field names and types, and stashes them in a
10271071
// lockFieldMap to be checked against.
10281072
func getFieldMap(lock Protolock) lockFieldMap {
@@ -1033,18 +1077,7 @@ func getFieldMap(lock Protolock) lockFieldMap {
10331077
nameTypeMap[def.Filepath] = make(map[string]map[string]Field)
10341078
}
10351079
for _, msg := range def.Def.Messages {
1036-
for _, field := range msg.Fields {
1037-
if nameTypeMap[def.Filepath][msg.Name] == nil {
1038-
nameTypeMap[def.Filepath][msg.Name] = make(map[string]Field)
1039-
}
1040-
nameTypeMap[def.Filepath][msg.Name][field.Name] = field
1041-
}
1042-
for _, mp := range msg.Maps {
1043-
if nameTypeMap[def.Filepath][msg.Name] == nil {
1044-
nameTypeMap[def.Filepath][msg.Name] = make(map[string]Field)
1045-
}
1046-
nameTypeMap[def.Filepath][msg.Name][mp.Field.Name] = mp.Field
1047-
}
1080+
getFieldMapRecursive(nameTypeMap, def.Filepath, "", msg)
10481081
}
10491082
}
10501083

0 commit comments

Comments
 (0)