From 5d1c5ebd8cb953e3b816ee0e8ae0efca8fb7d427 Mon Sep 17 00:00:00 2001 From: Aaron Prindle Date: Wed, 16 Jul 2025 22:37:18 +0000 Subject: [PATCH] add ParentPath to context, remove Parent from context and plumb changes in validators --- .../cmd/validation-gen/validation.go | 18 +++++++++--------- .../cmd/validation-gen/validators/each.go | 14 +++++++------- .../cmd/validation-gen/validators/item.go | 10 +++++----- .../cmd/validation-gen/validators/subfield.go | 9 +++++---- .../validation-gen/validators/validators.go | 10 ++++------ 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go index 05a610f34e0..fc299d19599 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validation.go @@ -350,10 +350,10 @@ func (td *typeDiscoverer) discoverType(t *types.Type, fldPath *field.Path) (*typ panic(fmt.Sprintf("path for type != the type name: %s, %s", t.String(), fldPath.String())) } context := validators.Context{ - Scope: validators.ScopeType, - Type: t, - Parent: nil, - Path: fldPath, + Scope: validators.ScopeType, + Type: t, + ParentPath: nil, + Path: fldPath, } extractedTags, err := td.validator.ExtractTags(context, t.CommentLines) if err != nil { @@ -577,11 +577,11 @@ func (td *typeDiscoverer) discoverStruct(thisNode *typeNode, fldPath *field.Path // Extract any field-attached validation rules. context := validators.Context{ - Scope: validators.ScopeField, - Type: childType, - Parent: thisNode.valueType, - Member: &memb, - Path: childPath, + Scope: validators.ScopeField, + Type: childType, + ParentPath: fldPath, + Member: &memb, + Path: childPath, } tags, err := td.validator.ExtractTags(context, memb.CommentLines) diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go index 39671818342..462b56d1053 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/each.go @@ -400,9 +400,9 @@ func (evtv eachValTagValidator) GetValidations(context Context, tag codetags.Tag } elemContext := Context{ - Type: nt.Elem, - Parent: t, // possibly an alias - Path: context.Path.Key("*"), + Type: nt.Elem, + ParentPath: context.Path, + Path: context.Path.Key("*"), } switch nt.Kind { case types.Slice, types.Array: @@ -568,10 +568,10 @@ func (ektv eachKeyTagValidator) GetValidations(context Context, tag codetags.Tag } elemContext := Context{ - Scope: ScopeMapKey, - Type: t.Elem, - Parent: t, - Path: context.Path.Child("(keys)"), + Scope: ScopeMapKey, + Type: t.Elem, + ParentPath: context.Path, + Path: context.Path.Child("(keys)"), } if validations, err := ektv.validator.ExtractValidations(elemContext, *tag.ValueTag); err != nil { diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go index 4509783736c..36ab7aaae75 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/item.go @@ -254,11 +254,11 @@ func (iv itemValidator) GetValidations(context Context) (Validations, error) { // Extract validations from the stored tag subContextPath := generateFieldPathForMap(item.criteria) subContext := Context{ - Scope: ScopeListVal, - Type: elemT, - Parent: context.Type, - Path: context.Path.Key(subContextPath), - Member: nil, + Scope: ScopeListVal, + Type: elemT, + Path: context.Path.Key(subContextPath), + ParentPath: context.Path, + Member: nil, } validations, err := iv.validator.ExtractValidations(subContext, item.valueTag) diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/subfield.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/subfield.go index 6af38893b7e..b857d3a1420 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/subfield.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/subfield.go @@ -70,10 +70,11 @@ func (stv subfieldTagValidator) GetValidations(context Context, tag codetags.Tag } result := Validations{} subContext := Context{ - Scope: ScopeField, - Type: submemb.Type, - Parent: t, - Path: context.Path.Child(subname), + Scope: ScopeField, + Type: submemb.Type, + ParentPath: context.Path, + Member: submemb, + Path: context.Path.Child(subname), } if validations, err := stv.validator.ExtractValidations(subContext, *tag.ValueTag); err != nil { return Validations{}, err diff --git a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/validators.go b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/validators.go index 60bed17b17a..f3227b46c9c 100644 --- a/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/validators.go +++ b/staging/src/k8s.io/code-generator/cmd/validation-gen/validators/validators.go @@ -198,12 +198,10 @@ type Context struct { // both). Type *types.Type - // Parent provides details about the logical parent type of the object - // being validated, when applicable. When Scope is ScopeField, this is the - // containing struct's type. When Scope indicates a list-value, map-key, - // or map-value, this is the type of the whole list or map. When Scope is - // ScopeType, this is nil. - Parent *types.Type + // ParentPath provides the field path to the parent type or field, enabling + // unique identification of validation contexts for the same type in + // different locations. + ParentPath *field.Path // Member provides details about a field within a struct when Scope is // ScopeField. For all other values of Scope, this will be nil.