pub struct ViewDef<'a> {
pub component: Option<Symbol>,
pub root: ViewRoot<'a>,
pub nodes: Vec<ViewNode<'a>>,
pub mentions: Vec<(Symbol, Span)>,
pub span: Span,
}Expand description
One complete view: a Render: block, a Render into <el>: block, or a component’s
View: — in source order they appear in crate::parser::Parser::views.
Fields§
§component: Option<Symbol>The component this view belongs to (None for a bare Render:).
root: ViewRoot<'a>Where the tree renders.
nodes: Vec<ViewNode<'a>>§mentions: Vec<(Symbol, Span)>Every identifier the template MENTIONS, with its span in the FILE.
★ THE ONE THING A TOKEN WALK CANNOT RECOVER. A View: body reaches the parser as a single
RawBlock token, so a name used only in a template is not in the token stream at all —
which is why an editor could not jump from {count} to the Let count be 0. it names,
the most common movement there is in an LGX file. The positions are known HERE and only
here: TExpr carries its offset in the template body, and the parser holds the map from
body offsets to file offsets. Recorded on the way past rather than re-derived, because a
second copy of that arithmetic is a second thing to get wrong.
span: SpanImplementations§
Source§impl<'a> ViewDef<'a>
impl<'a> ViewDef<'a>
Sourcepub fn exprs_and_blocks(&self) -> (Vec<&'a Expr<'a>>, Vec<&'a [Stmt<'a>]>)
pub fn exprs_and_blocks(&self) -> (Vec<&'a Expr<'a>>, Vec<&'a [Stmt<'a>]>)
Every expression and every statement block the tree references (holes, attribute values, conditions, iterables, keys, handler bodies) — the traversal surface for depth bounds, scope analysis and tooling walks.
Sourcepub fn shape(&self, interner: &Interner) -> String
pub fn shape(&self, interner: &Interner) -> String
A compact, deterministic one-line rendering of the tree — the snapshot surface
view_ir_lock pins and largo expand prints.
Sourcepub fn body_shape(&self, interner: &Interner) -> String
pub fn body_shape(&self, interner: &Interner) -> String
Just the node tree, without the view of <Name> head — what a component’s own
shape embeds.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for ViewDef<'a>
impl<'a> RefUnwindSafe for ViewDef<'a>
impl<'a> Send for ViewDef<'a>
impl<'a> Sync for ViewDef<'a>
impl<'a> Unpin for ViewDef<'a>
impl<'a> UnsafeUnpin for ViewDef<'a>
impl<'a> UnwindSafe for ViewDef<'a>
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,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§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>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§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.§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.