Separate projection cloning and value comparison
This commit is contained in:
@@ -109,21 +109,7 @@ func runValidation[T any](configuration *T, validator func(*T, *Validation), sch
|
||||
state.diagnostics = append(state.diagnostics, validationMutationDiagnostic(issue.path))
|
||||
return canonicalDiagnostics(state.diagnostics)
|
||||
}
|
||||
for _, delta := range compareDocumentTrees(before, after) {
|
||||
state.diagnostics = append(state.diagnostics, validationMutationDiagnostic(delta.path))
|
||||
}
|
||||
beforeSensitivity := projectedSensitivity(before)
|
||||
afterSensitivity := projectedSensitivity(after)
|
||||
for pointer, path := range beforeSensitivity {
|
||||
if _, exists := afterSensitivity[pointer]; !exists {
|
||||
state.diagnostics = append(state.diagnostics, validationMutationDiagnostic(path))
|
||||
}
|
||||
}
|
||||
for pointer, path := range afterSensitivity {
|
||||
if _, exists := beforeSensitivity[pointer]; !exists {
|
||||
state.diagnostics = append(state.diagnostics, validationMutationDiagnostic(path))
|
||||
}
|
||||
}
|
||||
state.diagnostics = append(state.diagnostics, validationValueMutations(before, after)...)
|
||||
for _, path := range changedSecretStates(reflect.ValueOf(*configuration), schema.root, lookups) {
|
||||
state.diagnostics = append(state.diagnostics, validationMutationDiagnostic(path))
|
||||
}
|
||||
@@ -178,3 +164,25 @@ func nearestDocumentLocation(root *document.Node, path Path) (document.Location,
|
||||
func locationKnown(location document.Location) bool {
|
||||
return location.SourceID != "" || location.Line != 0 || location.Column != 0
|
||||
}
|
||||
|
||||
// validationValueMutations combines value and sensitivity changes; resolved
|
||||
// secret state is audited separately because it never enters projected trees.
|
||||
func validationValueMutations(before, after *document.Node) []Diagnostic {
|
||||
var diagnostics []Diagnostic
|
||||
for _, delta := range compareConfigurationValues(before, after) {
|
||||
diagnostics = append(diagnostics, validationMutationDiagnostic(delta.path))
|
||||
}
|
||||
beforeSensitivity := projectedSensitivity(before)
|
||||
afterSensitivity := projectedSensitivity(after)
|
||||
for pointer, path := range beforeSensitivity {
|
||||
if _, exists := afterSensitivity[pointer]; !exists {
|
||||
diagnostics = append(diagnostics, validationMutationDiagnostic(path))
|
||||
}
|
||||
}
|
||||
for pointer, path := range afterSensitivity {
|
||||
if _, exists := beforeSensitivity[pointer]; !exists {
|
||||
diagnostics = append(diagnostics, validationMutationDiagnostic(path))
|
||||
}
|
||||
}
|
||||
return diagnostics
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user