pub struct GrainCoverage {
pub denominator: DenominatorBasis,
pub covered_artifacts: usize,
pub describing_entities: usize,
pub unit: &'static str,
pub direct_covered: usize,
pub tree_only_covered: usize,
pub uncovered: Vec<String>,
pub excluded: usize,
pub tree_anchors: Vec<TreeFanout>,
}Expand description
Grain-classed coverage over S(D) (B1). Tree-anchor fan-out is a separate
axis — direct_covered and tree_only_covered are never summed into one
blended percentage.
Fields§
§denominator: DenominatorBasisThe denominator basis (B5).
covered_artifacts: usizeS(D) artifacts covered by at least one describing entity, direct or
tree — the coverage unit (2026-09-02, basket line 7): an artifact
counts once however many anchor rows or entities describe it, so
three anchors from one entity on one file are one covered artifact.
describing_entities: usizeDistinct destination entities that describe at least one S(D)
artifact through this binding’s anchors.
unit: &'static strThe unit statement, verbatim on the report, so the figure is never read as an anchor-row count.
direct_covered: usizeS(D) files directly covered by a non-tree (file / span) anchor.
tree_only_covered: usizeS(D) files covered only via a tree-grain anchor (the fan-out axis,
kept distinct from direct_covered).
uncovered: Vec<String>S(D) files with no anchor at all (the heavy artifact list).
excluded: usizeIn-scope artifacts carrying no anchor that a projection exclude
declared out of intent, and which are therefore NOT in uncovered
(C7). Dropped rather than marked: a reader counts the array and a gate
reads it, so an entry left in it stays owed however it is annotated.
The rationales ride disposed_excluded_rationales on the report.
tree_anchors: Vec<TreeFanout>Per tree anchor, its fan-out over S(D) (the heavy detail list).
Trait Implementations§
Source§impl Clone for GrainCoverage
impl Clone for GrainCoverage
Source§fn clone(&self) -> GrainCoverage
fn clone(&self) -> GrainCoverage
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GrainCoverage
impl Debug for GrainCoverage
impl Eq for GrainCoverage
Source§impl PartialEq for GrainCoverage
impl PartialEq for GrainCoverage
Source§impl Serialize for GrainCoverage
impl Serialize for GrainCoverage
impl StructuralPartialEq for GrainCoverage
Auto Trait Implementations§
impl Freeze for GrainCoverage
impl RefUnwindSafe for GrainCoverage
impl Send for GrainCoverage
impl Sync for GrainCoverage
impl Unpin for GrainCoverage
impl UnsafeUnpin for GrainCoverage
impl UnwindSafe for GrainCoverage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> Fruit for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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