Skip to content

Commit

Permalink
Add pubfuncs option to edgeql-go (#317)
Browse files Browse the repository at this point in the history
working on #287
  • Loading branch information
fmoor authored Jun 26, 2024
1 parent dabd2d1 commit 9bcc75b
Show file tree
Hide file tree
Showing 47 changed files with 1,410 additions and 68 deletions.
6 changes: 5 additions & 1 deletion cmd/edgeql-go/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@
//
// Typically this process would be run using [go generate] like this:
//
// //go:generate edgeql-go
// //go:generate edgeql-go -pubfuncs
//
// For a complete list of options:
//
// edgeql-go -help
//
// [pinning tool dependencies]: https://github.com/golang/go/wiki/Modules#how-can-i-track-tool-dependencies-for-a-module
// [go generate]: https://go.dev/blog/generate
Expand Down
5 changes: 5 additions & 0 deletions cmd/edgeql-go/endtoend_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ var tests = []struct {
directory: "testdata/mixedcaps",
args: []string{"-mixedcaps"},
},
{
description: "invoke edgeql-go with -pubfuncs",
directory: "testdata/pubfuncs",
args: []string{"-pubfuncs"},
},
}

func TestMain(m *testing.M) {
Expand Down
48 changes: 24 additions & 24 deletions cmd/edgeql-go/gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func generateType(
desc descriptor.Descriptor,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var (
err error
Expand All @@ -38,11 +38,11 @@ func generateType(

switch desc.Type {
case descriptor.Set, descriptor.Array:
types, imports, err = generateSlice(desc, path, mixedCaps)
types, imports, err = generateSlice(desc, path, cmdCfg)
case descriptor.Object, descriptor.NamedTuple:
types, imports, err = generateObject(desc, required, path, mixedCaps)
types, imports, err = generateObject(desc, required, path, cmdCfg)
case descriptor.Tuple:
types, imports, err = generateTuple(desc, required, path, mixedCaps)
types, imports, err = generateTuple(desc, required, path, cmdCfg)
case descriptor.BaseScalar, descriptor.Scalar, descriptor.Enum:
types, imports, err = generateBaseScalar(desc, required)
case descriptor.Range:
Expand All @@ -65,7 +65,7 @@ func generateTypeV2(
desc *descriptor.V2,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var (
err error
Expand All @@ -75,11 +75,11 @@ func generateTypeV2(

switch desc.Type {
case descriptor.Set, descriptor.Array:
types, imports, err = generateSliceV2(desc, path, mixedCaps)
types, imports, err = generateSliceV2(desc, path, cmdCfg)
case descriptor.Object, descriptor.NamedTuple:
types, imports, err = generateObjectV2(desc, required, path, mixedCaps)
types, imports, err = generateObjectV2(desc, required, path, cmdCfg)
case descriptor.Tuple:
types, imports, err = generateTupleV2(desc, required, path, mixedCaps)
types, imports, err = generateTupleV2(desc, required, path, cmdCfg)
case descriptor.BaseScalar, descriptor.Scalar, descriptor.Enum:
types, imports, err = generateBaseScalarV2(desc, required)
case descriptor.Range:
Expand Down Expand Up @@ -181,13 +181,13 @@ func generateRangeV2(
func generateSlice(
desc descriptor.Descriptor,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
types, imports, err := generateType(
desc.Fields[0].Desc,
true,
path,
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
Expand All @@ -200,13 +200,13 @@ func generateSlice(
func generateSliceV2(
desc *descriptor.V2,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
types, imports, err := generateTypeV2(
&desc.Fields[0].Desc,
true,
path,
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
Expand All @@ -220,7 +220,7 @@ func generateObject(
desc descriptor.Descriptor,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var imports []string
typ := goStruct{Name: nameFromPath(path), Required: required}
Expand All @@ -231,15 +231,15 @@ func generateObject(
field.Desc,
field.Required,
append(path, field.Name),
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
}

tag := fmt.Sprintf(`edgedb:"%s"`, field.Name)
name := field.Name
if mixedCaps {
if cmdCfg.mixedCaps {
name = snakeToUpperMixedCase(name)
}

Expand All @@ -260,7 +260,7 @@ func generateObjectV2(
desc *descriptor.V2,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var imports []string
typ := goStruct{Name: nameFromPath(path), Required: required}
Expand All @@ -271,15 +271,15 @@ func generateObjectV2(
&field.Desc,
field.Required,
append(path, field.Name),
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
}

tag := fmt.Sprintf(`edgedb:"%s"`, field.Name)
name := field.Name
if mixedCaps {
if cmdCfg.mixedCaps {
name = snakeToUpperMixedCase(name)
}

Expand All @@ -300,7 +300,7 @@ func generateTuple(
desc descriptor.Descriptor,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var imports []string
typ := &goStruct{Name: nameFromPath(path), Required: required}
Expand All @@ -311,7 +311,7 @@ func generateTuple(
field.Desc,
field.Required,
append(path, field.Name),
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
Expand All @@ -320,7 +320,7 @@ func generateTuple(
name := field.Name
if name != "" && name[0] >= '0' && name[0] <= '9' {
name = fmt.Sprintf("Element%s", name)
} else if mixedCaps {
} else if cmdCfg.mixedCaps {
name = snakeToUpperMixedCase(name)
}

Expand All @@ -341,7 +341,7 @@ func generateTupleV2(
desc *descriptor.V2,
required bool,
path []string,
mixedCaps bool,
cmdCfg *cmdConfig,
) ([]goType, []string, error) {
var imports []string
typ := &goStruct{Name: nameFromPath(path), Required: required}
Expand All @@ -352,7 +352,7 @@ func generateTupleV2(
&field.Desc,
field.Required,
append(path, field.Name),
mixedCaps,
cmdCfg,
)
if err != nil {
return nil, nil, err
Expand All @@ -361,7 +361,7 @@ func generateTupleV2(
name := field.Name
if name != "" && name[0] >= '0' && name[0] <= '9' {
name = fmt.Sprintf("Element%s", name)
} else if mixedCaps {
} else if cmdCfg.mixedCaps {
name = snakeToUpperMixedCase(name)
}

Expand Down
14 changes: 13 additions & 1 deletion cmd/edgeql-go/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ func usage() {
flag.PrintDefaults()
}

type cmdConfig struct {
mixedCaps bool
pubfuncs bool
}

func main() {
log.SetFlags(0)
log.SetPrefix("edgeql-go: ")
Expand All @@ -66,8 +71,15 @@ func main() {
mixedCaps := flag.Bool("mixedcaps", false,
"Change snake_case names in shapes "+
"to MixedCaps names in go structs")
pubfuncs := flag.Bool("pubfuncs", false,
"Make generated functions public.")
flag.Parse()

cfg := &cmdConfig{
mixedCaps: *mixedCaps,
pubfuncs: *pubfuncs,
}

timer := time.AfterFunc(200*time.Millisecond, func() {
log.Println("connecting to EdgeDB")
})
Expand All @@ -92,7 +104,7 @@ func main() {
go func(queryFile string) {
defer wg.Done()
outFile := getOutFile(queryFile)
q, e := newQuery(ctx, c, queryFile, outFile, *mixedCaps)
q, e := newQuery(ctx, c, queryFile, outFile, cfg)
if e != nil {
log.Fatalf("processing %s: %s", queryFile, e)
}
Expand Down
Loading

0 comments on commit 9bcc75b

Please sign in to comment.