Skip to main content

MethodInfoBuilder

Struct MethodInfoBuilder 

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

Incrementally builds a MethodInfo from field accesses and method calls observed during a method body walk.

Entries where is_from_expansion is true are silently discarded, preventing macro-generated code from inflating the cohesion graph.

§Examples

use whitaker_common::lcom4::MethodInfoBuilder;

let mut builder = MethodInfoBuilder::new("process");
builder.record_field_access("data", false);
builder.record_field_access("generated_field", true); // macro — filtered
builder.record_method_call("validate", false);

let info = builder.build();
assert!(info.accessed_fields().contains("data"));
assert!(!info.accessed_fields().contains("generated_field"));
assert!(info.called_methods().contains("validate"));

Implementations§

Source§

impl MethodInfoBuilder

Source

pub fn new(name: impl Into<String>) -> Self

Creates a new builder for the named method with empty field and call sets.

§Examples
use whitaker_common::lcom4::MethodInfoBuilder;

let builder = MethodInfoBuilder::new("read");
assert!(builder.is_empty());
Source

pub fn record_field_access(&mut self, field_name: &str, is_from_expansion: bool)

Records a field access observed in the method body.

When is_from_expansion is true the access is silently ignored, preventing macro-generated field references from inflating the cohesion graph. Duplicate field names are naturally deduplicated by the underlying BTreeSet.

§Examples
use whitaker_common::lcom4::MethodInfoBuilder;

let mut builder = MethodInfoBuilder::new("render");
builder.record_field_access("canvas", false);
builder.record_field_access("macro_field", true);

let info = builder.build();
assert!(info.accessed_fields().contains("canvas"));
assert!(!info.accessed_fields().contains("macro_field"));
Source

pub fn record_method_call(&mut self, method_name: &str, is_from_expansion: bool)

Records a method call on the same type observed in the method body.

When is_from_expansion is true the call is silently ignored, preventing macro-generated calls from inflating the cohesion graph. Duplicate method names are naturally deduplicated by the underlying BTreeSet.

§Examples
use whitaker_common::lcom4::MethodInfoBuilder;

let mut builder = MethodInfoBuilder::new("dispatch");
builder.record_method_call("validate", false);
builder.record_method_call("macro_helper", true);

let info = builder.build();
assert!(info.called_methods().contains("validate"));
assert!(!info.called_methods().contains("macro_helper"));
Source

pub fn is_empty(&self) -> bool

Returns true when no (non-filtered) field accesses or method calls have been recorded.

This is useful for lint drivers that wish to skip methods with no observable state interaction before building the full MethodInfo.

§Examples
use whitaker_common::lcom4::MethodInfoBuilder;

let mut builder = MethodInfoBuilder::new("noop");
assert!(builder.is_empty());

builder.record_field_access("x", false);
assert!(!builder.is_empty());
Source

pub fn build(self) -> MethodInfo

Consumes the builder and returns the completed MethodInfo.

§Examples
use whitaker_common::lcom4::MethodInfoBuilder;

let mut builder = MethodInfoBuilder::new("process");
builder.record_field_access("data", false);
let info = builder.build();

assert_eq!(info.name(), "process");
assert!(info.accessed_fields().contains("data"));

Trait Implementations§

Source§

impl Clone for MethodInfoBuilder

Source§

fn clone(&self) -> MethodInfoBuilder

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 MethodInfoBuilder

Source§

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

Formats the value using the given formatter. 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> 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> 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> 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.