From 8106aef0c92bf9bd3440ec38729f8c5305202e7f Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 23 Sep 2025 17:42:13 +0100 Subject: [PATCH 1/2] Co-authored-by: gpt-4.1 --- internal/test/issues/issue2091/config.yaml | 7 +++++++ internal/test/issues/issue2091/generate.go | 3 +++ internal/test/issues/issue2091/issu2091.gen.go | 9 +++++++++ internal/test/issues/issue2091/issue2091.gen.go | 9 +++++++++ internal/test/issues/issue2091/openapi.yaml | 12 ++++++++++++ 5 files changed, 40 insertions(+) create mode 100644 internal/test/issues/issue2091/config.yaml create mode 100644 internal/test/issues/issue2091/generate.go create mode 100644 internal/test/issues/issue2091/issu2091.gen.go create mode 100644 internal/test/issues/issue2091/issue2091.gen.go create mode 100644 internal/test/issues/issue2091/openapi.yaml diff --git a/internal/test/issues/issue2091/config.yaml b/internal/test/issues/issue2091/config.yaml new file mode 100644 index 0000000000..5cc5f06655 --- /dev/null +++ b/internal/test/issues/issue2091/config.yaml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../../../configuration-schema.json +package: issue2091 +generate: + models: true +output: issue2091.gen.go +output-options: + skip-prune: true diff --git a/internal/test/issues/issue2091/generate.go b/internal/test/issues/issue2091/generate.go new file mode 100644 index 0000000000..0f2245f049 --- /dev/null +++ b/internal/test/issues/issue2091/generate.go @@ -0,0 +1,3 @@ +package issue2091 + +//go:generate go run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml openapi.yaml diff --git a/internal/test/issues/issue2091/issu2091.gen.go b/internal/test/issues/issue2091/issu2091.gen.go new file mode 100644 index 0000000000..76bdb6bee6 --- /dev/null +++ b/internal/test/issues/issue2091/issu2091.gen.go @@ -0,0 +1,9 @@ +// Package issue2091 provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.0.0-00010101000000-000000000000 DO NOT EDIT. +package issue2091 + +// ClientWithExtension defines model for ClientWithExtension. +type ClientWithExtension struct { + Newfield *string `json:"newfield"` +} diff --git a/internal/test/issues/issue2091/issue2091.gen.go b/internal/test/issues/issue2091/issue2091.gen.go new file mode 100644 index 0000000000..c20ac8c003 --- /dev/null +++ b/internal/test/issues/issue2091/issue2091.gen.go @@ -0,0 +1,9 @@ +// Package issue2091 provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.0.0-00010101000000-000000000000 DO NOT EDIT. +package issue2091 + +// TypeWithNullable defines model for TypeWithNullable. +type TypeWithNullable struct { + Newfield *string `json:"newfield"` +} diff --git a/internal/test/issues/issue2091/openapi.yaml b/internal/test/issues/issue2091/openapi.yaml new file mode 100644 index 0000000000..30e0a7dc8d --- /dev/null +++ b/internal/test/issues/issue2091/openapi.yaml @@ -0,0 +1,12 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: "Specifying `nullable: true` should imply `omitempty`" +components: + schemas: + TypeWithNullable: + type: object + properties: + newfield: + type: string + nullable: true From 62f3801ea7a85146bcf8d1684535185d81a1cb35 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 23 Sep 2025 17:42:44 +0100 Subject: [PATCH 2/2] sq --- internal/test/issues/issue2091/gen_test.go | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 internal/test/issues/issue2091/gen_test.go diff --git a/internal/test/issues/issue2091/gen_test.go b/internal/test/issues/issue2091/gen_test.go new file mode 100644 index 0000000000..ca1623a113 --- /dev/null +++ b/internal/test/issues/issue2091/gen_test.go @@ -0,0 +1,28 @@ +package issue2091 + +import ( + "reflect" + "slices" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// via gpt-4.1 (GitHub Copilot) +func hasOmitEmptyTag(field reflect.StructField) bool { + tag := field.Tag.Get("json") + parts := strings.Split(tag, ",") + return slices.Contains(parts[1:], "omitempty") +} + +// via gpt-4.1 (GitHub Copilot) +func TestTypeWithNullableHasOmitEmpty(t *testing.T) { + typ := reflect.TypeOf(TypeWithNullable{}) + + field, ok := typ.FieldByName("Name") + require.True(t, ok) + + assert.True(t, hasOmitEmptyTag(field), "newfield should have `omitempty` set, given the usage of `nullable: true`") +}