From c45d44c2f24251c357eb3e38ac2ca113dccac5f2 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 16 Aug 2022 21:15:59 +0100 Subject: [PATCH 01/16] Lint: remove unused variable --- pkg/codegen/template_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/codegen/template_helpers.go b/pkg/codegen/template_helpers.go index 7ef57f3ff..585149d94 100644 --- a/pkg/codegen/template_helpers.go +++ b/pkg/codegen/template_helpers.go @@ -26,7 +26,7 @@ import ( const ( // These allow the case statements to be sorted later: - prefixMostSpecific, prefixLessSpecific, prefixLeastSpecific = "3", "6", "9" + prefixLessSpecific, prefixLeastSpecific = "6", "9" defaultClientTypeName = "Client" ) From e43df5b38ce8830612b67ab01e851b927e73ad4e Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 16 Aug 2022 21:22:33 +0100 Subject: [PATCH 02/16] Lint: Check return values Right now, we can ignore the return values, as we're hardcoding the response of an `err` to always return, which isn't ideal. --- internal/test/issues/issue-312/issue_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/test/issues/issue-312/issue_test.go b/internal/test/issues/issue-312/issue_test.go index 2bf46d843..d57258add 100644 --- a/internal/test/issues/issue-312/issue_test.go +++ b/internal/test/issues/issue-312/issue_test.go @@ -26,7 +26,8 @@ func TestClient_WhenPathHasColon_RequestHasCorrectPath(t *testing.T) { assert.Equal(t, "http://host/pets:validate", req.URL.String()) }) - client.ValidatePetsWithResponse(context.Background(), ValidatePetsJSONRequestBody{ + // TODO: this err should be checked, but it defaults to returning the "something went wrong", so we should refactor accordingly + _, _ = client.ValidatePetsWithResponse(context.Background(), ValidatePetsJSONRequestBody{ Names: []string{"fido"}, }) doer.AssertExpectations(t) @@ -43,7 +44,8 @@ func TestClient_WhenPathHasId_RequestHasCorrectPath(t *testing.T) { assert.Equal(t, "/pets/id", req.URL.Path) }) petID := "id" - client.GetPetWithResponse(context.Background(), petID) + // TODO: this err should be checked, but it defaults to returning the "something went wrong", so we should refactor accordingly + _, _ = client.GetPetWithResponse(context.Background(), petID) doer.AssertExpectations(t) } @@ -58,7 +60,8 @@ func TestClient_WhenPathHasIdContainingReservedCharacter_RequestHasCorrectPath(t assert.Equal(t, "http://host/pets/id1%2Fid2", req.URL.String()) }) petID := "id1/id2" - client.GetPetWithResponse(context.Background(), petID) + // TODO: this err should be checked, but it defaults to returning the "something went wrong", so we should refactor accordingly + _, _ = client.GetPetWithResponse(context.Background(), petID) doer.AssertExpectations(t) } From 48120c8317557ec27e10016f64fed9eba4afe530 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 09:32:21 +0100 Subject: [PATCH 03/16] Lint: Remove unused unexported variable --- pkg/codegen/template_helpers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/codegen/template_helpers.go b/pkg/codegen/template_helpers.go index 585149d94..edbf60014 100644 --- a/pkg/codegen/template_helpers.go +++ b/pkg/codegen/template_helpers.go @@ -26,7 +26,7 @@ import ( const ( // These allow the case statements to be sorted later: - prefixLessSpecific, prefixLeastSpecific = "6", "9" + prefixLeastSpecific = "9" defaultClientTypeName = "Client" ) From 4ab839972feba60f2ea96ab716ed261b94cbab41 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 09:38:06 +0100 Subject: [PATCH 04/16] Lint: Use consistent Go-style package names --- internal/test/all_of/doc.go | 2 +- internal/test/externalref/imports_test.go | 4 ++-- internal/test/externalref/packageA/config.yaml | 2 +- internal/test/externalref/packageA/doc.go | 2 +- internal/test/externalref/packageA/externalref.gen.go | 4 ++-- internal/test/externalref/packageB/config.yaml | 2 +- internal/test/externalref/packageB/doc.go | 2 +- internal/test/externalref/packageB/externalref.gen.go | 4 ++-- internal/test/issues/issue-312/config.yaml | 2 +- internal/test/issues/issue-312/doc.go | 2 +- internal/test/issues/issue-312/issue.gen.go | 4 ++-- internal/test/issues/issue-312/issue_test.go | 2 +- internal/test/issues/issue-52/config.yaml | 2 +- internal/test/issues/issue-52/doc.go | 2 +- internal/test/issues/issue-52/issue.gen.go | 4 ++-- internal/test/issues/issue-52/issue_test.go | 4 ++-- internal/test/issues/issue-579/gen.go | 4 ++-- internal/test/issues/issue-579/issue.gen.go | 4 ++-- internal/test/issues/issue-579/issue_test.go | 2 +- internal/test/issues/issue-grab_import_names/config.yaml | 2 +- internal/test/issues/issue-grab_import_names/doc.go | 2 +- internal/test/issues/issue-grab_import_names/issue.gen.go | 4 ++-- internal/test/issues/issue-grab_import_names/issue_test.go | 4 ++-- .../test/issues/issue-head-digit-of-httpheader/config.yaml | 2 +- internal/test/issues/issue-head-digit-of-httpheader/doc.go | 2 +- .../test/issues/issue-head-digit-of-httpheader/issue.gen.go | 4 ++-- internal/test/issues/issue-illegal_enum_names/config.yaml | 2 +- internal/test/issues/issue-illegal_enum_names/doc.go | 2 +- internal/test/issues/issue-illegal_enum_names/issue.gen.go | 4 ++-- internal/test/issues/issue-illegal_enum_names/issue_test.go | 4 ++-- internal/test/strict-server/strict_test.go | 2 +- 31 files changed, 44 insertions(+), 44 deletions(-) diff --git a/internal/test/all_of/doc.go b/internal/test/all_of/doc.go index 074026851..0388e17eb 100644 --- a/internal/test/all_of/doc.go +++ b/internal/test/all_of/doc.go @@ -1,4 +1,4 @@ -package all_of +package allof //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config1.yaml openapi.yaml //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config2.yaml openapi.yaml diff --git a/internal/test/externalref/imports_test.go b/internal/test/externalref/imports_test.go index c3e326fe1..607def3ff 100644 --- a/internal/test/externalref/imports_test.go +++ b/internal/test/externalref/imports_test.go @@ -3,8 +3,8 @@ package externalref import ( "testing" - "github.com/deepmap/oapi-codegen/internal/test/externalref/packageA" - "github.com/deepmap/oapi-codegen/internal/test/externalref/packageB" + packageA "github.com/deepmap/oapi-codegen/internal/test/externalref/packageA" + packageB "github.com/deepmap/oapi-codegen/internal/test/externalref/packageB" "github.com/stretchr/testify/require" ) diff --git a/internal/test/externalref/packageA/config.yaml b/internal/test/externalref/packageA/config.yaml index cbd23be7b..03240de6c 100644 --- a/internal/test/externalref/packageA/config.yaml +++ b/internal/test/externalref/packageA/config.yaml @@ -1,4 +1,4 @@ -package: packageA +package: packagea generate: models: true embedded-spec: true diff --git a/internal/test/externalref/packageA/doc.go b/internal/test/externalref/packageA/doc.go index 5054abeba..8a7bb68eb 100644 --- a/internal/test/externalref/packageA/doc.go +++ b/internal/test/externalref/packageA/doc.go @@ -1,3 +1,3 @@ -package packageA +package packagea //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/externalref/packageA/externalref.gen.go b/internal/test/externalref/packageA/externalref.gen.go index 01505b170..1a4d648dd 100644 --- a/internal/test/externalref/packageA/externalref.gen.go +++ b/internal/test/externalref/packageA/externalref.gen.go @@ -1,7 +1,7 @@ -// Package packageA provides primitives to interact with the openapi HTTP API. +// Package packagea provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package packageA +package packagea import ( "bytes" diff --git a/internal/test/externalref/packageB/config.yaml b/internal/test/externalref/packageB/config.yaml index 72752cd80..748a18858 100644 --- a/internal/test/externalref/packageB/config.yaml +++ b/internal/test/externalref/packageB/config.yaml @@ -1,4 +1,4 @@ -package: packageB +package: packageb generate: models: true embedded-spec: true diff --git a/internal/test/externalref/packageB/doc.go b/internal/test/externalref/packageB/doc.go index fdee47d55..73641dad9 100644 --- a/internal/test/externalref/packageB/doc.go +++ b/internal/test/externalref/packageB/doc.go @@ -1,3 +1,3 @@ -package packageB +package packageb //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/externalref/packageB/externalref.gen.go b/internal/test/externalref/packageB/externalref.gen.go index aa545f1e5..3e4fe051e 100644 --- a/internal/test/externalref/packageB/externalref.gen.go +++ b/internal/test/externalref/packageB/externalref.gen.go @@ -1,7 +1,7 @@ -// Package packageB provides primitives to interact with the openapi HTTP API. +// Package packageb provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package packageB +package packageb import ( "bytes" diff --git a/internal/test/issues/issue-312/config.yaml b/internal/test/issues/issue-312/config.yaml index f3d72fb6a..a0db7e978 100644 --- a/internal/test/issues/issue-312/config.yaml +++ b/internal/test/issues/issue-312/config.yaml @@ -1,4 +1,4 @@ -package: issue_312 +package: issue312 generate: echo-server: true client: true diff --git a/internal/test/issues/issue-312/doc.go b/internal/test/issues/issue-312/doc.go index c27d53bab..8eb982df9 100644 --- a/internal/test/issues/issue-312/doc.go +++ b/internal/test/issues/issue-312/doc.go @@ -1,3 +1,3 @@ -package issue_312 +package issue312 //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/issues/issue-312/issue.gen.go b/internal/test/issues/issue-312/issue.gen.go index 02852176b..c077475b2 100644 --- a/internal/test/issues/issue-312/issue.gen.go +++ b/internal/test/issues/issue-312/issue.gen.go @@ -1,7 +1,7 @@ -// Package issue_312 provides primitives to interact with the openapi HTTP API. +// Package issue312 provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package issue_312 +package issue312 import ( "bytes" diff --git a/internal/test/issues/issue-312/issue_test.go b/internal/test/issues/issue-312/issue_test.go index d57258add..23a14649d 100644 --- a/internal/test/issues/issue-312/issue_test.go +++ b/internal/test/issues/issue-312/issue_test.go @@ -1,4 +1,4 @@ -package issue_312 +package issue312 import ( "context" diff --git a/internal/test/issues/issue-52/config.yaml b/internal/test/issues/issue-52/config.yaml index 1aa56b19f..8ea198ff2 100644 --- a/internal/test/issues/issue-52/config.yaml +++ b/internal/test/issues/issue-52/config.yaml @@ -1,4 +1,4 @@ -package: issue_52 +package: issue52 generate: echo-server: true client: true diff --git a/internal/test/issues/issue-52/doc.go b/internal/test/issues/issue-52/doc.go index 2f19f47cf..f29e0e9f8 100644 --- a/internal/test/issues/issue-52/doc.go +++ b/internal/test/issues/issue-52/doc.go @@ -1,3 +1,3 @@ -package issue_52 +package issue52 //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/issues/issue-52/issue.gen.go b/internal/test/issues/issue-52/issue.gen.go index fde84ba7f..d3f1a236d 100644 --- a/internal/test/issues/issue-52/issue.gen.go +++ b/internal/test/issues/issue-52/issue.gen.go @@ -1,7 +1,7 @@ -// Package issue_52 provides primitives to interact with the openapi HTTP API. +// Package issue52 provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package issue_52 +package issue52 import ( "bytes" diff --git a/internal/test/issues/issue-52/issue_test.go b/internal/test/issues/issue-52/issue_test.go index 12edb76eb..0d90bf68b 100644 --- a/internal/test/issues/issue-52/issue_test.go +++ b/internal/test/issues/issue-52/issue_test.go @@ -1,4 +1,4 @@ -package issue_52 +package issue52 import ( _ "embed" @@ -17,7 +17,7 @@ func TestIssue(t *testing.T) { require.NoError(t, err) opts := codegen.Configuration{ - PackageName: "issue_52", + PackageName: "issue52", Generate: codegen.GenerateOptions{ EchoServer: true, Client: true, diff --git a/internal/test/issues/issue-579/gen.go b/internal/test/issues/issue-579/gen.go index a91277b7a..d34774f7e 100644 --- a/internal/test/issues/issue-579/gen.go +++ b/internal/test/issues/issue-579/gen.go @@ -1,3 +1,3 @@ -package issue_579 +package issue579 -//go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --package=issue_579 --generate=types,skip-prune --alias-types -o issue.gen.go spec.yaml +//go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --package=issue579 --generate=types,skip-prune --alias-types -o issue.gen.go spec.yaml diff --git a/internal/test/issues/issue-579/issue.gen.go b/internal/test/issues/issue-579/issue.gen.go index 93cc60a69..b7284ffee 100644 --- a/internal/test/issues/issue-579/issue.gen.go +++ b/internal/test/issues/issue-579/issue.gen.go @@ -1,7 +1,7 @@ -// Package issue_579 provides primitives to interact with the openapi HTTP API. +// Package issue579 provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package issue_579 +package issue579 import ( openapi_types "github.com/deepmap/oapi-codegen/pkg/types" diff --git a/internal/test/issues/issue-579/issue_test.go b/internal/test/issues/issue-579/issue_test.go index 4c1b90118..7c92a4220 100644 --- a/internal/test/issues/issue-579/issue_test.go +++ b/internal/test/issues/issue-579/issue_test.go @@ -1,4 +1,4 @@ -package issue_579 +package issue579 import ( "encoding/json" diff --git a/internal/test/issues/issue-grab_import_names/config.yaml b/internal/test/issues/issue-grab_import_names/config.yaml index 7327e2aa5..3248a4893 100644 --- a/internal/test/issues/issue-grab_import_names/config.yaml +++ b/internal/test/issues/issue-grab_import_names/config.yaml @@ -1,4 +1,4 @@ -package: grab_import_names +package: grabimportnames generate: echo-server: true client: true diff --git a/internal/test/issues/issue-grab_import_names/doc.go b/internal/test/issues/issue-grab_import_names/doc.go index 0762ddb13..5c73385b0 100644 --- a/internal/test/issues/issue-grab_import_names/doc.go +++ b/internal/test/issues/issue-grab_import_names/doc.go @@ -1,3 +1,3 @@ -package grab_import_names +package grabimportnames //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/issues/issue-grab_import_names/issue.gen.go b/internal/test/issues/issue-grab_import_names/issue.gen.go index 275e6a7ad..6378e57df 100644 --- a/internal/test/issues/issue-grab_import_names/issue.gen.go +++ b/internal/test/issues/issue-grab_import_names/issue.gen.go @@ -1,7 +1,7 @@ -// Package grab_import_names provides primitives to interact with the openapi HTTP API. +// Package grabimportnames provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package grab_import_names +package grabimportnames import ( "bytes" diff --git a/internal/test/issues/issue-grab_import_names/issue_test.go b/internal/test/issues/issue-grab_import_names/issue_test.go index c00b42da7..8dffcd22b 100644 --- a/internal/test/issues/issue-grab_import_names/issue_test.go +++ b/internal/test/issues/issue-grab_import_names/issue_test.go @@ -1,4 +1,4 @@ -package grab_import_names +package grabimportnames import ( "testing" @@ -13,7 +13,7 @@ func TestLineComments(t *testing.T) { require.NoError(t, err) opts := codegen.Configuration{ - PackageName: "grab_import_names", + PackageName: "grabimportnames", Generate: codegen.GenerateOptions{ EchoServer: true, Client: true, diff --git a/internal/test/issues/issue-head-digit-of-httpheader/config.yaml b/internal/test/issues/issue-head-digit-of-httpheader/config.yaml index f3709acd7..1f7ce9d39 100644 --- a/internal/test/issues/issue-head-digit-of-httpheader/config.yaml +++ b/internal/test/issues/issue-head-digit-of-httpheader/config.yaml @@ -1,5 +1,5 @@ --- -package: head_digit_of_httpheader +package: headdigitofhttpheader generate: strict-server: true output: issue.gen.go diff --git a/internal/test/issues/issue-head-digit-of-httpheader/doc.go b/internal/test/issues/issue-head-digit-of-httpheader/doc.go index 4a2cdf80d..0c4cfc13a 100644 --- a/internal/test/issues/issue-head-digit-of-httpheader/doc.go +++ b/internal/test/issues/issue-head-digit-of-httpheader/doc.go @@ -1,3 +1,3 @@ -package head_digit_of_httpheader +package headdigitofhttpheader //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/issues/issue-head-digit-of-httpheader/issue.gen.go b/internal/test/issues/issue-head-digit-of-httpheader/issue.gen.go index c512e7ad3..703c262af 100644 --- a/internal/test/issues/issue-head-digit-of-httpheader/issue.gen.go +++ b/internal/test/issues/issue-head-digit-of-httpheader/issue.gen.go @@ -1,7 +1,7 @@ -// Package head_digit_of_httpheader provides primitives to interact with the openapi HTTP API. +// Package headdigitofhttpheader provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package head_digit_of_httpheader +package headdigitofhttpheader import ( "context" diff --git a/internal/test/issues/issue-illegal_enum_names/config.yaml b/internal/test/issues/issue-illegal_enum_names/config.yaml index 592a3cb00..9b426a0d5 100644 --- a/internal/test/issues/issue-illegal_enum_names/config.yaml +++ b/internal/test/issues/issue-illegal_enum_names/config.yaml @@ -1,4 +1,4 @@ -package: illegal_enum_names +package: illegalenumnames generate: echo-server: true client: true diff --git a/internal/test/issues/issue-illegal_enum_names/doc.go b/internal/test/issues/issue-illegal_enum_names/doc.go index 4bc0db25e..de0c23ffd 100644 --- a/internal/test/issues/issue-illegal_enum_names/doc.go +++ b/internal/test/issues/issue-illegal_enum_names/doc.go @@ -1,3 +1,3 @@ -package illegal_enum_names +package illegalenumnames //go:generate go run github.com/deepmap/oapi-codegen/cmd/oapi-codegen --config=config.yaml spec.yaml diff --git a/internal/test/issues/issue-illegal_enum_names/issue.gen.go b/internal/test/issues/issue-illegal_enum_names/issue.gen.go index 6a813362e..3f0d8e080 100644 --- a/internal/test/issues/issue-illegal_enum_names/issue.gen.go +++ b/internal/test/issues/issue-illegal_enum_names/issue.gen.go @@ -1,7 +1,7 @@ -// Package illegal_enum_names provides primitives to interact with the openapi HTTP API. +// Package illegalenumnames provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version (devel) DO NOT EDIT. -package illegal_enum_names +package illegalenumnames import ( "bytes" diff --git a/internal/test/issues/issue-illegal_enum_names/issue_test.go b/internal/test/issues/issue-illegal_enum_names/issue_test.go index 4d7c2c87e..3df57c8ee 100644 --- a/internal/test/issues/issue-illegal_enum_names/issue_test.go +++ b/internal/test/issues/issue-illegal_enum_names/issue_test.go @@ -1,4 +1,4 @@ -package illegal_enum_names +package illegalenumnames import ( "go/ast" @@ -16,7 +16,7 @@ func TestIllegalEnumNames(t *testing.T) { require.NoError(t, err) opts := codegen.Configuration{ - PackageName: "illegal_enum_names", + PackageName: "illegalenumnames", Generate: codegen.GenerateOptions{ EchoServer: true, Client: true, diff --git a/internal/test/strict-server/strict_test.go b/internal/test/strict-server/strict_test.go index 0075f3262..76f236730 100644 --- a/internal/test/strict-server/strict_test.go +++ b/internal/test/strict-server/strict_test.go @@ -1,4 +1,4 @@ -package strict_server +package strictserver import ( "bytes" From 8c3021f2358bd0d2dcbab692a34d072d7e4d3eb1 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:01:27 +0100 Subject: [PATCH 05/16] Lint: `unconvert` --- internal/test/components/components_test.go | 2 +- internal/test/strict-server/echo/server.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/test/components/components_test.go b/internal/test/components/components_test.go index a6fbbfd01..e2eabfb09 100644 --- a/internal/test/components/components_test.go +++ b/internal/test/components/components_test.go @@ -87,7 +87,7 @@ func TestOneOf(t *testing.T) { assert.NoError(t, err) v2, err := dst.AsOneOfVariant2() assert.NoError(t, err) - assert.Equal(t, OneOfVariant2([]int{1, 2, 3}), v2) + assert.Equal(t, []int{1, 2, 3}, v2) err = json.Unmarshal([]byte(variant3), &dst) assert.NoError(t, err) diff --git a/internal/test/strict-server/echo/server.go b/internal/test/strict-server/echo/server.go index d4007e010..5b7026809 100644 --- a/internal/test/strict-server/echo/server.go +++ b/internal/test/strict-server/echo/server.go @@ -94,7 +94,7 @@ func (s StrictServer) URLEncodedExample(ctx context.Context, request URLEncodedE } func (s StrictServer) HeadersExample(ctx context.Context, request HeadersExampleRequestObject) (HeadersExampleResponseObject, error) { - return HeadersExample200JSONResponse{Body: Example(*request.Body), Headers: HeadersExample200ResponseHeaders{Header1: request.Params.Header1, Header2: *request.Params.Header2}}, nil + return HeadersExample200JSONResponse{Body: *request.Body, Headers: HeadersExample200ResponseHeaders{Header1: request.Params.Header1, Header2: *request.Params.Header2}}, nil } func (s StrictServer) ReusableResponses(ctx context.Context, request ReusableResponsesRequestObject) (ReusableResponsesResponseObject, error) { From d8d695c670fe9972b5f0bc600b09e48f2b1bb4ac Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:05:05 +0100 Subject: [PATCH 06/16] Lint: Exclude unexported fields for `structcheck` As we've added them on purpose, to show that they don't get (un)marshalled. --- pkg/runtime/bindform_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/runtime/bindform_test.go b/pkg/runtime/bindform_test.go index 9660ce43a..159cef2c1 100644 --- a/pkg/runtime/bindform_test.go +++ b/pkg/runtime/bindform_test.go @@ -29,7 +29,7 @@ func TestBindURLForm(t *testing.T) { OptStruct *testSubStruct `json:"opt_struct,omitempty"` OptStructSlice *[]testSubStruct `json:"opt_struct_slice,omitempty"` NotSerializable int `json:"-"` - unexported int + unexported int //nolint:unused } testCases := map[string]testStruct{ @@ -137,7 +137,7 @@ func TestMarshalForm(t *testing.T) { OptStruct *testSubStruct `json:"opt_struct,omitempty"` OptStructSlice *[]testSubStruct `json:"opt_struct_slice,omitempty"` NotSerializable int `json:"-"` - unexported int + unexported int //nolint:unused } testCases := map[string]testStruct{ From 81cafff03402e06475035dd91761a2565ee8f45a Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:07:34 +0100 Subject: [PATCH 07/16] Lint: Ignore findings on string-based keys for `Context` As it's probably a bit late to change this, in case it changes expected behaviour, via SA1029. --- pkg/gin-middleware/oapi_validate.go | 4 ++-- pkg/middleware/oapi_validate.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/gin-middleware/oapi_validate.go b/pkg/gin-middleware/oapi_validate.go index e2097b6f5..82c1f52cb 100644 --- a/pkg/gin-middleware/oapi_validate.go +++ b/pkg/gin-middleware/oapi_validate.go @@ -122,12 +122,12 @@ func ValidateRequestFromContext(c *gin.Context, router routers.Router, options * // Pass the gin context into the request validator, so that any callbacks // which it invokes make it available. - requestContext := context.WithValue(context.Background(), GinContextKey, c) + requestContext := context.WithValue(context.Background(), GinContextKey, c) //nolint:staticcheck if options != nil { validationInput.Options = &options.Options validationInput.ParamDecoder = options.ParamDecoder - requestContext = context.WithValue(requestContext, UserDataKey, options.UserData) + requestContext = context.WithValue(requestContext, UserDataKey, options.UserData) //nolint:staticcheck } err = openapi3filter.ValidateRequest(requestContext, validationInput) diff --git a/pkg/middleware/oapi_validate.go b/pkg/middleware/oapi_validate.go index 6a48a4917..a665b3dfc 100644 --- a/pkg/middleware/oapi_validate.go +++ b/pkg/middleware/oapi_validate.go @@ -130,12 +130,12 @@ func ValidateRequestFromContext(ctx echo.Context, router routers.Router, options // Pass the Echo context into the request validator, so that any callbacks // which it invokes make it available. - requestContext := context.WithValue(context.Background(), EchoContextKey, ctx) + requestContext := context.WithValue(context.Background(), EchoContextKey, ctx) //nolint:staticcheck if options != nil { validationInput.Options = &options.Options validationInput.ParamDecoder = options.ParamDecoder - requestContext = context.WithValue(requestContext, UserDataKey, options.UserData) + requestContext = context.WithValue(requestContext, UserDataKey, options.UserData) //nolint:staticcheck } err = openapi3filter.ValidateRequest(requestContext, validationInput) From 9b74659b648961a6368236f49e34e0e1cb89f906 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:08:24 +0100 Subject: [PATCH 08/16] Lint: Use backtick'd strings for regexes Via S1007 --- pkg/codegen/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/codegen/utils.go b/pkg/codegen/utils.go index 4339858dc..52274c0a6 100644 --- a/pkg/codegen/utils.go +++ b/pkg/codegen/utils.go @@ -34,7 +34,7 @@ var ( ) func init() { - pathParamRE = regexp.MustCompile("{[.;?]?([^{}*]+)\\*?}") + pathParamRE = regexp.MustCompile(`{[.;?]?([^{}*]+)\*?}`) predeclaredIdentifiers := []string{ // Types From a6e31e676b2f4586660c12b9b8fa93fc0342a1dc Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:13:49 +0100 Subject: [PATCH 09/16] Lint: Don't use deprecated `strings.Title` Via SA1019 --- go.mod | 2 +- pkg/codegen/template_helpers.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 9dcd51f08..3e222b7e5 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/lestrrat-go/jwx v1.2.25 github.com/matryer/moq v0.2.7 github.com/stretchr/testify v1.8.1 + golang.org/x/text v0.4.0 golang.org/x/tools v0.2.0 gopkg.in/yaml.v2 v2.4.0 ) @@ -54,7 +55,6 @@ require ( golang.org/x/mod v0.6.0 // indirect golang.org/x/net v0.1.0 // indirect golang.org/x/sys v0.1.0 // indirect - golang.org/x/text v0.4.0 // indirect golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/pkg/codegen/template_helpers.go b/pkg/codegen/template_helpers.go index edbf60014..7585a2680 100644 --- a/pkg/codegen/template_helpers.go +++ b/pkg/codegen/template_helpers.go @@ -22,6 +22,8 @@ import ( "github.com/deepmap/oapi-codegen/pkg/util" "github.com/labstack/echo/v4" + "golang.org/x/text/cases" + "golang.org/x/text/language" ) const ( @@ -37,6 +39,8 @@ var ( contentTypesXML = []string{echo.MIMEApplicationXML, echo.MIMETextXML, "application/problems+xml"} responseTypeSuffix = "Response" + + titleCaser = cases.Title(language.English) ) // This function takes an array of Parameter definition, and generates a valid @@ -288,7 +292,7 @@ var TemplateFunctions = template.FuncMap{ "getResponseTypeDefinitions": getResponseTypeDefinitions, "toStringArray": toStringArray, "lower": strings.ToLower, - "title": strings.Title, + "title": titleCaser.String, "stripNewLines": stripNewLines, "sanitizeGoIdentity": SanitizeGoIdentity, "toGoComment": StringWithTypeNameToGoComment, From 3fd42fc941ec79716eb431ada868074e21254c1f Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:16:49 +0100 Subject: [PATCH 10/16] Lint: remove ineffectual assignments --- pkg/runtime/styleparam_test.go | 104 ++++++++++++++++----------------- pkg/types/file_test.go | 1 + 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/pkg/runtime/styleparam_test.go b/pkg/runtime/styleparam_test.go index 5500820b7..1943ae0fc 100644 --- a/pkg/runtime/styleparam_test.go +++ b/pkg/runtime/styleparam_test.go @@ -394,10 +394,10 @@ func TestStyleParam(t *testing.T) { // ------------------------ spaceDelimited Style -------------------------- - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, primitive) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, primitive) assert.Error(t, err) result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, array) @@ -408,60 +408,60 @@ func TestStyleParam(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, "id=3&id=4&id=5", result) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, object) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, object) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, object) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, object) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, dict) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, dict) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, dict) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, dict) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("spaceDelimited", false, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("spaceDelimited", true, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) // ------------------------- pipeDelimited Style -------------------------- - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, primitive) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, primitive) assert.Error(t, err) result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, array) @@ -472,69 +472,69 @@ func TestStyleParam(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, "id=3&id=4&id=5", result) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, object) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, object) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, object) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, object) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, dict) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, dict) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, dict) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, dict) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("pipeDelimited", false, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("pipeDelimited", true, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) // --------------------------- deepObject Style --------------------------- - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, primitive) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, primitive) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, primitive) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, array) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, array) assert.Error(t, err) result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, array) assert.NoError(t, err) assert.EqualValues(t, "id[0]=3&id[1]=4&id[2]=5", result) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, object) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, object) assert.Error(t, err) result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, object) @@ -545,40 +545,40 @@ func TestStyleParam(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, "id[firstName]=Alex&id[role]=admin", result) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, timestamp) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, timestamp) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, ×tamp) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, ×tamp) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, date) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, date) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, &date) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, &date) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, aUUID) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("deepObject", false, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) - result, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, &aUUID) + _, err = StyleParamWithLocation("deepObject", true, "id", ParamLocationQuery, &aUUID) assert.Error(t, err) // Misc tests diff --git a/pkg/types/file_test.go b/pkg/types/file_test.go index 3e66c7df0..fb4ce98ae 100644 --- a/pkg/types/file_test.go +++ b/pkg/types/file_test.go @@ -48,6 +48,7 @@ func TestFileJSON(t *testing.T) { err = json.Unmarshal(buf, &o4) require.NoError(t, err) o4Bytes, err := o4.BinaryFieldPtr.Bytes() + require.NoError(t, err) assert.Equal(t, []byte("hello"), o4Bytes) } From 47840b32197e392970ebc04fb5efff8071092e01 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:17:57 +0100 Subject: [PATCH 11/16] Lint: Ensure we check errors Or, least show that we've considered whether to ignore them, which we do to follow existing style of the file to ignore everything. --- pkg/codegen/prune.go | 68 ++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/pkg/codegen/prune.go b/pkg/codegen/prune.go index b9f05f5bc..03df80fec 100644 --- a/pkg/codegen/prune.go +++ b/pkg/codegen/prune.go @@ -28,14 +28,14 @@ func walkSwagger(swagger *openapi3.T, doFn func(RefWrapper) (bool, error)) error for _, p := range swagger.Paths { for _, param := range p.Parameters { - walkParameterRef(param, doFn) + _ = walkParameterRef(param, doFn) } for _, op := range p.Operations() { - walkOperation(op, doFn) + _ = walkOperation(op, doFn) } } - walkComponents(&swagger.Components, doFn) + _ = walkComponents(&swagger.Components, doFn) return nil } @@ -53,11 +53,11 @@ func walkOperation(op *openapi3.Operation, doFn func(RefWrapper) (bool, error)) _ = walkRequestBodyRef(op.RequestBody, doFn) for _, response := range op.Responses { - walkResponseRef(response, doFn) + _ = walkResponseRef(response, doFn) } for _, callback := range op.Callbacks { - walkCallbackRef(callback, doFn) + _ = walkCallbackRef(callback, doFn) } return nil @@ -126,25 +126,25 @@ func walkSchemaRef(ref *openapi3.SchemaRef, doFn func(RefWrapper) (bool, error)) } for _, ref := range ref.Value.OneOf { - walkSchemaRef(ref, doFn) + _ = walkSchemaRef(ref, doFn) } for _, ref := range ref.Value.AnyOf { - walkSchemaRef(ref, doFn) + _ = walkSchemaRef(ref, doFn) } for _, ref := range ref.Value.AllOf { - walkSchemaRef(ref, doFn) + _ = walkSchemaRef(ref, doFn) } - walkSchemaRef(ref.Value.Not, doFn) - walkSchemaRef(ref.Value.Items, doFn) + _ = walkSchemaRef(ref.Value.Not, doFn) + _ = walkSchemaRef(ref.Value.Items, doFn) for _, ref := range ref.Value.Properties { - walkSchemaRef(ref, doFn) + _ = walkSchemaRef(ref, doFn) } - walkSchemaRef(ref.Value.AdditionalProperties, doFn) + _ = walkSchemaRef(ref.Value.AdditionalProperties, doFn) return nil } @@ -166,20 +166,20 @@ func walkParameterRef(ref *openapi3.ParameterRef, doFn func(RefWrapper) (bool, e return nil } - walkSchemaRef(ref.Value.Schema, doFn) + _ = walkSchemaRef(ref.Value.Schema, doFn) for _, example := range ref.Value.Examples { - walkExampleRef(example, doFn) + _ = walkExampleRef(example, doFn) } for _, mediaType := range ref.Value.Content { if mediaType == nil { continue } - walkSchemaRef(mediaType.Schema, doFn) + _ = walkSchemaRef(mediaType.Schema, doFn) for _, example := range mediaType.Examples { - walkExampleRef(example, doFn) + _ = walkExampleRef(example, doFn) } } @@ -207,10 +207,10 @@ func walkRequestBodyRef(ref *openapi3.RequestBodyRef, doFn func(RefWrapper) (boo if mediaType == nil { continue } - walkSchemaRef(mediaType.Schema, doFn) + _ = walkSchemaRef(mediaType.Schema, doFn) for _, example := range mediaType.Examples { - walkExampleRef(example, doFn) + _ = walkExampleRef(example, doFn) } } @@ -235,22 +235,22 @@ func walkResponseRef(ref *openapi3.ResponseRef, doFn func(RefWrapper) (bool, err } for _, header := range ref.Value.Headers { - walkHeaderRef(header, doFn) + _ = walkHeaderRef(header, doFn) } for _, mediaType := range ref.Value.Content { if mediaType == nil { continue } - walkSchemaRef(mediaType.Schema, doFn) + _ = walkSchemaRef(mediaType.Schema, doFn) for _, example := range mediaType.Examples { - walkExampleRef(example, doFn) + _ = walkExampleRef(example, doFn) } } for _, link := range ref.Value.Links { - walkLinkRef(link, doFn) + _ = walkLinkRef(link, doFn) } return nil @@ -275,17 +275,17 @@ func walkCallbackRef(ref *openapi3.CallbackRef, doFn func(RefWrapper) (bool, err for _, pathItem := range *ref.Value { for _, parameter := range pathItem.Parameters { - walkParameterRef(parameter, doFn) + _ = walkParameterRef(parameter, doFn) } - walkOperation(pathItem.Connect, doFn) - walkOperation(pathItem.Delete, doFn) - walkOperation(pathItem.Get, doFn) - walkOperation(pathItem.Head, doFn) - walkOperation(pathItem.Options, doFn) - walkOperation(pathItem.Patch, doFn) - walkOperation(pathItem.Post, doFn) - walkOperation(pathItem.Put, doFn) - walkOperation(pathItem.Trace, doFn) + _ = walkOperation(pathItem.Connect, doFn) + _ = walkOperation(pathItem.Delete, doFn) + _ = walkOperation(pathItem.Get, doFn) + _ = walkOperation(pathItem.Head, doFn) + _ = walkOperation(pathItem.Options, doFn) + _ = walkOperation(pathItem.Patch, doFn) + _ = walkOperation(pathItem.Post, doFn) + _ = walkOperation(pathItem.Put, doFn) + _ = walkOperation(pathItem.Trace, doFn) } return nil @@ -308,7 +308,7 @@ func walkHeaderRef(ref *openapi3.HeaderRef, doFn func(RefWrapper) (bool, error)) return nil } - walkSchemaRef(ref.Value.Schema, doFn) + _ = walkSchemaRef(ref.Value.Schema, doFn) return nil } @@ -380,7 +380,7 @@ func walkExampleRef(ref *openapi3.ExampleRef, doFn func(RefWrapper) (bool, error func findComponentRefs(swagger *openapi3.T) []string { refs := []string{} - walkSwagger(swagger, func(ref RefWrapper) (bool, error) { + _ = walkSwagger(swagger, func(ref RefWrapper) (bool, error) { if ref.Ref != "" { refs = append(refs, ref.Ref) return false, nil From 753683caaa82c2feb1006cd92029e455572bd195 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:21:57 +0100 Subject: [PATCH 12/16] Lint: Use `fmt.Errorf` instead of `errors.New(fmt.Sprintf)` Via S1028 --- pkg/codegen/schema.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/codegen/schema.go b/pkg/codegen/schema.go index bbba3fc0b..d8001f199 100644 --- a/pkg/codegen/schema.go +++ b/pkg/codegen/schema.go @@ -1,7 +1,6 @@ package codegen import ( - "errors" "fmt" "strings" @@ -59,7 +58,7 @@ func (s *Schema) AddProperty(p Property) error { // Scan all existing properties for a conflict for _, e := range s.Properties { if e.JsonFieldName == p.JsonFieldName && !PropertiesEqual(e, p) { - return errors.New(fmt.Sprintf("property '%s' already exists with a different type", e.JsonFieldName)) + return fmt.Errorf("property '%s' already exists with a different type", e.JsonFieldName) } } s.Properties = append(s.Properties, p) From f8a19d0109832765b3073a8502aeaf901724fe3d Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:23:41 +0100 Subject: [PATCH 13/16] Lint: remove warning for `ineffectual` As we'll come back to it later. pkg/runtime/deepobject.go:245:5: ineffectual assignment to tm (ineffassign) tm, err = time.Parse(types.DateFormat, pathValues.value) --- pkg/runtime/deepobject.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/runtime/deepobject.go b/pkg/runtime/deepobject.go index 54fc1631a..f18ace374 100644 --- a/pkg/runtime/deepobject.go +++ b/pkg/runtime/deepobject.go @@ -242,7 +242,8 @@ func assignPathValues(dst interface{}, pathValues fieldOrValue) error { tm, err = time.Parse(time.RFC3339Nano, pathValues.value) if err != nil { // Fall back to parsing it as a date. - tm, err = time.Parse(types.DateFormat, pathValues.value) + // TODO: why is this marked as an ineffassign? + tm, err = time.Parse(types.DateFormat, pathValues.value) //nolint:ineffassign,staticcheck if err != nil { return fmt.Errorf("error parsing tim as RFC3339 or 2006-01-02 time: %s", err) } From bb71cce11d7be50d795a312cf67b827e90793409 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:24:28 +0100 Subject: [PATCH 14/16] Lint: Simplify `make` for a slice --- pkg/runtime/bindform.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/runtime/bindform.go b/pkg/runtime/bindform.go index b502f55af..50e03f846 100644 --- a/pkg/runtime/bindform.go +++ b/pkg/runtime/bindform.go @@ -131,7 +131,7 @@ func bindFormImpl(v reflect.Value, form map[string][]string, files map[string][] case reflect.Slice: if files := append(files[name], files[name+"[]"]...); len(files) != 0 { if _, ok := v.Interface().([]types.File); ok { - result := make([]types.File, len(files), len(files)) + result := make([]types.File, len(files)) for i, file := range files { result[i].InitFromMultipart(file) } From fb2a015d3c5ff48de6cf5fe7ab84e3bfa6ee5af4 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 25 Oct 2022 10:26:40 +0100 Subject: [PATCH 15/16] Lint: Ignore marshalling warning with `reflect.Value` pkg/runtime/bindform.go:102:34: SA9005: struct type 'reflect.Value' doesn't have any exported fields, nor custom marshaling (staticcheck) if data, err := json.Marshal(field); err != nil { --- pkg/runtime/bindform.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/runtime/bindform.go b/pkg/runtime/bindform.go index 50e03f846..4f4fb76c6 100644 --- a/pkg/runtime/bindform.go +++ b/pkg/runtime/bindform.go @@ -99,7 +99,7 @@ func MarshalForm(ptr interface{}, encodings map[string]RequestBodyEncoding) (url tag = strings.Split(tag, ",")[0] // extract the name of the tag if encoding, ok := encodings[tag]; ok && encoding.ContentType != "" { if strings.HasPrefix(encoding.ContentType, jsonContentType) { - if data, err := json.Marshal(field); err != nil { + if data, err := json.Marshal(field); err != nil { //nolint:staticcheck return nil, err } else { result[tag] = append(result[tag], string(data)) From 2a62eb7d9f0a243079b6707bf09713df5fa78a24 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Tue, 16 Aug 2022 21:03:29 +0100 Subject: [PATCH 16/16] Add linting with golangci-lint To give a bit more consistency across the project with the Go ecosystem, as well as picking up on some common errors that new contributions can bring, enable golangci-lint, with default configuration. --- .github/workflows/lint.yml | 20 ++++++++++++++++++++ Makefile | 12 ++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..6757ff953 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,20 @@ +name: Lint project +on: [push, pull_request] +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Check out source code + uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version-file: 'go.mod' + + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + # Make sure this matches the version we've got in our `Makefile` + version: v1.50.1 diff --git a/Makefile b/Makefile index 146075bc8..f76755631 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +GOBASE=$(shell pwd) +GOBIN=$(GOBASE)/bin + help: @echo "This is a helper makefile for oapi-codegen" @echo "Targets:" @@ -6,6 +9,15 @@ help: @echo " gin_example generate gin example server code" @echo " tidy tidy go mod" +$(GOBIN)/golangci-lint: + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOBIN) v1.50.1 + +.PHONY: tools +tools: $(GOBIN)/golangci-lint + +lint: tools + $(GOBIN)/golangci-lint run ./... + generate: go generate ./...