Skip to content

Commit 79cc85e

Browse files
authored
Merge pull request #21 from seitau/fix/multiple-types-import
fix: multiple types import
2 parents 8e117ec + a97e85e commit 79cc85e

File tree

1 file changed

+33
-30
lines changed

1 file changed

+33
-30
lines changed

cmd/gonstructor/gonstructor.go

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,12 @@ func main() {
7979
log.Fatal(fmt.Errorf("[error] failed to parse a file: %w", err))
8080
}
8181

82-
alreadyOpenedWithTruncFilesSet := map[string]bool{}
83-
84-
fileHeaderGenerated := false
85-
for _, typeName := range typeNames {
82+
var (
83+
alreadyOpenedWithTruncFilesSet = map[string]bool{}
84+
fileHeaderGenerated = false
85+
rootStmt = g.NewRoot()
86+
)
87+
for i, typeName := range typeNames {
8688
fields, err := constructor.CollectConstructorFieldsFromAST(typeName, astFiles)
8789
if err != nil {
8890
log.Fatal(fmt.Errorf("[error] failed to collect fields from files: %w", err))
@@ -96,8 +98,6 @@ func main() {
9698
}
9799
}
98100

99-
rootStmt := g.NewRoot()
100-
101101
if !fileHeaderGenerated {
102102
rootStmt = rootStmt.AddStatements(
103103
g.NewComment(fmt.Sprintf(" Code generated by gonstructor %s; DO NOT EDIT.", strings.Join(os.Args[1:], " "))),
@@ -140,40 +140,43 @@ func main() {
140140
if *withGetter {
141141
rootStmt = rootStmt.AddStatements(internal.GenerateGetters(typeName, fields))
142142
}
143-
144-
code, err := rootStmt.Goimports().EnableSyntaxChecking().Generate(0)
145-
if err != nil {
146-
log.Fatal(fmt.Errorf("[error] failed to generate code: %w", err))
143+
if i != len(typeNames)-1 {
144+
rootStmt = rootStmt.AddStatements(g.NewNewline())
147145
}
146+
}
148147

149-
err = func() error {
150-
fileName := getFilenameToGenerate(typeName, *output, args)
148+
code, err := rootStmt.Goimports().EnableSyntaxChecking().Generate(0)
149+
if err != nil {
150+
log.Fatal(fmt.Errorf("[error] failed to generate code: %w", err))
151+
}
151152

152-
fileOpenFlag := os.O_APPEND | os.O_WRONLY | os.O_CREATE
153-
if !alreadyOpenedWithTruncFilesSet[fileName] {
154-
// truncate and make a blank file
155-
fileOpenFlag = os.O_TRUNC | os.O_WRONLY | os.O_CREATE
156-
}
153+
err = func() error {
154+
fileName := getFilenameToGenerate(typeNames[0], *output, args)
157155

158-
f, err := os.OpenFile(fileName, fileOpenFlag, 0644)
159-
if err != nil {
160-
return fmt.Errorf("[error] failed open a file to output the generated code: %w", err)
161-
}
156+
fileOpenFlag := os.O_APPEND | os.O_WRONLY | os.O_CREATE
157+
if !alreadyOpenedWithTruncFilesSet[fileName] {
158+
// truncate and make a blank file
159+
fileOpenFlag = os.O_TRUNC | os.O_WRONLY | os.O_CREATE
160+
}
162161

163-
defer f.Close()
162+
f, err := os.OpenFile(fileName, fileOpenFlag, 0644)
163+
if err != nil {
164+
return fmt.Errorf("[error] failed open a file to output the generated code: %w", err)
165+
}
164166

165-
alreadyOpenedWithTruncFilesSet[fileName] = true
167+
defer f.Close()
166168

167-
_, err = f.WriteString(code)
168-
if err != nil {
169-
return fmt.Errorf("[error] failed output generated code to a file: %w", err)
170-
}
169+
alreadyOpenedWithTruncFilesSet[fileName] = true
171170

172-
return nil
173-
}()
171+
_, err = f.WriteString(code)
174172
if err != nil {
175-
log.Fatal(err)
173+
return fmt.Errorf("[error] failed output generated code to a file: %w", err)
176174
}
175+
176+
return nil
177+
}()
178+
if err != nil {
179+
log.Fatal(err)
177180
}
178181
}
179182

0 commit comments

Comments
 (0)