Skip to content

Commit 2613abf

Browse files
authored
codegen: fix scalar error message and parse directories recursively (#175)
1 parent 3ad3962 commit 2613abf

File tree

8 files changed

+35
-18
lines changed

8 files changed

+35
-18
lines changed

cmd/hasura-ndc-go/command/internal/connector.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"os"
1212
"path"
1313
"runtime/trace"
14+
"slices"
1415
"strings"
1516

1617
"github.com/hasura/ndc-sdk-go/schema"
@@ -221,6 +222,8 @@ func (cg *connectorGenerator) renderOperationHandlers(values []string) string {
221222
}
222223
var sb strings.Builder
223224
sb.WriteRune('{')
225+
slices.Sort(values)
226+
224227
for i, v := range values {
225228
if i > 0 {
226229
sb.WriteString(", ")
@@ -402,7 +405,7 @@ var enumValues_%s = []%s{%s}
402405
func Parse%s(input string) (%s, error) {
403406
result := %s(input)
404407
if !slices.Contains(enumValues_%s, result) {
405-
return %s(""), errors.New("failed to parse %s, expect one of %s")
408+
return %s(""), errors.New("failed to parse %s, expect one of [%s]")
406409
}
407410
408411
return result, nil
@@ -446,7 +449,7 @@ func (s *%s) FromValue(value any) error {
446449
*s = result
447450
return nil
448451
}
449-
`, pascalName, scalarKey, pascalName, scalarKey, scalarKey, pascalName, scalarKey, scalarKey, strings.Join(enumConstants, ", "),
452+
`, pascalName, scalarKey, pascalName, scalarKey, scalarKey, pascalName, scalarKey, scalarKey, strings.Join(scalarRep.OneOf, ", "),
450453
scalarKey, pascalName, scalarKey, pascalName, scalarKey, pascalName,
451454
))
452455
default:

cmd/hasura-ndc-go/command/internal/connector_test.go

+17-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package internal
22

33
import (
44
"encoding/json"
5+
"log"
56
"os"
67
"path"
8+
"path/filepath"
79
"regexp"
810
"strings"
911
"testing"
@@ -50,7 +52,7 @@ func TestConnectorGeneration(t *testing.T) {
5052
BasePath: "./testdata/subdir",
5153
ConnectorDir: "connector",
5254
ModuleName: "github.com/hasura/ndc-codegen-subdir-test",
53-
Directories: []string{"connector/functions"},
55+
Directories: []string{"connector"},
5456
},
5557
{
5658
Name: "snake_case",
@@ -116,7 +118,20 @@ func TestConnectorGeneration(t *testing.T) {
116118
for _, td := range tc.Directories {
117119
expectedFunctionTypesBytes, err := os.ReadFile(path.Join("expected", "functions.go.tmpl"))
118120
if err == nil {
119-
functionTypesBytes, err := os.ReadFile(path.Join("source", td, "types.generated.go"))
121+
var generatedPath string
122+
for _, globPath := range []string{filepath.Join("source", td, "types.generated.go"), filepath.Join("source", td, "**", "types.generated.go")} {
123+
goFiles, err := filepath.Glob(globPath)
124+
assert.NilError(t, err)
125+
log.Println(globPath, goFiles)
126+
if len(goFiles) > 0 {
127+
generatedPath = goFiles[0]
128+
129+
break
130+
}
131+
}
132+
133+
assert.Assert(t, generatedPath != "")
134+
functionTypesBytes, err := os.ReadFile(generatedPath)
120135
assert.NilError(t, err)
121136
expected := formatTextContent(string(expectedFunctionTypesBytes))
122137
reality := formatTextContent(string(functionTypesBytes))

cmd/hasura-ndc-go/command/internal/schema_parser.go

+8-10
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,26 @@ func parseRawConnectorSchemaFromGoCode(ctx context.Context, moduleName string, f
6969
tempDirs = append(tempDirs, entry.Name())
7070
}
7171
}
72-
var directories []string
72+
73+
directories := make(map[string]bool)
7374
for _, dir := range tempDirs {
7475
for _, globPath := range []string{path.Join(filePath, dir, "*.go"), path.Join(filePath, dir, "**", "*.go")} {
7576
goFiles, err := filepath.Glob(globPath)
7677
if err != nil {
7778
return nil, fmt.Errorf("failed to read subdirectories of %s/%s: %w", filePath, dir, err)
7879
}
79-
// cleanup types.generated.go files
80-
fileCount := 0
80+
8181
for _, fp := range goFiles {
8282
if !strings.HasSuffix(fp, typeMethodsOutputFile) {
83-
fileCount++
83+
directories[filepath.Dir(fp)] = true
8484
continue
8585
}
86-
if err := os.Remove(fp); err != nil {
86+
87+
// cleanup types.generated.go files
88+
if err := os.Remove(fp); err != nil && !os.IsNotExist(err) {
8789
return nil, fmt.Errorf("failed to delete %s: %w", fp, err)
8890
}
8991
}
90-
if fileCount > 0 {
91-
directories = append(directories, dir)
92-
break
93-
}
9492
}
9593
}
9694

@@ -99,7 +97,7 @@ func parseRawConnectorSchemaFromGoCode(ctx context.Context, moduleName string, f
9997

10098
var packageList []*packages.Package
10199
fset := token.NewFileSet()
102-
for _, folder := range directories {
100+
for folder := range directories {
103101
_, parseCodeTask := trace.NewTask(ctx, fmt.Sprintf("parse_%s_code", folder))
104102
folderPath := path.Join(filePath, folder)
105103
cfg := &packages.Config{

cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/Dockerfile.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# build context at repo root: docker build -f Dockerfile .
2-
FROM golang:1.22 AS builder
2+
FROM golang:1.23 AS builder
33

44
WORKDIR /app
55
COPY go.mod go.sum ./

cmd/hasura-ndc-go/command/internal/templates/new/.hasura-connector/connector-metadata.yaml.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ supportedEnvironmentVariables:
1111
required: false
1212
commands:
1313
update: hasura-ndc-go update
14+
upgradeConfiguration: hasura-ndc-go update
1415
cliPlugin:
1516
name: ndc-go
1617
version: {{.Version}}

cmd/hasura-ndc-go/command/internal/testdata/basic/expected/functions.go.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ var enumValues_SomeEnum = []SomeEnum{SomeEnumFoo, SomeEnumBar}
11421142
func ParseSomeEnum(input string) (SomeEnum, error) {
11431143
result := SomeEnum(input)
11441144
if !slices.Contains(enumValues_SomeEnum, result) {
1145-
return SomeEnum(""), errors.New("failed to parse SomeEnum, expect one of SomeEnumFoo, SomeEnumBar")
1145+
return SomeEnum(""), errors.New("failed to parse SomeEnum, expect one of [foo, bar]")
11461146
}
11471147

11481148
return result, nil

cmd/hasura-ndc-go/command/internal/testdata/snake_case/expected/functions.go.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ var enumValues_SomeEnum = []SomeEnum{SomeEnumFoo, SomeEnumBar}
836836
func ParseSomeEnum(input string) (SomeEnum, error) {
837837
result := SomeEnum(input)
838838
if !slices.Contains(enumValues_SomeEnum, result) {
839-
return SomeEnum(""), errors.New("failed to parse SomeEnum, expect one of SomeEnumFoo, SomeEnumBar")
839+
return SomeEnum(""), errors.New("failed to parse SomeEnum, expect one of [foo, bar]")
840840
}
841841

842842
return result, nil

example/codegen/types/types.generated.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)