pub struct BlueprintExecutor {
pub strategy: ExecutionStrategy,
pub verify_after_each: bool,
pub stop_on_error: bool,
pub ignore_conflicts: bool,
/* private fields */
}Expand description
Executor for ParallelBlueprint
Fields§
§strategy: ExecutionStrategyExecution strategy
verify_after_each: boolWhether to verify compile after each mutation
stop_on_error: boolWhether to stop on first error
ignore_conflicts: boolWhether to ignore conflicts and process sequentially Default: true (conflicts are ignored, specs processed in order)
Implementations§
Source§impl BlueprintExecutor
impl BlueprintExecutor
pub fn new() -> Self
Sourcepub fn execute_v2(
&self,
blueprint: &ParallelBlueprint,
ctx: &mut AnalysisContext,
) -> BlueprintResult
pub fn execute_v2( &self, blueprint: &ParallelBlueprint, ctx: &mut AnalysisContext, ) -> BlueprintResult
Execute blueprint using ASTRegistry-centric path.
This is the new execution path that:
- Executes mutations directly on ASTRegistry (no file I/O)
- Returns MutationEvents for incremental updates
Important: This method only updates ASTRegistry. Callers must:
- Call
ctx.sync_files_and_rebuild()for full sync (files + graphs) - Or skip sync for lightweight precheck scenarios
Unimplemented MutationSpecs will panic - this is intentional as we’re building towards complete migration.
Sourcepub fn sync_files_and_rebuild(
result: &BlueprintResult,
ctx: &mut AnalysisContext,
) -> Result<Vec<WorkspaceFilePath>, SyncError>
pub fn sync_files_and_rebuild( result: &BlueprintResult, ctx: &mut AnalysisContext, ) -> Result<Vec<WorkspaceFilePath>, SyncError>
Synchronize files and rebuild analysis graphs after execute_v2.
This method should be called after execute_v2() when you need:
- Updated source files (for disk write or cargo check)
- Updated analysis graphs (code_graph, typeflow, dataflow, detail_store)
For lightweight precheck scenarios, skip this call entirely.
§File Path Resolution
This method handles the conversion from RegistryGenerator’s output
(crate-relative paths like "src/lib.rs") to workspace-relative paths
(like "crates/core/src/lib.rs").
The conversion works as follows:
-
Extract crate roots from existing files: For each crate, find its root directory by looking at existing
WorkspaceFilePaths inctx.files. For example,"crates/core/src/lib.rs"→ crate_root ="crates/core". -
Combine crate_root + crate-relative path: The generator outputs
"src/lib.rs", and we prepend the crate_root to get the full workspace-relative path:"crates/core" + "src/lib.rs"→"crates/core/src/lib.rs".
This approach keeps RegistryGenerator focused on pure SymbolPath-based
generation, while the caller (this function) handles workspace layout concerns.
§Arguments
result: The BlueprintResult from execute_v2ctx: The AnalysisContext that was mutated
§Returns
List of modified file paths (as WorkspaceFilePath)
Sourcepub fn with_strategy(self, strategy: ExecutionStrategy) -> Self
pub fn with_strategy(self, strategy: ExecutionStrategy) -> Self
Set execution strategy
Sourcepub fn with_verify(self, verify: bool) -> Self
pub fn with_verify(self, verify: bool) -> Self
Enable compile verification after each mutation
Sourcepub fn with_stop_on_error(self, stop: bool) -> Self
pub fn with_stop_on_error(self, stop: bool) -> Self
Stop execution on first error
Trait Implementations§
Source§impl Debug for BlueprintExecutor
impl Debug for BlueprintExecutor
Auto Trait Implementations§
impl Freeze for BlueprintExecutor
impl !RefUnwindSafe for BlueprintExecutor
impl Send for BlueprintExecutor
impl Sync for BlueprintExecutor
impl Unpin for BlueprintExecutor
impl UnsafeUnpin for BlueprintExecutor
impl !UnwindSafe for BlueprintExecutor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more