99designs / 99designs/gqlgen

Resolver interface types and function names are not Go-ified

Đang mở
#2,400 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Go
Star
10.8k
Fork
1.3k
Merge trung bình
2 ngày 36 phút
Pull request đã merge (30 ngày)
26

Mô tả

### What happened?

Somewhat related to https://github.com/99designs/gqlgen/issues/1383.

The resolver interface types that get generated and the functions to get those resolvers from the `ResolverRoot` don't follow the standard Go conventions on capitalization, even though these appear to get followed for the generated field names within model structs. This causes issues with linters such as `revive` since they'll trip the naming convention rules on the files that have the resolver implementations.

On a similar note, this also happens for generated model names, but that's less of an issue since they live within a generated file which linters are able to detect easily so they don't trip the rules.

### What did you expect?

All generated types and names are capitalized consistently.

### Minimal graphql.schema and models to reproduce

GraphQL schema:

```graphql
type TestType {
vmDetail: VmDetail
}

type VmDetail {
someVmField: String
}
```

Config:

```yaml
schema:
- schema.graphql
exec:
filename: generated/generated.go
package: generated
model:
filename: gqlmodel/models_gen.go
package: gqlmodel
autobind:
- github.com/test/gqlmodel
models:
resolver:
filename: resolver/resolver.go
package: resolver
type: Resolver
```

Generated resolver.go:

```go
package resolver

// THIS CODE IS A STARTING POINT ONLY. IT WILL NOT BE UPDATED WITH SCHEMA CHANGES.

import (
"context"

"github.com/test/generated"
"github.com/test/gqlmodel"
)

type Resolver struct{}

// // foo
func (r *testTypeResolver) VMDetail(ctx context.Context, obj *gqlmodel.TestType) (*gqlmodel.VmDetail, error) {
panic("not implemented")
}

// // foo
func (r *vmDetailResolver) SomeVMField(ctx context.Context, obj *gqlmodel.VmDetail) (*string, error) {
panic("not implemented")
}

// TestType returns generated.TestTypeResolver implementation.
func (r *Resolver) TestType() generated.TestTypeResolver { return &testTypeResolver{r} }

// VmDetail returns generated.VmDetailResolver implementation.
func (r *Resolver) VmDetail() generated.VmDetailResolver { return &vmDetailResolver{r} }

type testTypeResolver struct{ *Resolver }
type vmDetailResolver struct{ *Resolver }
```

Note the capitalization differences for "vm":
```
func (r *testTypeResolver) VMDetail(ctx context.Context, obj *gqlmodel.TestType) (*gqlmodel.VmDetail, error) {
^^ ^^

func (r *Resolver) VmDetail() generated.VmDetailResolver { return &vmDetailResolver{r} }
^^ ^^
```

### versions
- `go run github.com/99designs/gqlgen version`?
v0.17.20

- `go version`?
go version go1.19 linux/amd64

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.