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() -> BlueprintExecutor
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) -> BlueprintExecutor
pub fn with_strategy(self, strategy: ExecutionStrategy) -> BlueprintExecutor
Set execution strategy
Sourcepub fn with_verify(self, verify: bool) -> BlueprintExecutor
pub fn with_verify(self, verify: bool) -> BlueprintExecutor
Enable compile verification after each mutation
Sourcepub fn with_stop_on_error(self, stop: bool) -> BlueprintExecutor
pub fn with_stop_on_error(self, stop: bool) -> BlueprintExecutor
Stop execution on first error
Trait Implementations§
Source§impl Debug for BlueprintExecutor
impl Debug for BlueprintExecutor
Source§impl Default for BlueprintExecutor
impl Default for BlueprintExecutor
Source§fn default() -> BlueprintExecutor
fn default() -> 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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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