Skip to content

Commit bc70718

Browse files
authored
fix(protogen): wrap bookName and sheetName when parsing special sheet mode (#365)
* fix(protogen): wrap bookName and sheetName when parsing special sheet mode * test(xerrors): add TestWrapKVSameKeyNotOverwritten to verify module preservation
1 parent 739e99d commit bc70718

4 files changed

Lines changed: 56 additions & 10 deletions

File tree

internal/protogen/protogen.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,9 @@ func (gen *Generator) convertTable(dir, filename string, checkProtoFileConflicts
476476
} else {
477477
worksheets, err := gen.parseSpecialSheetMode(ws.Options.Mode, ws, sheet, debugBookName, debugSheetName)
478478
if err != nil {
479-
return err
479+
return xerrors.WrapKV(err,
480+
xerrors.KeyBookName, debugBookName,
481+
xerrors.KeySheetName, debugSheetName)
480482
}
481483
// append parsed sheets to workbook
482484
bp.wb.Worksheets = append(bp.wb.Worksheets, worksheets...)

internal/protogen/sheet_mode.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func isEnumTypeBlockHeader(cols []string) bool {
5757
func parseEnumType(ws *internalpb.Worksheet, sheet *book.Sheet, parser book.SheetParser, gen *Generator) error {
5858
desc := &internalpb.EnumDescriptor{}
5959
if err := parser.Parse(desc, sheet); err != nil {
60-
return xerrors.Wrapf(err, "failed to parse enum type sheet (block): %s", sheet.Name)
60+
return err
6161
}
6262
prefix := strcase.FromContext(gen.ctx).ToScreamingSnake(ws.Name) + "_"
6363
for i, value := range desc.Values {
@@ -98,7 +98,7 @@ func isStructTypeBlockHeader(cols []string) bool {
9898
func extractStructTypeInfo(sheet *book.Sheet, typeName, parentFilename string, parser book.SheetParser, gen *Generator) error {
9999
desc := &internalpb.StructDescriptor{}
100100
if err := parser.Parse(desc, sheet); err != nil {
101-
return xerrors.Wrapf(err, "failed to parse struct type sheet: %s", sheet.Name)
101+
return err
102102
}
103103
firstFieldOptionName := ""
104104
if len(desc.Fields) != 0 {
@@ -118,7 +118,7 @@ func extractStructTypeInfo(sheet *book.Sheet, typeName, parentFilename string, p
118118
func parseStructType(ws *internalpb.Worksheet, sheet *book.Sheet, parser book.SheetParser, gen *Generator, debugBookName, debugSheetName string) error {
119119
desc := &internalpb.StructDescriptor{}
120120
if err := parser.Parse(desc, sheet); err != nil {
121-
return xerrors.Wrapf(err, "failed to parse struct type sheet (block): %s", sheet.Name)
121+
return err
122122
}
123123
bp := newTableParser("struct", "", "", gen)
124124
shHeader := &tableHeader{
@@ -185,7 +185,7 @@ func extractUnionTypeInfo(sheet *book.Sheet, typeName, parentFilename string, pa
185185

186186
desc := &internalpb.UnionDescriptor{}
187187
if err := parser.Parse(desc, sheet); err != nil {
188-
return xerrors.Wrapf(err, "failed to parse union type sheet: %s", sheet.Name)
188+
return err
189189
}
190190
// add types nested in union type
191191
for _, value := range desc.Values {
@@ -208,7 +208,7 @@ func extractUnionTypeInfo(sheet *book.Sheet, typeName, parentFilename string, pa
208208
func parseUnionType(ws *internalpb.Worksheet, sheet *book.Sheet, parser book.SheetParser, gen *Generator, debugBookName, debugSheetName string) error {
209209
desc := &internalpb.UnionDescriptor{}
210210
if err := parser.Parse(desc, sheet); err != nil {
211-
return xerrors.Wrapf(err, "failed to parse union type sheet: %s", sheet.Name)
211+
return err
212212
}
213213

214214
for i, value := range desc.Values {

xerrors/desc.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,16 @@ func (d *Desc) ErrString(withDebug bool) string {
158158
}
159159

160160
func (d *Desc) DebugString() string {
161-
str := ""
161+
str := new(strings.Builder)
162162
for _, key := range keys {
163163
val := d.fields[key]
164164
if val != nil {
165-
str += fmt.Sprintf("\t%s: %v\n", key, val)
165+
fmt.Fprintf(str, "\t%s: %v\n", key, val)
166166
}
167167
}
168-
return str
168+
return str.String()
169169
}
170170

171171
func (d *Desc) GetValue(key string) any {
172172
return d.fields[key]
173173
}
174-

xerrors/desc_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,48 @@ func TestNewDesc(t *testing.T) {
4747
})
4848
}
4949
}
50+
51+
func TestWrapKVSameKeyNotOverwritten(t *testing.T) {
52+
// Base error with KeyModule set to "first"
53+
baseErr := WrapKV(Newf("some error"), KeyModule, "first")
54+
55+
// Wrap with the same key KeyModule again
56+
wrappedOnce := WrapKV(baseErr, KeyModule, "second")
57+
58+
// Wrap with the same key KeyModule a third time
59+
wrappedTwice := WrapKV(wrappedOnce, KeyModule, "third")
60+
61+
tests := []struct {
62+
name string
63+
err error
64+
wantModule string
65+
}{
66+
{
67+
name: "single WrapKV sets Module",
68+
err: baseErr,
69+
wantModule: "first",
70+
},
71+
{
72+
name: "second WrapKV with same key does not overwrite",
73+
err: wrappedOnce,
74+
wantModule: "first",
75+
},
76+
{
77+
name: "third WrapKV with same key does not overwrite",
78+
err: wrappedTwice,
79+
wantModule: "first",
80+
},
81+
}
82+
for _, tt := range tests {
83+
t.Run(tt.name, func(t *testing.T) {
84+
desc := NewDesc(tt.err)
85+
if desc == nil {
86+
t.Fatal("NewDesc() returned nil")
87+
}
88+
gotModule := desc.GetValue(KeyModule)
89+
if gotModule != tt.wantModule {
90+
t.Errorf("KeyModule = %v, want %v", gotModule, tt.wantModule)
91+
}
92+
})
93+
}
94+
}

0 commit comments

Comments
 (0)