diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 19ddb43b..f4c2e740 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -26,6 +26,8 @@ When releasing a new version: ### Bug fixes: +- Generated type-names now abbreviate across multiple components; for example if the path to a type is `(MyOperation, Outer, Outer, Inner, OuterInner)`, it will again be called `MyOperationOuterInner`. (This regressed in a pre-v0.1.0 refactor.) (#109) + ## v0.1.0 First open-sourced version. diff --git a/generate/names.go b/generate/names.go index e9bc5003..24f8bde7 100644 --- a/generate/names.go +++ b/generate/names.go @@ -143,9 +143,9 @@ func typeNameParts(prefix *prefixList, typeName string) *prefixList { // If the prefix has just one part, that's the operation-name. There's no // need to add "Query" or "Mutation". (Zero should never happen.) if prefix == nil || prefix.tail == nil || - // If the last prefix field ends with this type's name, omit the + // If the name-so-far ends with this type's name, omit the // type-name (see the "shortened" case in the top-of-file comment). - strings.HasSuffix(prefix.head, typeName) { + strings.HasSuffix(joinPrefixList(prefix), typeName) { return prefix } return &prefixList{typeName, prefix} diff --git a/generate/names_test.go b/generate/names_test.go index befb6559..1e3d2fc2 100644 --- a/generate/names_test.go +++ b/generate/names_test.go @@ -33,8 +33,8 @@ func TestTypeNames(t *testing.T) { []*ast.Field{fakeField("Query", "operationUser")}, "User", }, { - // We don't shorten across multiple prefixes. - "OperationUserOperationUser", + // We do shorten across multiple prefixes. + "OperationUser", []*ast.Field{fakeField("Query", "user")}, "OperationUser", }, {