pub struct ImplTable {
pub diags: DiagnosticBag,
/* private fields */
}Expand description
Maps (TraitRef, Type) pairs to impl blocks and supports method dispatch.
§Construction
let table = ImplTable::build_from(&air_module_node);
// inspect table.diags for coherence errors§Querying
let impl_id = resolve_impl(&TraitRef::new("Equatable"), &ty, &table)?;
let method = resolve_method(&receiver_ty, "equals", &table)?;Fields§
§diags: DiagnosticBagDiagnostics emitted during construction (coherence errors use E4010).
Implementations§
Source§impl ImplTable
impl ImplTable
Sourcepub fn build_from(module: &AIRNode) -> Self
pub fn build_from(module: &AIRNode) -> Self
Build an ImplTable by walking the top-level items of an AIR module node.
The node must have NodeKind::Module; other node kinds produce an empty
table. Coherence checking (exact-type impl overlap detection) runs
during construction and emits E4010 diagnostics for any duplicate
(Trait, Type) pair.
Sourcepub fn register_supertrait(
&mut self,
sub_trait: impl Into<String>,
super_trait: impl Into<String>,
)
pub fn register_supertrait( &mut self, sub_trait: impl Into<String>, super_trait: impl Into<String>, )
Register a direct supertrait relationship: every impl of sub_trait
must also impl super_trait.
Sourcepub fn register_trait_impl(
&mut self,
trait_name: impl Into<String>,
ty: &Type,
) -> ImplId
pub fn register_trait_impl( &mut self, trait_name: impl Into<String>, ty: &Type, ) -> ImplId
Programmatically register a trait impl for a concrete type.
This is a convenience method for tests and downstream passes that need to populate the table without building from AIR nodes.
Sourcepub fn register_assoc_type(
&mut self,
impl_id: ImplId,
name: impl Into<String>,
ty: Type,
)
pub fn register_assoc_type( &mut self, impl_id: ImplId, name: impl Into<String>, ty: Type, )
Register an associated type binding for a given impl block.
Overrides any existing binding for (impl_id, name).
Sourcepub fn resolve_assoc_type(&self, impl_id: ImplId, name: &str) -> Option<&Type>
pub fn resolve_assoc_type(&self, impl_id: ImplId, name: &str) -> Option<&Type>
Look up an associated type binding by impl id and name.
Returns None if no binding has been registered.
Sourcepub fn all_supertraits(&self, trait_name: &str) -> Vec<String>
pub fn all_supertraits(&self, trait_name: &str) -> Vec<String>
Return all supertraits of trait_name, collected transitively via BFS.
The result list is in BFS order (direct supertraits before their
supertraits) with no duplicates. The original trait_name is not
included.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ImplTable
impl RefUnwindSafe for ImplTable
impl Send for ImplTable
impl Sync for ImplTable
impl Unpin for ImplTable
impl UnsafeUnpin for ImplTable
impl UnwindSafe for ImplTable
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);