Integrate collection policies across layered assembly
This commit is contained in:
@@ -129,7 +129,7 @@ func assembleBaseInputTrackedForRole[T any](source Source, options Options[T], d
|
||||
}
|
||||
if !options.Imports && parsed.document != nil {
|
||||
var directiveDiagnostics []Diagnostic
|
||||
if directiveContext == rootDirectiveContextSource {
|
||||
if directiveContext == rootDirectiveContextSource || directiveContext == rootDirectiveContextLayered {
|
||||
directiveDiagnostics = disabledRootImportDiagnostics(parsed.document)
|
||||
} else {
|
||||
directiveDiagnostics = disabledDirectiveDiagnostics(parsed.document, Path{})
|
||||
@@ -159,6 +159,33 @@ func assembleBaseInputTrackedForRole[T any](source Source, options Options[T], d
|
||||
if role == sourceVersionMain && versionState != nil {
|
||||
versionState.mainProcessing = &processed
|
||||
}
|
||||
} else if directiveContext == rootDirectiveContextLayered {
|
||||
extracted, failures := extractRootDirectives(parsed.document, rootDirectiveContextLayered)
|
||||
if len(failures) != 0 {
|
||||
return input, failures
|
||||
}
|
||||
processed := sourceVersionProcessingResult{
|
||||
payload: extracted.body, imports: extracted.imports, sequences: extracted.sequences,
|
||||
directiveContext: rootDirectiveContextLayered,
|
||||
}
|
||||
if versionState != nil && versionState.mode != sourceVersionModeDefault {
|
||||
var sourceID string
|
||||
if parsed.source != nil {
|
||||
sourceID = parsed.source.ID
|
||||
}
|
||||
versionProcessed, versionFailures := versionState.process(extracted.body, role, destination, sourceID, options.placementMode)
|
||||
if len(versionFailures) != 0 {
|
||||
return input, versionFailures
|
||||
}
|
||||
versionProcessed.imports = extracted.imports
|
||||
versionProcessed.sequences = append(cloneSequenceDeclarations(extracted.sequences), versionProcessed.sequences...)
|
||||
versionProcessed.directiveContext = rootDirectiveContextLayered
|
||||
processed = versionProcessed
|
||||
if role == sourceVersionMain {
|
||||
versionState.mainProcessing = &processed
|
||||
}
|
||||
}
|
||||
versionProcessing = &processed
|
||||
} else if versionState != nil && versionState.mode != sourceVersionModeDefault {
|
||||
var sourceID string
|
||||
if parsed.source != nil {
|
||||
@@ -302,9 +329,13 @@ func compositionForInput(input assembledInput) (*composedDocument, []Diagnostic)
|
||||
}
|
||||
|
||||
func compositionForInputWithPolicy(input assembledInput, policy sequencePolicy) (*composedDocument, []Diagnostic) {
|
||||
return compositionForInputWithPolicies(input, collectionPolicyScope{}, policy)
|
||||
}
|
||||
|
||||
func compositionForInputWithPolicies(input assembledInput, lower collectionPolicyScope, policy sequencePolicy) (*composedDocument, []Diagnostic) {
|
||||
if input.composition != nil {
|
||||
if input.composition.root == nil && len(input.composition.acquisition) != 0 {
|
||||
return composeAcquiredInputWithPolicy(input, policy)
|
||||
return composeAcquiredInputWithPolicies(input, lower, policy)
|
||||
}
|
||||
return input.composition, nil
|
||||
}
|
||||
@@ -318,12 +349,12 @@ func compositionForInputWithPolicy(input assembledInput, policy sequencePolicy)
|
||||
acquired.inputNodes = countInputNodes(input.parsed.document)
|
||||
}
|
||||
input.composition = acquired
|
||||
return composeAcquiredInputWithPolicy(input, policy)
|
||||
return composeAcquiredInputWithPolicies(input, lower, policy)
|
||||
}
|
||||
if input.document == nil {
|
||||
return &composedDocument{root: &document.Node{Kind: document.Mapping}, origins: make(map[string]Origin)}, nil
|
||||
}
|
||||
composition, diagnostics := composeDocumentsWithPolicy(policy, input.document)
|
||||
composition, diagnostics := composeDocumentsWithCollectionPolicy(policy, lower, nil, input.document)
|
||||
if len(diagnostics) != 0 {
|
||||
return nil, diagnostics
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user