From dfea9bf12896941ec037908415c5cb7e444055af Mon Sep 17 00:00:00 2001 From: Ben Kraft Date: Fri, 10 Apr 2020 14:30:56 -0700 Subject: [PATCH] push type-name into types.go --- example/generated.go | 4 ++-- generate/generate.go | 7 ++++--- generate/operation.go.tmpl | 2 +- generate/types.go | 3 ++- generate/types_test.go | 14 +++++++------- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/example/generated.go b/example/generated.go index d72e24e6..83376e8d 100644 --- a/example/generated.go +++ b/example/generated.go @@ -8,7 +8,7 @@ import ( "github.com/Khan/genql/graphql" ) -type getViewerResponse = struct { +type getViewerResponse struct { Viewer struct { MyName *string } `json:"viewer"` @@ -26,7 +26,7 @@ query getViewer { return &retval, err } -type getUserResponse = struct { +type getUserResponse struct { User *struct { TheirName *string `json:"theirName"` } `json:"user"` diff --git a/generate/generate.go b/generate/generate.go index f1d8b1c6..cf36d220 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -111,7 +111,9 @@ func fromASTOperation(op *ast.OperationDefinition, schema *ast.Schema) (operatio } } - typ, err := typeForOperation(op, schema) + // TODO: configure ResponseName format + responseName := op.Name + "Response" + typ, err := typeForOperation(responseName, op, schema) if err != nil { return operation{}, fmt.Errorf("could not compute return-type for query: %v", err) } @@ -124,8 +126,7 @@ func fromASTOperation(op *ast.OperationDefinition, schema *ast.Schema) (operatio Body: "\n" + builder.String(), Args: args, - // TODO: configure ResponseName format - ResponseName: op.Name + "Response", + ResponseName: responseName, ResponseType: typ, }, nil } diff --git a/generate/operation.go.tmpl b/generate/operation.go.tmpl index 881c00d1..f8978e54 100644 --- a/generate/operation.go.tmpl +++ b/generate/operation.go.tmpl @@ -9,7 +9,7 @@ import ( ) {{range .Operations}} -type {{.ResponseName}} = {{.ResponseType}} +{{.ResponseType}} {{.Doc}} func {{.Name}}(ctx context.Context, client *graphql.Client{{range .Args}}, {{.GoName}} {{.GoType}}{{end}}) (*{{.ResponseName}}, error) { diff --git a/generate/types.go b/generate/types.go index 25106bd3..cdb7596b 100644 --- a/generate/types.go +++ b/generate/types.go @@ -25,8 +25,9 @@ func (builder *typeBuilder) baseTypeForOperation(operation ast.Operation) *ast.D } } -func typeForOperation(operation *ast.OperationDefinition, schema *ast.Schema) (string, error) { +func typeForOperation(name string, operation *ast.OperationDefinition, schema *ast.Schema) (string, error) { builder := &typeBuilder{schema: schema} + fmt.Fprintf(builder, "type %s ", name) err := builder.writeTypedef( builder.baseTypeForOperation(operation.Operation), operation.SelectionSet) return builder.String(), err diff --git a/generate/types_test.go b/generate/types_test.go index 2e19457b..df54d770 100644 --- a/generate/types_test.go +++ b/generate/types_test.go @@ -48,7 +48,7 @@ func TestTypeForOperation(t *testing.T) { }{{ "SimpleQuery", `{ user { id } }`, - `struct{ + `type Response struct{ User *struct { Id string ` + "`json:\"id\"`" + ` } ` + "`json:\"user\"`" + ` @@ -56,7 +56,7 @@ func TestTypeForOperation(t *testing.T) { }, { "QueryWithAlias", `{ User: user { ID: id } }`, - `struct{ + `type Response struct{ User *struct { ID string } @@ -73,7 +73,7 @@ func TestTypeForOperation(t *testing.T) { EmailsWithNullsOrNull: emailsWithNullsOrNull } }`, - `struct{ + `type Response struct{ User *struct { Emails []string EmailsOrNull []string @@ -91,7 +91,7 @@ func TestTypeForOperation(t *testing.T) { } } }`, - `struct{ + `type Response struct{ User *struct { AuthMethods []struct { Provider *string @@ -104,7 +104,7 @@ func TestTypeForOperation(t *testing.T) { for _, test := range tests { test := test t.Run(test.name, func(t *testing.T) { - expectedGoType, err := gofmt("type Response " + test.expectedGoType) + expectedGoType, err := gofmt(test.expectedGoType) if err != nil { t.Fatal(err) } @@ -118,13 +118,13 @@ func TestTypeForOperation(t *testing.T) { t.Fatalf("got %v operations, want 1", len(queryDoc.Operations)) } - goType, err := typeForOperation(queryDoc.Operations[0], schema) + goType, err := typeForOperation("Response", queryDoc.Operations[0], schema) if err != nil { t.Error(err) } // gofmt before comparing. - goType, err = gofmt("type Response " + goType) + goType, err = gofmt(goType) if err != nil { t.Error(err) }