Skip to main content

BoilerplateCounts

Struct BoilerplateCounts 

Source
pub struct BoilerplateCounts {
    pub control: usize,
    pub calls: usize,
    pub macros: usize,
    pub statements: usize,
    pub work: usize,
    pub branches: usize,
    pub declarations: usize,
    pub returns: usize,
}
Expand description

What a unit’s body contains, counted over its whole subtree.

Calls are counted apart from statements because the IR models a call as an expression: f(); is one call node, not a statement wrapping one.

Fields§

§control: usize

Branches, loops, multi-way conditionals and error handling.

§calls: usize

Call expressions that are not themselves an argument to a call.

Nesting is what separates delegation from work. f(g(x), h(y)) is one delegation whose arguments happen to be computed by call: counting three calls there would say a wrapper does three things, when what it does is call f. Sibling calls are counted apart, because two calls in a row are two things done.

§macros: usize

Macro invocations that are not themselves an argument to a call.

Counted the way calls are, and for the same reason. f(tri!(g(x))) is one delegation whose argument happens to be spelled with a macro; counting the macro would say the body does something besides call f, when handing the argument over is all it does. A macro standing on its own is still counted: nothing here can see what it expands to, so a statement that is one is a statement whose contents are unknown.

§statements: usize

Statements other than macro invocations and control flow.

§work: usize

Statements that do more than name a value or hand one back.

A return around a delegation is punctuation. So is a local declared to receive what the delegation writes: a callee that answers through a pointer leaves its caller no other way to spell the call. An assignment or a bare expression statement is work.

Nothing here can see what an initialiser computes — the IR models a declaration as one node whether it names a place or fills it with arithmetic. That is why declarations are punctuation only beside a delegation, never on their own.

§branches: usize

Two-way conditionals, counted apart from the rest of the control flow.

One of them is a guard. Several are a decision table, which is something a reader can act on: two copies of one table differing in their constants is exactly the duplication worth reporting.

§declarations: usize

Local declarations, counted apart so a body can be required to have none. See work for why an initialiser cannot be inspected.

§returns: usize

return statements.

Trait Implementations§

Source§

impl Clone for BoilerplateCounts

Source§

fn clone(&self) -> BoilerplateCounts

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 Copy for BoilerplateCounts

Source§

impl Debug for BoilerplateCounts

Source§

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

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

impl Default for BoilerplateCounts

Source§

fn default() -> BoilerplateCounts

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

impl Eq for BoilerplateCounts

Source§

impl PartialEq for BoilerplateCounts

Source§

fn eq(&self, other: &BoilerplateCounts) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for BoilerplateCounts

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.