From 4f328f9fc78d6adc888c91818f46164395cc3426 Mon Sep 17 00:00:00 2001 From: Patryk Zdunowski Date: Fri, 5 Sep 2025 20:55:06 +0200 Subject: [PATCH 1/2] feat(exclude-package-go-type): impl --- .../test/exclude_package_go_type/cfg.yaml | 7 ++++++ internal/test/exclude_package_go_type/doc.go | 3 +++ .../exclude_package_go_type.gen.go | 9 +++++++ .../test/exclude_package_go_type/openapi.yaml | 25 +++++++++++++++++++ pkg/codegen/configuration.go | 2 ++ pkg/codegen/schema.go | 18 ++++++++++--- 6 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 internal/test/exclude_package_go_type/cfg.yaml create mode 100644 internal/test/exclude_package_go_type/doc.go create mode 100644 internal/test/exclude_package_go_type/exclude_package_go_type.gen.go create mode 100644 internal/test/exclude_package_go_type/openapi.yaml diff --git a/internal/test/exclude_package_go_type/cfg.yaml b/internal/test/exclude_package_go_type/cfg.yaml new file mode 100644 index 0000000000..96a21af17b --- /dev/null +++ b/internal/test/exclude_package_go_type/cfg.yaml @@ -0,0 +1,7 @@ +# yaml-language-server: $schema=../../configuration-schema.json +package: exclude_package_go_type +output: exclude_package_go_type.gen.go +generate: + models: true +output-options: + exclude-package-go-type: true diff --git a/internal/test/exclude_package_go_type/doc.go b/internal/test/exclude_package_go_type/doc.go new file mode 100644 index 0000000000..3a20cdf220 --- /dev/null +++ b/internal/test/exclude_package_go_type/doc.go @@ -0,0 +1,3 @@ +package exclude_package_go_type + +//go:generate go run github.com/livesession/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml openapi.yaml diff --git a/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go b/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go new file mode 100644 index 0000000000..b57ecfa5ab --- /dev/null +++ b/internal/test/exclude_package_go_type/exclude_package_go_type.gen.go @@ -0,0 +1,9 @@ +// Package exclude_package_go_type provides primitives to interact with the openapi HTTP API. +// +// Code generated by github.com/livesession/oapi-codegen/v2 version v2.0.0-00010101000000-000000000000 DO NOT EDIT. +package exclude_package_go_type + +// ResponsePlaceholder defines model for response.Placeholder. +type ResponsePlaceholder struct { + Name string `json:"name"` +} diff --git a/internal/test/exclude_package_go_type/openapi.yaml b/internal/test/exclude_package_go_type/openapi.yaml new file mode 100644 index 0000000000..4eaa281da8 --- /dev/null +++ b/internal/test/exclude_package_go_type/openapi.yaml @@ -0,0 +1,25 @@ +openapi: "3.0.1" +info: + version: 1.0.0 + title: Tests exclude package go type option +paths: + /placeholder: + get: + operationId: placeholder + responses: + default: + description: placeholder + content: + application/json: + schema: + $ref: "#/components/schemas/response.Placeholder" +components: + schemas: + response.Placeholder: + x-go-embedding: true + x-go-type: Ignored + type: object + required: [name] + properties: + name: + type: string diff --git a/pkg/codegen/configuration.go b/pkg/codegen/configuration.go index 1d9ff3eaea..ca65e5c699 100644 --- a/pkg/codegen/configuration.go +++ b/pkg/codegen/configuration.go @@ -250,6 +250,8 @@ type OutputOptions struct { IncludeTags []string `yaml:"include-tags,omitempty"` // Exclude operations that have one of these tags. Ignored when empty. ExcludeTags []string `yaml:"exclude-tags,omitempty"` + // Exclude package the `x-go-type` extension when generating types from schemas + ExcludePackageGoType bool `yaml:"exclude-package-go-type,omitempty"` // Only include operations that have one of these operation-ids. Ignored when empty. IncludeOperationIDs []string `yaml:"include-operation-ids,omitempty"` // Exclude operations that have one of these operation-ids. Ignored when empty. diff --git a/pkg/codegen/schema.go b/pkg/codegen/schema.go index 1d03fbdd0e..d17adbba38 100644 --- a/pkg/codegen/schema.go +++ b/pkg/codegen/schema.go @@ -316,10 +316,22 @@ func GenerateGoSchema(sref *openapi3.SchemaRef, path []string) (Schema, error) { if err != nil { return outSchema, fmt.Errorf("invalid value for %q: %w", extPropGoType, err) } - outSchema.GoType = typeName - outSchema.DefineViaAlias = true - return outSchema, nil + exludeCurrentPackage := false + currentPackage := globalState.options.PackageName + if globalState.options.OutputOptions.ExcludePackageGoType { + parts := strings.Split(typeName, ".") + if parts[0] == currentPackage || len(parts) == 1 { + exludeCurrentPackage = true + } + } + + if !exludeCurrentPackage { + outSchema.GoType = typeName + outSchema.DefineViaAlias = true + + return outSchema, nil + } } // Schema type and format, eg. string / binary From db2c6aa1efe58b1b9a28e5433314d1a8f2e6cca0 Mon Sep 17 00:00:00 2001 From: Patryk Zdunowski Date: Fri, 5 Sep 2025 22:23:37 +0200 Subject: [PATCH 2/2] feat(exclude-package-go-type): only if package type --- pkg/codegen/schema.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/codegen/schema.go b/pkg/codegen/schema.go index d17adbba38..2e9101825c 100644 --- a/pkg/codegen/schema.go +++ b/pkg/codegen/schema.go @@ -321,7 +321,7 @@ func GenerateGoSchema(sref *openapi3.SchemaRef, path []string) (Schema, error) { currentPackage := globalState.options.PackageName if globalState.options.OutputOptions.ExcludePackageGoType { parts := strings.Split(typeName, ".") - if parts[0] == currentPackage || len(parts) == 1 { + if parts[0] == currentPackage { exludeCurrentPackage = true } }