SModel is a crate for defining subvariants of subvariants of subvariants of semantic symbols used in compiler codebases, typically those that use an unified symbol data type that relies on an arena, allowing circular references through use of a weak reference as the the only tuple value.
It supports:
- Dynamic dispatch
super.f(...)
Inheriting RustDoc comments(there is a bug for the#[inheritdoc]
attribute, so do not use it for now)- Covariant conversions
- Contravariant conversions