pub struct SymbolTable {
pub resolutions: HashMap<NodeId, ResolvedName>,
pub effect_info: HashMap<String, EffectInfo>,
/* private fields */
}Expand description
A hierarchical symbol table: module scope → nested scopes → bindings.
The scope stack grows when blocks are entered and shrinks when they exit. Lookups walk from the innermost scope outward; the first match wins (lexical shadowing).
Fields§
§resolutions: HashMap<NodeId, ResolvedName>Resolution map: usage-site NodeId → resolved binding.
effect_info: HashMap<String, EffectInfo>Effect declarations: effect name → operations and components.
Populated during the collection phase, read during resolution to
inject effect operations into with-annotated function scopes.
Implementations§
Source§impl SymbolTable
impl SymbolTable
Sourcepub fn define(&mut self, name: String, binding: Binding)
pub fn define(&mut self, name: String, binding: Binding)
Defines name in the current (innermost) scope.
Sourcepub fn push_scope(&mut self)
pub fn push_scope(&mut self)
Pushes a new empty scope onto the stack.
Sourcepub fn pop_scope(&mut self) -> Option<Scope>
pub fn pop_scope(&mut self) -> Option<Scope>
Pops and returns the innermost scope. Returns None if only the
module scope remains (it is never popped).
Sourcepub fn lookup(&mut self, name: &str) -> Option<ResolvedName>
pub fn lookup(&mut self, name: &str) -> Option<ResolvedName>
Looks up name, walking from innermost to outermost scope.
Marks the binding as used and returns a clone of the resolved name.
Sourcepub fn mark_used(&mut self, name: &str)
pub fn mark_used(&mut self, name: &str)
Marks the binding for name as used without returning a resolution.
Used for type names that appear in constructor or annotation position.
Sourcepub fn lookup_peek(&self, name: &str) -> Option<&Binding>
pub fn lookup_peek(&self, name: &str) -> Option<&Binding>
Immutable lookup — does not mark the binding as used.
Sourcepub fn record_resolution(&mut self, use_id: NodeId, resolved: ResolvedName)
pub fn record_resolution(&mut self, use_id: NodeId, resolved: ResolvedName)
Records that the node at use_id resolves to resolved.
Sourcepub fn visible_names(&self) -> Vec<String>
pub fn visible_names(&self) -> Vec<String>
Collects every name visible in the current scope stack.
Used for “did you mean X?” suggestions when a lookup fails. Names from inner scopes shadow outer scopes, but for suggestion purposes we include all reachable binders — duplicates are de-duplicated.
Sourcepub fn has_wildcard_import(&self) -> bool
pub fn has_wildcard_import(&self) -> bool
Returns true if any wildcard (*) import exists in the module scope.
Sourcepub fn unused_imports(&self) -> Vec<&Binding>
pub fn unused_imports(&self) -> Vec<&Binding>
Returns all import bindings from the module scope that were never used.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for SymbolTable
impl RefUnwindSafe for SymbolTable
impl Send for SymbolTable
impl Sync for SymbolTable
impl Unpin for SymbolTable
impl UnsafeUnpin for SymbolTable
impl UnwindSafe for SymbolTable
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);