Skip to content

Commit b1a18ba

Browse files
committed
fix(poet): add Multiline option to SliceLit for proper formatting
Update SliceLit to support multi-line formatting similar to StructLit. This ensures AllEnumTypeValues() functions generate properly formatted slice literals with each value on its own line. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 1f2aefa commit b1a18ba

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

internal/codegen/golang/generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (g *CodeGenerator) addModelsCode(f *poet.File) {
560560
Name: fmt.Sprintf("All%sValues", enum.Name),
561561
Results: []poet.Param{{Type: "[]" + enum.Name}},
562562
Stmts: []poet.Stmt{poet.Return{Values: []string{
563-
poet.SliceLit{Type: enum.Name, Values: enumValues}.Render(),
563+
poet.SliceLit{Type: enum.Name, Multiline: true, Values: enumValues}.Render(),
564564
}}},
565565
})
566566
}

internal/poet/ast.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -313,20 +313,33 @@ func (s StructLit) Render() string {
313313

314314
// SliceLit represents a slice literal expression.
315315
type SliceLit struct {
316-
Type string // Element type (e.g., "interface{}")
317-
Values []string // Elements
316+
Type string // Element type (e.g., "interface{}")
317+
Multiline bool // If true, always use multi-line format
318+
Values []string // Elements
318319
}
319320

320321
func (s SliceLit) Render() string {
321322
var b strings.Builder
322323
b.WriteString("[]")
323324
b.WriteString(s.Type)
324325
b.WriteString("{")
325-
for i, v := range s.Values {
326-
if i > 0 {
327-
b.WriteString(", ")
326+
if len(s.Values) <= 3 && !s.Multiline {
327+
// Compact format for small slice literals
328+
for i, v := range s.Values {
329+
if i > 0 {
330+
b.WriteString(", ")
331+
}
332+
b.WriteString(v)
328333
}
329-
b.WriteString(v)
334+
} else if len(s.Values) > 0 {
335+
// Multi-line format for larger slice literals or when explicitly requested
336+
b.WriteString("\n")
337+
for _, v := range s.Values {
338+
b.WriteString("\t\t")
339+
b.WriteString(v)
340+
b.WriteString(",\n")
341+
}
342+
b.WriteString("\t")
330343
}
331344
b.WriteString("}")
332345
return b.String()

0 commit comments

Comments
 (0)