Skip to main content

CloneOnCopyMutation

Struct CloneOnCopyMutation 

Source
pub struct CloneOnCopyMutation {
    pub target_fn: Option<SymbolId>,
    pub aggressive: bool,
    pub copy_vars: Vec<String>,
}
Expand description

Remove unnecessary .clone() calls on Copy types

Since we don’t have full type information, this mutation is conservative and only removes .clone() in patterns where the type is clearly Copy:

  • Literals (integers, floats, bools, chars)
  • Known Copy types (primitives)

For more aggressive removal, use with Clippy integration which has full type information.

§Example

use ryo_mutations::idiom::CloneOnCopyMutation;

let mutation = CloneOnCopyMutation::new().aggressive();
// With aggressive mode, transforms: x.clone()
// Into:                             x
// (requires external type checking for safety)

Fields§

§target_fn: Option<SymbolId>

Target function SymbolId. If None, applies to all functions.

§aggressive: bool

Aggressive mode: remove all .clone() calls (requires external type checking)

§copy_vars: Vec<String>

Known Copy type variable names (for targeted removal)

Implementations§

Source§

impl CloneOnCopyMutation

Source

pub fn new() -> Self

Source

pub fn in_function(self, id: SymbolId) -> Self

Only apply in a specific function

Source

pub fn aggressive(self) -> Self

Enable aggressive mode (remove all .clone() calls)

Use with caution - this should be combined with Clippy’s type analysis or external validation.

Source

pub fn with_copy_var(self, var: impl Into<String>) -> Self

Add a variable known to be Copy type

Source

pub fn transform_fn(&self, func: &mut PureFn) -> usize

Trait Implementations§

Source§

impl Clone for CloneOnCopyMutation

Source§

fn clone(&self) -> CloneOnCopyMutation

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CloneOnCopyMutation

Source§

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

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

impl Default for CloneOnCopyMutation

Source§

fn default() -> CloneOnCopyMutation

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

impl Mutation for CloneOnCopyMutation

Source§

fn describe(&self) -> String

Get a description of this mutation
Source§

fn mutation_type(&self) -> &'static str

Get the mutation type name
Source§

fn box_clone(&self) -> Box<dyn Mutation>

Clone this mutation into a new Box
Source§

fn validate(&self, _file: &PureFile) -> ValidationResult

Validate the mutation before applying Read more
Source§

fn can_proceed(&self, file: &PureFile, strategy: ValidationStrategy) -> bool

Check if this mutation can proceed with the given strategy

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.