pub struct CompiledNestedSpec {
pub spec: NestedRuleSpec,
pub when: Option<WhenExpr>,
}Expand description
A NestedRuleSpec with its when: source pre-compiled
into a crate::when::WhenExpr at rule-build time.
Mirrors the v0.9.5-era pattern for when_iter: on cross-
file iteration rules: parse the source once at build, then
evaluate per iteration with a fresh iter context. v0.9.12
closed the gap: pre-v0.9.12 the nested when: source string
was re-parsed inside evaluate_for_each on every iteration
(one parse per (entry, nested-rule) pair, sometimes
thousands of redundant parses per cross-file rule eval). The
Option<WhenExpr> on this struct is parsed exactly once.
Build sites (for_each_dir, for_each_file,
every_matching_has in alint-rules) construct a
Vec<CompiledNestedSpec> from Vec<NestedRuleSpec> in
their build impl; evaluate_for_each consumes the
compiled form.
Fields§
§spec: NestedRuleSpecThe original nested-rule spec — passed to
NestedRuleSpec::instantiate per iteration to get a
per-iteration full RuleSpec with template tokens
substituted.
when: Option<WhenExpr>Pre-compiled when: expression. None when the nested
spec carried no when: clause.
Implementations§
Source§impl CompiledNestedSpec
impl CompiledNestedSpec
Sourcepub fn compile(
spec: NestedRuleSpec,
parent_id: &str,
idx: usize,
) -> Result<Self>
pub fn compile( spec: NestedRuleSpec, parent_id: &str, idx: usize, ) -> Result<Self>
Compile a NestedRuleSpec — parsing its when:
source string once. Surfaces a build-time config error
("<parent_id>: nested rule #<idx>: invalid when: ...")
when the source fails to parse, so misconfigured
nested-when clauses fail at config-load time instead of
per-iteration during evaluation.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for CompiledNestedSpec
impl RefUnwindSafe for CompiledNestedSpec
impl Send for CompiledNestedSpec
impl Sync for CompiledNestedSpec
impl Unpin for CompiledNestedSpec
impl UnsafeUnpin for CompiledNestedSpec
impl UnwindSafe for CompiledNestedSpec
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> 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