From 89fe78e11ae1ca78743c2518b7c6729bd2e9f2bb Mon Sep 17 00:00:00 2001 From: Ben Kraft Date: Thu, 15 Apr 2021 18:00:31 -0700 Subject: [PATCH] bit more nibbling at types.go --- generate/types.go | 21 ++++++++++----------- generate/unmarshal.go | 4 ++-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/generate/types.go b/generate/types.go index 0f92ef8..0efcd85 100644 --- a/generate/types.go +++ b/generate/types.go @@ -8,7 +8,6 @@ import ( ) type typeBuilder struct { - typeNamePrefix string strings.Builder *generator } @@ -118,8 +117,8 @@ func (g *generator) addTypeForDefinition( // Otherwise, build the type, put that in the type-map, and return its // name. - builder := &typeBuilder{typeNamePrefix: namePrefix, generator: g} - err = builder.writeTypedef(name, typ, pos, fields, options) + builder := &typeBuilder{generator: g} + err = builder.writeTypedef(name, namePrefix, typ, pos, fields, options) if err != nil { return "", err } @@ -133,7 +132,7 @@ func (g *generator) getTypeForInputType(opName string, typ *ast.Type, options, q // Sort of a hack: case the input type name to match the op-name. name := matchFirst(typ.Name(), opName) // TODO: we have to pass name 3 times, yuck - builder := &typeBuilder{typeNamePrefix: name, generator: g} + builder := &typeBuilder{generator: g} // TODO: passing options is actually kinda wrong, because it means we could // break the "there is only Go type for each input type" rule. In practice // it's probably rare that you use the same input type twice in a query and @@ -237,7 +236,7 @@ func selectionsForType(g *generator, typ *ast.Type, queryOptions *GenqlientDirec return fields } -func (builder *typeBuilder) writeField(field field) error { +func (builder *typeBuilder) writeField(typeNamePrefix string, field field) error { jsonName := field.Alias() // We need an exportable name for JSON-marshaling. goName := upperFirst(jsonName) @@ -273,7 +272,7 @@ func (builder *typeBuilder) writeField(field field) error { // field-name, because if we have `query q { a: f { b }, c: f { d } }` we // need separate types for a and c, even though they are the same type in // GraphQL, because they have different fields. - name, namePrefix := builder.typeName(builder.typeNamePrefix+goName, typedef) + name, namePrefix := builder.typeName(typeNamePrefix+goName, typedef) err = builder.writeType(name, namePrefix, typ, fields, options) if err != nil { return err @@ -317,7 +316,7 @@ func (builder *typeBuilder) writeType(name, namePrefix string, typ *ast.Type, fi } func (builder *typeBuilder) writeTypedef( - typeName string, + typeName, typeNamePrefix string, typedef *ast.Definition, pos *ast.Position, fields []field, @@ -328,7 +327,7 @@ func (builder *typeBuilder) writeTypedef( case ast.Object, ast.InputObject: builder.WriteString("struct {\n") for _, field := range fields { - err := builder.writeField(field) + err := builder.writeField(typeNamePrefix, field) if err != nil { return err } @@ -337,7 +336,7 @@ func (builder *typeBuilder) writeTypedef( // If any field is abstract, we need an UnmarshalJSON method to handle // it. - return builder.maybeWriteUnmarshal(typeName, fields) + return builder.maybeWriteUnmarshal(typeName, typeNamePrefix, fields) case ast.Interface, ast.Union: if !allowBrokenFeatures { @@ -355,7 +354,7 @@ func (builder *typeBuilder) writeTypedef( // Then, write the implementations. // TODO(benkraft): Put a doc-comment somewhere with the list. for _, impldef := range builder.schema.GetPossibleTypes(typedef) { - name, namePrefix := builder.typeName(builder.typeNamePrefix, impldef) + name, namePrefix := builder.typeName(typeNamePrefix, impldef) name, err := builder.addTypeForDefinition( name, namePrefix, impldef, pos, fields, options) if err != nil { @@ -374,7 +373,7 @@ func (builder *typeBuilder) writeTypedef( builder.WriteString("const (\n") for _, val := range typedef.EnumValues { fmt.Fprintf(builder, "%s %s = \"%s\"\n", - builder.typeNamePrefix+goConstName(val.Name), + typeNamePrefix+goConstName(val.Name), typeName, val.Name) } builder.WriteString(")\n") diff --git a/generate/unmarshal.go b/generate/unmarshal.go index 32106ae..c8bc55d 100644 --- a/generate/unmarshal.go +++ b/generate/unmarshal.go @@ -19,7 +19,7 @@ type concreteType struct { GoName, GraphQLName string } -func (builder *typeBuilder) maybeWriteUnmarshal(typeName string, fields []field) error { +func (builder *typeBuilder) maybeWriteUnmarshal(typeName, typeNamePrefix string, fields []field) error { data := templateData{Type: typeName} for _, field := range fields { typedef := builder.schema.Types[field.Type().Name()] @@ -31,7 +31,7 @@ func (builder *typeBuilder) maybeWriteUnmarshal(typeName string, fields []field) for _, typedef := range builder.schema.GetPossibleTypes(typedef) { // TODO: this is slightly fragile (it needs to match the // similar call in writeField) - goName, _ := builder.typeName(builder.typeNamePrefix+fieldInfo.GoName, typedef) + goName, _ := builder.typeName(typeNamePrefix+fieldInfo.GoName, typedef) fieldInfo.ConcreteTypes = append(fieldInfo.ConcreteTypes, concreteType{ GoName: goName,