Skip to main content

MutationRegistry

Struct MutationRegistry 

Source
pub struct MutationRegistry { /* private fields */ }
Expand description

Central registry for MutationSpec → Mutation conversion

Routes each MutationSpec to its appropriate Converter based on kind_name().

Implementations§

Source§

impl MutationRegistry

Source

pub fn new() -> Self

Create a new registry with all built-in converters registered

Uses register_all() for converters that handle multiple spec kinds, which automatically registers all kinds from spec_kinds(). This prevents the “forgot to register” bug.

Source

pub fn register( &mut self, kind: &'static str, converter: Box<dyn MutationConverter>, )

Register a converter for a single spec kind

Note: Each spec kind can only have one converter. For converters handling multiple spec kinds, use register_all().

Source

pub fn register_all<C: MutationConverter + Default + 'static>(&mut self)

Register a converter for all its spec_kinds() automatically.

This method creates a new instance of the converter for each spec kind it handles. Requires the converter to implement Default.

§Example
// Instead of:
registry.register("FilterNext", Box::new(IdiomConverter::new()));
registry.register("MapUnwrapOr", Box::new(IdiomConverter::new()));
// ... 15 more lines

// Use:
registry.register_all::<IdiomConverter>();
Source

pub fn can_handle(&self, spec: &MutationSpec) -> bool

Check if this registry can handle the given spec

Source

pub fn get(&self, spec: &MutationSpec) -> Option<&dyn MutationConverter>

Get the converter for a spec, if registered

Source

pub fn convert( &self, spec: &MutationSpec, ) -> Result<Box<dyn Mutation>, ConvertError>

👎Deprecated since 0.1.0:

Returns Box<dyn Mutation> for legacy apply(&mut PureFile). Use convert_v2() for ASTRegApply.

Convert a MutationSpec to a Mutation (DEPRECATED)

Source

pub fn convert_v2( &self, spec: &MutationSpec, ctx: &AnalysisContext, ) -> Result<Vec<Box<dyn ASTRegApply>>, ConvertError>

Convert a MutationSpec to execution units (V2 API)

Returns a vector of ASTRegApply mutations that implement the spec. One spec may expand to multiple execution units.

§Returns
  • Ok(mutations) - Vector of mutations to execute
  • Err(V2NotSupported) - Converter doesn’t implement convert_v2 yet
  • Err(UnknownSpec) - No converter registered for this spec kind
Source

pub fn pre_check( &self, spec: &MutationSpec, ctx: &AnalysisContext, ) -> Result<(), ConvertError>

Pre-check a MutationSpec before applying.

Uses GraphChecker to validate that targets exist before mutation. This catches errors early (e.g., field not found, type not found) without running cargo check.

§Checks performed
Spec KindCheck
RenameTarget symbol exists
AddField/RemoveFieldStruct exists
AddDerive/RemoveDeriveTarget type exists
AddVariant/RemoveVariantEnum exists
AddMethod/RemoveMethodTarget type exists
ChangeVisibilityTarget exists
Source

pub fn len(&self) -> usize

Get the number of registered converters

Source

pub fn is_empty(&self) -> bool

Check if the registry is empty

Source

pub fn registered_kinds(&self) -> Vec<&'static str>

Get all registered spec kinds

Trait Implementations§

Source§

impl Debug for MutationRegistry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for MutationRegistry

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more