diff --git a/plugin/modelgen/models.go b/plugin/modelgen/models.go index 9b60923fc16..26c09d68e03 100644 --- a/plugin/modelgen/models.go +++ b/plugin/modelgen/models.go @@ -419,7 +419,13 @@ func (m *Plugin) generateFields(cfg *config.Config, schemaType *ast.Definition) f = mf } - if f.IsResolver && cfg.OmitResolverFields { + var shouldGenerateResolver bool + if models := cfg.Models; len(models) > 0 { + if fields := models[schemaType.Name].Fields; len(fields) > 0 { + shouldGenerateResolver = fields[field.Name].Resolver + } + } + if (f.IsResolver || shouldGenerateResolver) && cfg.OmitResolverFields { continue } diff --git a/plugin/modelgen/models_test.go b/plugin/modelgen/models_test.go index 9a23147e11e..70e7c2fc4a6 100644 --- a/plugin/modelgen/models_test.go +++ b/plugin/modelgen/models_test.go @@ -332,6 +332,23 @@ func TestModelGenerationOmitResolverFields(t *testing.T) { require.NotContains(t, string(generated), "ResolverField") } +func TestModelGenerationOmitResolverFieldsWithExplicitResolver(t *testing.T) { + cfg, err := config.LoadConfig("testdata/gqlgen_omit_resolver_fields_with_explicit_resolver.yml") + require.NoError(t, err) + require.NoError(t, cfg.Init()) + p := Plugin{ + MutateHook: mutateHook, + FieldHook: DefaultFieldMutateHook, + } + require.NoError(t, p.MutateConfig(cfg)) + require.NoError(t, goBuild(t, "./out_omit_resolver_fields_with_explicit_resolver/")) + generated, err := os.ReadFile("./out_omit_resolver_fields_with_explicit_resolver/generated.go") + require.NoError(t, err) + require.Contains(t, string(generated), "type Base struct") + require.Contains(t, string(generated), "StandardField") + require.NotContains(t, string(generated), "ResolverField") +} + func TestModelGenerationStructFieldPointers(t *testing.T) { cfg, err := config.LoadConfig("testdata/gqlgen_struct_field_pointers.yml") require.NoError(t, err) diff --git a/plugin/modelgen/out_omit_resolver_fields_with_explicit_resolver/generated.go b/plugin/modelgen/out_omit_resolver_fields_with_explicit_resolver/generated.go new file mode 100644 index 00000000000..052fbac71b5 --- /dev/null +++ b/plugin/modelgen/out_omit_resolver_fields_with_explicit_resolver/generated.go @@ -0,0 +1,10 @@ +// Code generated by github.com/99designs/gqlgen, DO NOT EDIT. + +package out_omit_resolver_fields_with_explicit_resolver + +type Base struct { + StandardField string `json:"StandardField" database:"BaseStandardField"` +} + +type Query struct { +} diff --git a/plugin/modelgen/testdata/gqlgen_omit_resolver_fields_with_explicit_resolver.yml b/plugin/modelgen/testdata/gqlgen_omit_resolver_fields_with_explicit_resolver.yml new file mode 100644 index 00000000000..b6c514fa707 --- /dev/null +++ b/plugin/modelgen/testdata/gqlgen_omit_resolver_fields_with_explicit_resolver.yml @@ -0,0 +1,14 @@ +schema: + - "testdata/schema_omit_resolver_fields_with_explicit_resolver.graphql" + +exec: + filename: out_omit_resolver_fields_with_explict_resolver/ignored.go +model: + filename: out_omit_resolver_fields_with_explicit_resolver/generated.go + +omit_resolver_fields: true +models: + Base: + fields: + ResolverField: + resolver: true diff --git a/plugin/modelgen/testdata/schema_omit_resolver_fields_with_explicit_resolver.graphql b/plugin/modelgen/testdata/schema_omit_resolver_fields_with_explicit_resolver.graphql new file mode 100644 index 00000000000..d4f4e08a3d4 --- /dev/null +++ b/plugin/modelgen/testdata/schema_omit_resolver_fields_with_explicit_resolver.graphql @@ -0,0 +1,4 @@ +type Base { + StandardField: String! + ResolverField: String! +}