Isolate source directive processing
This commit is contained in:
@@ -685,6 +685,15 @@ destinations, selected overlays, and NoSource preserve callback counts, order,
|
|||||||
warnings, safe diagnostics, and retained declaration locations.
|
warnings, safe diagnostics, and retained declaration locations.
|
||||||
Focused check: `go test ./internal/engine -run 'SourceVersion|Version|Directive|Destination'`.
|
Focused check: `go test ./internal/engine -run 'SourceVersion|Version|Directive|Destination'`.
|
||||||
|
|
||||||
|
Status: **complete** (first part of F02). Prior completed commits: `2736ddf`,
|
||||||
|
`deb9aa5`, `ae3408a`, `ea27f17`, `08a8c25`, `877c497`, `8aba43d`, `7bf2f0c`,
|
||||||
|
`0f9ecf1`, `119b42c`, `247a12b`, `4fcff5f`, `12d350a`, `08f2a8f`, `826062a`,
|
||||||
|
`e4a5ecb`, `3122e2f`, `6f6130f`, `4fd3bee`, and `4bf940c`. Validation passed:
|
||||||
|
`env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./internal/engine -run 'SourceVersion|Version|Directive|Destination' -count=1`,
|
||||||
|
`env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./internal/engine -count=1`,
|
||||||
|
`env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./... -count=1`,
|
||||||
|
and `git diff --check`.
|
||||||
|
|
||||||
## Stage 22 — Isolate Standalone Placement And Acquisition Completion
|
## Stage 22 — Isolate Standalone Placement And Acquisition Completion
|
||||||
|
|
||||||
Finding: second part of **F02**.
|
Finding: second part of **F02**.
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
versionState := state.versionState
|
versionState := state.versionState
|
||||||
visited := tier.visited
|
visited := tier.visited
|
||||||
hostToken := tier.hostToken
|
hostToken := tier.hostToken
|
||||||
role := request.role
|
|
||||||
sourceID := "source-" + strconv.Itoa(accounting.sources+1)
|
sourceID := "source-" + strconv.Itoa(accounting.sources+1)
|
||||||
selectedSource := source
|
selectedSource := source
|
||||||
if source.kind == sourceSearch {
|
if source.kind == sourceSearch {
|
||||||
@@ -98,67 +97,10 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
return input, directiveDiagnostics
|
return input, directiveDiagnostics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var versionProcessing *sourceVersionProcessingResult
|
request.directiveContext = directiveContext
|
||||||
if directiveContext == rootDirectiveContextSource {
|
versionProcessing, diagnostics := processAcquiredInputVersion(parsed, request, versionState)
|
||||||
var sourceID string
|
if len(diagnostics) != 0 {
|
||||||
if parsed.source != nil {
|
return input, diagnostics
|
||||||
sourceID = parsed.source.ID
|
|
||||||
}
|
|
||||||
var processed sourceVersionProcessingResult
|
|
||||||
var failures []Diagnostic
|
|
||||||
if versionState != nil {
|
|
||||||
processed, failures = versionState.processWithDirectiveContext(parsed.document, role, destination, sourceID, request.input.placementMode, directiveContext)
|
|
||||||
} else {
|
|
||||||
processed = processSourceVersionWithDirectiveContext(parsed.document, request.protectionRule, role, destination, sourceVersionModeDefault, directiveContext)
|
|
||||||
failures = processed.diagnostics
|
|
||||||
}
|
|
||||||
if len(failures) != 0 {
|
|
||||||
return input, failures
|
|
||||||
}
|
|
||||||
versionProcessing = &processed
|
|
||||||
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, request.input.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 {
|
|
||||||
sourceID = parsed.source.ID
|
|
||||||
}
|
|
||||||
processed, failures := versionState.process(parsed.document, role, destination, sourceID, request.input.placementMode)
|
|
||||||
if len(failures) != 0 {
|
|
||||||
return input, failures
|
|
||||||
}
|
|
||||||
versionProcessing = &processed
|
|
||||||
if role == sourceVersionMain {
|
|
||||||
versionState.mainProcessing = &processed
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
request.input.source = selectedSource
|
request.input.source = selectedSource
|
||||||
if request.input.imports && selectedSource.kind != sourceNone {
|
if request.input.imports && selectedSource.kind != sourceNone {
|
||||||
@@ -235,6 +177,85 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
return input, nil
|
return input, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func processAcquiredInputVersion(parsed parsedSource, request inputAcquisitionRequest, state *sourceVersionState) (*sourceVersionProcessingResult, []Diagnostic) {
|
||||||
|
sourceID := ""
|
||||||
|
if parsed.source != nil {
|
||||||
|
sourceID = parsed.source.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
var result sourceVersionProcessingResult
|
||||||
|
hasResult := false
|
||||||
|
updateMainProcessing := false
|
||||||
|
switch request.directiveContext {
|
||||||
|
case rootDirectiveContextSource:
|
||||||
|
if state != nil {
|
||||||
|
processed, diagnostics := state.processWithDirectiveContext(
|
||||||
|
parsed.document, request.role, request.input.destination, sourceID,
|
||||||
|
request.input.placementMode, request.directiveContext,
|
||||||
|
)
|
||||||
|
if len(diagnostics) != 0 {
|
||||||
|
return nil, diagnostics
|
||||||
|
}
|
||||||
|
result = processed
|
||||||
|
updateMainProcessing = request.role == sourceVersionMain
|
||||||
|
} else {
|
||||||
|
result = processSourceVersionWithDirectiveContext(
|
||||||
|
parsed.document, request.protectionRule, request.role,
|
||||||
|
request.input.destination, sourceVersionModeDefault, request.directiveContext,
|
||||||
|
)
|
||||||
|
if len(result.diagnostics) != 0 {
|
||||||
|
return nil, result.diagnostics
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hasResult = true
|
||||||
|
case rootDirectiveContextLayered:
|
||||||
|
extracted, diagnostics := extractRootDirectives(parsed.document, request.directiveContext)
|
||||||
|
if len(diagnostics) != 0 {
|
||||||
|
return nil, diagnostics
|
||||||
|
}
|
||||||
|
result = sourceVersionProcessingResult{
|
||||||
|
payload: extracted.body, imports: extracted.imports, sequences: extracted.sequences,
|
||||||
|
directiveContext: request.directiveContext,
|
||||||
|
}
|
||||||
|
hasResult = true
|
||||||
|
if state != nil && state.mode != sourceVersionModeDefault {
|
||||||
|
processed, diagnostics := state.process(
|
||||||
|
extracted.body, request.role, request.input.destination,
|
||||||
|
sourceID, request.input.placementMode,
|
||||||
|
)
|
||||||
|
if len(diagnostics) != 0 {
|
||||||
|
return nil, diagnostics
|
||||||
|
}
|
||||||
|
processed.imports = extracted.imports
|
||||||
|
processed.sequences = append(cloneSequenceDeclarations(extracted.sequences), processed.sequences...)
|
||||||
|
processed.directiveContext = request.directiveContext
|
||||||
|
result = processed
|
||||||
|
updateMainProcessing = request.role == sourceVersionMain
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if state != nil && state.mode != sourceVersionModeDefault {
|
||||||
|
processed, diagnostics := state.process(
|
||||||
|
parsed.document, request.role, request.input.destination,
|
||||||
|
sourceID, request.input.placementMode,
|
||||||
|
)
|
||||||
|
if len(diagnostics) != 0 {
|
||||||
|
return nil, diagnostics
|
||||||
|
}
|
||||||
|
result = processed
|
||||||
|
hasResult = true
|
||||||
|
updateMainProcessing = request.role == sourceVersionMain
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !hasResult {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
if updateMainProcessing {
|
||||||
|
completed := result
|
||||||
|
state.mainProcessing = &completed
|
||||||
|
}
|
||||||
|
return &result, nil
|
||||||
|
}
|
||||||
|
|
||||||
func registerAcquiredSource(source Source, context *FilesystemContext, info *SourceInfo, visited map[resourceIdentity]importRoute, hostToken *namespaceToken) *Diagnostic {
|
func registerAcquiredSource(source Source, context *FilesystemContext, info *SourceInfo, visited map[resourceIdentity]importRoute, hostToken *namespaceToken) *Diagnostic {
|
||||||
if visited == nil || info == nil || info.Path == "" {
|
if visited == nil || info == nil || info.Path == "" {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user