Skip to content

Commit a255768

Browse files
authored
fix(extgen): better error handling (#2370)
Superseeds #2351. Use `errors.Join()` to preserve all errors in extgen.
1 parent bcc944a commit a255768

6 files changed

Lines changed: 17 additions & 27 deletions

File tree

internal/extgen/cfile_namespace_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ func (m *MySuperClass) Test() string {
6666
tmpfile, err := os.CreateTemp("", "test_cfile_namespace_*.go")
6767
require.NoError(t, err, "Failed to create temp file")
6868
defer func() {
69-
err := os.Remove(tmpfile.Name())
70-
assert.NoError(t, err, "Failed to remove temp file: %v", err)
69+
require.NoError(t, os.Remove(tmpfile.Name()), "Failed to remove temp file")
7170
}()
7271

7372
_, err = tmpfile.Write([]byte(content))

internal/extgen/classparser.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package extgen
22

33
import (
44
"bufio"
5+
"errors"
56
"fmt"
67
"go/ast"
78
"go/parser"
@@ -211,10 +212,7 @@ func (cp *classParser) parseMethods(filename string) (methods []phpClassMethod,
211212
}
212213

213214
defer func() {
214-
e := file.Close()
215-
if err != nil {
216-
err = e
217-
}
215+
err = errors.Join(err, file.Close())
218216
}()
219217

220218
scanner := bufio.NewScanner(file)

internal/extgen/constparser.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package extgen
22

33
import (
44
"bufio"
5+
"errors"
56
"fmt"
67
"os"
78
"regexp"
@@ -20,11 +21,9 @@ func (cp *ConstantParser) parse(filename string) (constants []phpConstant, err e
2021
if err != nil {
2122
return nil, err
2223
}
24+
2325
defer func() {
24-
e := file.Close()
25-
if err == nil {
26-
err = e
27-
}
26+
err = errors.Join(err, file.Close())
2827
}()
2928

3029
scanner := bufio.NewScanner(file)

internal/extgen/funcparser.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package extgen
22

33
import (
44
"bufio"
5+
"errors"
56
"fmt"
67
"os"
78
"regexp"
@@ -19,11 +20,9 @@ func (fp *FuncParser) parse(filename string) (functions []phpFunction, err error
1920
if err != nil {
2021
return nil, err
2122
}
23+
2224
defer func() {
23-
e := file.Close()
24-
if err == nil {
25-
err = e
26-
}
25+
err = errors.Join(err, file.Close())
2726
}()
2827

2928
scanner := bufio.NewScanner(file)

internal/extgen/namespace_test.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"os"
55
"testing"
66

7-
"github.com/stretchr/testify/assert"
87
"github.com/stretchr/testify/require"
98
)
109

@@ -58,8 +57,7 @@ func main() {}`,
5857
tmpfile, err := os.CreateTemp("", "test_namespace_*.go")
5958
require.NoError(t, err, "Failed to create temp file")
6059
defer func() {
61-
err := os.Remove(tmpfile.Name())
62-
assert.NoError(t, err, "Failed to remove temp file: %v", err)
60+
require.NoError(t, os.Remove(tmpfile.Name()), "Failed to remove temp file")
6361
}()
6462

6563
_, err = tmpfile.Write([]byte(tt.content))
@@ -98,9 +96,7 @@ const TEST_CONSTANT = "test_value"
9896
tmpfile, err := os.CreateTemp("", "test_generator_namespace_*.go")
9997
require.NoError(t, err, "Failed to create temp file")
10098
defer func() {
101-
if err := os.Remove(tmpfile.Name()); err != nil {
102-
t.Logf("Failed to remove temp file: %v", err)
103-
}
99+
require.NoError(t, os.Remove(tmpfile.Name()), "Failed to remove temp file")
104100
}()
105101

106102
_, err = tmpfile.Write([]byte(content))

internal/extgen/nsparser.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package extgen
22

33
import (
44
"bufio"
5+
"errors"
56
"fmt"
67
"os"
78
"regexp"
@@ -12,20 +13,17 @@ type NamespaceParser struct{}
1213

1314
var namespaceRegex = regexp.MustCompile(`//\s*export_php:namespace\s+(.+)`)
1415

15-
func (np *NamespaceParser) parse(filename string) (string, error) {
16+
func (np *NamespaceParser) parse(filename string) (foundNamespace string, err error) {
1617
file, err := os.Open(filename)
1718
if err != nil {
1819
return "", err
1920
}
21+
2022
defer func() {
21-
if err := file.Close(); err != nil {
22-
fmt.Printf("Error closing file %s: %v\n", filename, err)
23-
}
23+
err = errors.Join(err, file.Close())
2424
}()
2525

26-
var foundNamespace string
27-
var lineNumber int
28-
var foundLineNumber int
26+
var lineNumber, foundLineNumber int
2927

3028
scanner := bufio.NewScanner(file)
3129
for scanner.Scan() {
@@ -36,6 +34,7 @@ func (np *NamespaceParser) parse(filename string) (string, error) {
3634
if foundNamespace != "" {
3735
return "", fmt.Errorf("multiple namespace declarations found: first at line %d, second at line %d", foundLineNumber, lineNumber)
3836
}
37+
3938
foundNamespace = namespace
4039
foundLineNumber = lineNumber
4140
}

0 commit comments

Comments
 (0)