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
impl MethodInfoBuilder
Sourcepub fn new(name: impl Into<String>) -> Self
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());Sourcepub fn record_field_access(&mut self, field_name: &str, is_from_expansion: bool)
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"));Sourcepub fn record_method_call(&mut self, method_name: &str, is_from_expansion: bool)
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"));Sourcepub fn is_empty(&self) -> bool
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());Sourcepub fn build(self) -> MethodInfo
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
impl Clone for MethodInfoBuilder
Source§fn clone(&self) -> MethodInfoBuilder
fn clone(&self) -> MethodInfoBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more