pub struct ExprScopes {
scopes: Arena<ScopeData>,
scope_entries: Arena<ScopeEntry>,
scope_by_expr: ArenaMap<ExprId, ScopeId>,
}Fields§
§scopes: Arena<ScopeData>§scope_entries: Arena<ScopeEntry>§scope_by_expr: ArenaMap<ExprId, ScopeId>Implementations§
Source§impl ExprScopes
impl ExprScopes
pub fn body_expr_scopes<'db>( db: &'db dyn SourceDatabase, def: DefWithBodyId, ) -> &'db ExprScopes
pub fn sig_expr_scopes<'db>( db: &'db dyn SourceDatabase, def: GenericDefId, ) -> &'db ExprScopes
pub fn variant_scopes<'db>( db: &'db dyn SourceDatabase, def: VariantId, ) -> &'db ExprScopes
Source§impl ExprScopes
impl ExprScopes
pub fn of( db: &dyn SourceDatabase, def: impl Into<ExpressionStoreOwnerId>, ) -> &ExprScopes
pub fn entries(&self, scope: ScopeId) -> &[ScopeEntry]
Sourcepub fn block(&self, scope: ScopeId) -> Option<BlockId>
pub fn block(&self, scope: ScopeId) -> Option<BlockId>
If scope refers to a block expression scope, returns the corresponding BlockId.
Sourcepub fn macro_def(&self, scope: ScopeId) -> Option<&Box<MacroDefId>>
pub fn macro_def(&self, scope: ScopeId) -> Option<&Box<MacroDefId>>
If scope refers to a macro def scope, returns the corresponding MacroId.
Sourcepub fn label(&self, scope: ScopeId) -> Option<LabelId>
pub fn label(&self, scope: ScopeId) -> Option<LabelId>
If scope refers to a labeled expression scope, returns the corresponding Label.
Sourcepub fn scope_chain(
&self,
scope: Option<ScopeId>,
) -> impl Iterator<Item = ScopeId> + '_
pub fn scope_chain( &self, scope: Option<ScopeId>, ) -> impl Iterator<Item = ScopeId> + '_
Returns the scopes in ascending order.
pub fn resolve_name_in_scope( &self, scope: ScopeId, name: &Name, ) -> Option<&ScopeEntry>
pub fn scope_for(&self, expr: ExprId) -> Option<ScopeId>
pub fn scope_by_expr(&self) -> &ArenaMap<ExprId, ScopeId>
Source§impl ExprScopes
impl ExprScopes
fn new_body(body: &Body) -> ExprScopes
fn new_store( store: &ExpressionStore, roots: impl IntoIterator<Item = ExprId>, ) -> ExprScopes
fn root_scope(&mut self) -> ScopeId
fn new_scope(&mut self, parent: ScopeId) -> ScopeId
fn new_labeled_scope( &mut self, parent: ScopeId, label: Option<LabelId>, ) -> ScopeId
fn new_block_scope( &mut self, parent: ScopeId, block: Option<BlockId>, label: Option<LabelId>, ) -> ScopeId
fn new_macro_def_scope( &mut self, parent: ScopeId, macro_id: Box<MacroDefId>, ) -> ScopeId
fn add_bindings( &mut self, store: &ExpressionStore, scope: ScopeId, binding: BindingId, hygiene: HygieneId, )
fn set_scope(&mut self, node: ExprId, scope: ScopeId)
fn shrink_to_fit(&mut self)
Trait Implementations§
Source§impl Debug for ExprScopes
impl Debug for ExprScopes
impl Eq for ExprScopes
Source§impl PartialEq for ExprScopes
impl PartialEq for ExprScopes
impl StructuralPartialEq for ExprScopes
Auto Trait Implementations§
impl Freeze for ExprScopes
impl RefUnwindSafe for ExprScopes
impl Send for ExprScopes
impl Sync for ExprScopes
impl Unpin for ExprScopes
impl UnsafeUnpin for ExprScopes
impl UnwindSafe for ExprScopes
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
Mutably borrows from an owned value. Read more
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Checks if this value is equivalent to the given key. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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> ⓘ
Converts
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> ⓘ
Converts
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